Author: jmorliaguet Date: Tue Mar 7 09:41:51 2006 New Revision: 2553 Modified: cpsskins/branches/jmo-perspectives/ui/framework/prototype.js Log:
- updated to latest prototype.js * Make $$ work in IE. Closes #3715. [EMAIL PROTECTED] * Add test/browser.html, which provides a simple object browser for the Prototype source (Firefox/Safari only). [sam] * Add Element.extend, which mixes Element methods into a single HTML element. This means you can now write $('foo').show() instead of Element.show('foo'). $, $$ and document.getElementsByClassName automatically call Element.extend on any returned elements. [sam] * Add Element.replace as a cross-browser implementation of the "outerHTML" property. References #3246. [EMAIL PROTECTED] * Fix Enumerable.zip iterator behavior. [Marcin Kaszynski, sam] Modified: cpsskins/branches/jmo-perspectives/ui/framework/prototype.js ============================================================================== --- cpsskins/branches/jmo-perspectives/ui/framework/prototype.js (original) +++ cpsskins/branches/jmo-perspectives/ui/framework/prototype.js Tue Mar 7 09:41:51 2006 @@ -116,25 +116,6 @@ } } } - -/*--------------------------------------------------------------------------*/ - -function $() { - var elements = new Array(); - - for (var i = 0; i < arguments.length; i++) { - var element = arguments[i]; - if (typeof element == 'string') - element = document.getElementById(element); - - if (arguments.length == 1) - return element; - - elements.push(element); - } - - return elements; -} Object.extend(String.prototype, { gsub: function(pattern, replacement) { var result = '', source = this, match; @@ -891,22 +872,48 @@ this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); +function $() { + var results = [], element; + for (var i = 0; i < arguments.length; i++) { + element = arguments[i]; + if (typeof element == 'string') + element = document.getElementById(element); + results.push(Element.extend(element)); + } + return results.length < 2 ? results[0] : results; +} + document.getElementsByClassName = function(className, parentElement) { var children = ($(parentElement) || document.body).getElementsByTagName('*'); return $A(children).inject([], function(elements, child) { if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) - elements.push(child); + elements.push(Element.extend(child)); return elements; }); } /*--------------------------------------------------------------------------*/ -if (!window.Element) { +if (!window.Element) var Element = new Object(); + +Element.extend = function(element) { + if (!element) return; + + if (!element._extended && element.tagName && element != window) { + var methods = Element.Methods; + for (property in methods) { + var value = methods[property]; + if (typeof value == 'function') + element[property] = value.bind(null, element); + } + } + + element._extended = true; + return element; } -Object.extend(Element, { +Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; }, @@ -1093,7 +1100,9 @@ element.style.overflow = element._overflow; element._overflow = undefined; } -}); +} + +Object.extend(Element, Element.Methods); var Toggle = new Object(); Toggle.display = Element.toggle; @@ -1249,6 +1258,7 @@ switch (modifier) { case '#': params.id = clause; break; case '.': params.classNames.push(clause); break; + case '': case undefined: params.tagName = clause.toUpperCase(); break; default: abort(expr.inspect()); } @@ -1276,8 +1286,8 @@ }, compileMatcher: function() { - this.match = eval('function(element) { if (!element.tagName) return false; \ - return ' + this.buildMatchExpression() + ' }'); + this.match = new Function('element', 'if (!element.tagName) return false; \ + return ' + this.buildMatchExpression()); }, findElements: function(scope) { @@ -1293,7 +1303,7 @@ var results = []; for (var i = 0; i < scope.length; i++) if (this.match(element = scope[i])) - results.push(element); + results.push(Element.extend(element)); return results; }, -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins