(function($){ if (typeof _ == 'undefined') babel.Translations.load({}).install(); $.fn.addAnchor = function(title) { title = title || _("Link here"); return this.filter("*[id]").each(function() { $(" \u00B6").attr("href", "#" + this.id) .attr("title", title).appendTo(this); }); } $.fn.checked = function(checked) { if (checked == undefined) { // getter if (!this.length) return false; return this.get(0).checked; } else { // setter return this.each(function() { this.checked = checked; }); } } $.fn.enable = function(enabled) { if (enabled == undefined) enabled = true; return this.each(function() { this.disabled = !enabled; var label = $(this).parents("label"); if (!label.length && this.id) { label = $("label[for='" + this.id + "']"); } if (!enabled) { label.addClass("disabled"); } else { label.removeClass("disabled"); } }); } $.fn.getAbsolutePos = function() { return this.map(function() { var left = this.offsetLeft; var top = this.offsetTop; var parent = this.offsetParent; while (parent) { left += parent.offsetLeft; top += parent.offsetTop; parent = parent.offsetParent; } return {left: left, top: top}; }); } $.fn.scrollToTop = function() { return this.each(function() { scrollTo(0, $(this).getAbsolutePos()[0].top); return false; }); } $.loadStyleSheet = function(href, type) { type = type || "text/css"; $(document).ready(function() { if (document.createStyleSheet) { // MSIE document.createStyleSheet(href); } else { $("") .appendTo("head"); } }); } // Escape special HTML characters (&<>") var quote = {"&": "&", "<": "<", ">": ">", '"': """}; $.htmlEscape = function(value) { if (typeof value != "string") return value; return value.replace(/[&<>"]/g, function(c) { return quote[c]; }); } function format(str, args, escape) { var kwargs = args[args.length - 1]; return str.replace(/\${?(\w+)}?/g, function(_, k) { var result; if (k.length == 1 && k >= '0' && k <= '9') result = args[k - '0']; else result = kwargs[k]; return escape ? escape(result) : result; }); } // Expand positional ($1 .. $9) and keyword ($name) arguments in a string. // The htmlFormat() version HTML-escapes arguments prior to substitution. $.format = function(str) { return format(str, arguments); } $.htmlFormat = function(str) { return format(str, arguments, $.htmlEscape); } $.template = $.format; // For backward compatibility // Used for dynamically updating the height of a textarea window.resizeTextArea = function (id, rows) { var textarea = $("#" + id).get(0); if (!textarea || textarea.rows == undefined) return; $(textarea).height(""); textarea.rows = rows; } // The following are defined for backwards compatibility with releases prior // to Trac 0.11 window.addEvent = function(elem, type, func) { $(elem).bind(type, func); } window.addHeadingLinks = function(container, title) { $.each(["h1", "h2", "h3", "h4", "h5", "h6"], function() { $(this, container).addAnchor(title); }); } window.enableControl = function(id, enabled) { $("#" + id).enable(enabled); } window.getAncestorByTagName = function(elem, tagName) { return $(elem).parents(tagName).get(0); } })(jQuery);