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

Reply via email to