[ Index ]
 

Code source de PRADO 3.0.6

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/framework/Web/Javascripts/prototype/ -> dom.js (source)

   1  function $() {
   2    var results = [], element;
   3    for (var i = 0; i < arguments.length; i++) {
   4      element = arguments[i];
   5      if (typeof element == 'string')
   6        element = document.getElementById(element);
   7      results.push(Element.extend(element));
   8    }
   9    return results.length < 2 ? results[0] : results;
  10  }
  11  
  12  document.getElementsByClassName = function(className, parentElement) {
  13    var children = ($(parentElement) || document.body).getElementsByTagName('*');
  14    return $A(children).inject([], function(elements, child) {
  15      if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
  16        elements.push(Element.extend(child));
  17      return elements;
  18    });
  19  }
  20  
  21  /*--------------------------------------------------------------------------*/
  22  
  23  if (!window.Element)
  24    var Element = new Object();
  25  
  26  Element.extend = function(element) {
  27    if (!element) return;
  28    if (_nativeExtensions) return element;
  29    
  30    if (!element._extended && element.tagName && element != window) {
  31      var methods = Element.Methods, cache = Element.extend.cache;
  32      for (property in methods) {
  33        var value = methods[property];
  34        if (typeof value == 'function')
  35          element[property] = cache.findOrStore(value);
  36      }
  37    }
  38    
  39    element._extended = true;
  40    return element;
  41  }
  42  
  43  Element.extend.cache = {
  44    findOrStore: function(value) {
  45      return this[value] = this[value] || function() {
  46        return value.apply(null, [this].concat($A(arguments)));
  47      }
  48    }
  49  }
  50  
  51  Element.Methods = {
  52    visible: function(element) {
  53      return $(element).style.display != 'none';
  54    },
  55    
  56    toggle: function() {
  57      for (var i = 0; i < arguments.length; i++) {
  58        var element = $(arguments[i]);
  59        Element[Element.visible(element) ? 'hide' : 'show'](element);
  60      }
  61    },
  62  
  63    hide: function() {
  64      for (var i = 0; i < arguments.length; i++) {
  65        var element = $(arguments[i]);
  66        element.style.display = 'none';
  67      }
  68    },
  69    
  70    show: function() {
  71      for (var i = 0; i < arguments.length; i++) {
  72        var element = $(arguments[i]);
  73        element.style.display = '';
  74      }
  75    },
  76  
  77    remove: function(element) {
  78      element = $(element);
  79      element.parentNode.removeChild(element);
  80    },
  81  
  82    update: function(element, html) {
  83      $(element).innerHTML = html.stripScripts();
  84      setTimeout(function() {html.evalScripts()}, 10);
  85    },
  86    
  87    replace: function(element, html) {
  88      element = $(element);
  89      if (element.outerHTML) {
  90        element.outerHTML = html.stripScripts();
  91      } else {
  92        var range = element.ownerDocument.createRange();
  93        range.selectNodeContents(element);
  94        element.parentNode.replaceChild(
  95          range.createContextualFragment(html.stripScripts()), element);
  96      }
  97      setTimeout(function() {html.evalScripts()}, 10);
  98    },
  99    
 100    getHeight: function(element) {
 101      element = $(element);
 102      return element.offsetHeight; 
 103    },
 104    
 105    classNames: function(element) {
 106      return new Element.ClassNames(element);
 107    },
 108  
 109    hasClassName: function(element, className) {
 110      if (!(element = $(element))) return;
 111      return Element.classNames(element).include(className);
 112    },
 113  
 114    addClassName: function(element, className) {
 115      if (!(element = $(element))) return;
 116      return Element.classNames(element).add(className);
 117    },
 118  
 119    removeClassName: function(element, className) {
 120      if (!(element = $(element))) return;
 121      return Element.classNames(element).remove(className);
 122    },
 123    
 124    // removes whitespace-only text node children
 125    cleanWhitespace: function(element) {
 126      element = $(element);
 127      for (var i = 0; i < element.childNodes.length; i++) {
 128        var node = element.childNodes[i];
 129        if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
 130          Element.remove(node);
 131      }
 132    },
 133    
 134    empty: function(element) {
 135      return $(element).innerHTML.match(/^\s*$/);
 136    },
 137    
 138    childOf: function(element, ancestor) {
 139      element = $(element), ancestor = $(ancestor);
 140      while (element = element.parentNode)
 141        if (element == ancestor) return true;
 142      return false;
 143    },
 144    
 145    scrollTo: function(element) {
 146      element = $(element);
 147      var x = element.x ? element.x : element.offsetLeft,
 148          y = element.y ? element.y : element.offsetTop;
 149      window.scrollTo(x, y);
 150    },
 151    
 152    getStyle: function(element, style) {
 153      element = $(element);
 154      var value = element.style[style.camelize()];
 155      if (!value) {
 156        if (document.defaultView && document.defaultView.getComputedStyle) {
 157          var css = document.defaultView.getComputedStyle(element, null);
 158          value = css ? css.getPropertyValue(style) : null;
 159        } else if (element.currentStyle) {
 160          value = element.currentStyle[style.camelize()];
 161        }
 162      }
 163  
 164      if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
 165        if (Element.getStyle(element, 'position') == 'static') value = 'auto';
 166  
 167      return value == 'auto' ? null : value;
 168    },
 169    
 170    setStyle: function(element, style) {
 171      element = $(element);
 172      for (var name in style) 
 173        element.style[name.camelize()] = style[name];
 174    },
 175    
 176    getDimensions: function(element) {
 177      element = $(element);
 178      if (Element.getStyle(element, 'display') != 'none')
 179        return {width: element.offsetWidth, height: element.offsetHeight};
 180      
 181      // All *Width and *Height properties give 0 on elements with display none,
 182      // so enable the element temporarily
 183      var els = element.style;
 184      var originalVisibility = els.visibility;
 185      var originalPosition = els.position;
 186      els.visibility = 'hidden';
 187      els.position = 'absolute';
 188      els.display = '';
 189      var originalWidth = element.clientWidth;
 190      var originalHeight = element.clientHeight;
 191      els.display = 'none';
 192      els.position = originalPosition;
 193      els.visibility = originalVisibility;
 194      return {width: originalWidth, height: originalHeight};    
 195    },
 196    
 197    makePositioned: function(element) {
 198      element = $(element);
 199      var pos = Element.getStyle(element, 'position');
 200      if (pos == 'static' || !pos) {
 201        element._madePositioned = true;
 202        element.style.position = 'relative';
 203        // Opera returns the offset relative to the positioning context, when an
 204        // element is position relative but top and left have not been defined
 205        if (window.opera) {
 206          element.style.top = 0;
 207          element.style.left = 0;
 208        }  
 209      }
 210    },
 211  
 212    undoPositioned: function(element) {
 213      element = $(element);
 214      if (element._madePositioned) {
 215        element._madePositioned = undefined;
 216        element.style.position =
 217          element.style.top =
 218          element.style.left =
 219          element.style.bottom =
 220          element.style.right = '';   
 221      }
 222    },
 223  
 224    makeClipping: function(element) {
 225      element = $(element);
 226      if (element._overflow) return;
 227      element._overflow = element.style.overflow;
 228      if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
 229        element.style.overflow = 'hidden';
 230    },
 231  
 232    undoClipping: function(element) {
 233      element = $(element);
 234      if (element._overflow) return;
 235      element.style.overflow = element._overflow;
 236      element._overflow = undefined;
 237    }
 238  }
 239  
 240  Object.extend(Element, Element.Methods);
 241  
 242  var _nativeExtensions = false;
 243  
 244  if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
 245    var HTMLElement = {}
 246    HTMLElement.prototype = document.createElement('div').__proto__;
 247  }
 248  
 249  Element.addMethods = function(methods) {
 250    Object.extend(Element.Methods, methods || {});
 251    
 252    if(typeof HTMLElement != 'undefined') {
 253      var methods = Element.Methods, cache = Element.extend.cache;
 254      for (property in methods) {
 255        var value = methods[property];
 256        if (typeof value == 'function')
 257          HTMLElement.prototype[property] = cache.findOrStore(value);
 258      }
 259      _nativeExtensions = true;
 260    }
 261  }
 262  
 263  Element.addMethods();
 264  
 265  var Toggle = new Object();
 266  Toggle.display = Element.toggle;
 267  
 268  /*--------------------------------------------------------------------------*/
 269  
 270  Abstract.Insertion = function(adjacency) {
 271    this.adjacency = adjacency;
 272  }
 273  
 274  Abstract.Insertion.prototype = {
 275    initialize: function(element, content) {
 276      this.element = $(element);
 277      this.content = content.stripScripts();
 278      
 279      if (this.adjacency && this.element.insertAdjacentHTML) {
 280        try {
 281          this.element.insertAdjacentHTML(this.adjacency, this.content);
 282        } catch (e) {
 283          var tagName = this.element.tagName.toLowerCase();
 284          if (tagName == 'tbody' || tagName == 'tr') {
 285            this.insertContent(this.contentFromAnonymousTable());
 286          } else {
 287            throw e;
 288          }
 289        }
 290      } else {
 291        this.range = this.element.ownerDocument.createRange();
 292        if (this.initializeRange) this.initializeRange();
 293        this.insertContent([this.range.createContextualFragment(this.content)]);
 294      }
 295  
 296      setTimeout(function() {content.evalScripts()}, 10);   
 297    },
 298    
 299    contentFromAnonymousTable: function() {
 300      var div = document.createElement('div');
 301      div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
 302      return $A(div.childNodes[0].childNodes[0].childNodes);
 303    }
 304  }
 305  
 306  var Insertion = new Object();
 307  
 308  Insertion.Before = Class.create();
 309  Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
 310    initializeRange: function() {
 311      this.range.setStartBefore(this.element);
 312    },
 313    
 314    insertContent: function(fragments) {
 315      fragments.each((function(fragment) {
 316        this.element.parentNode.insertBefore(fragment, this.element);
 317      }).bind(this));
 318    }
 319  });
 320  
 321  Insertion.Top = Class.create();
 322  Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
 323    initializeRange: function() {
 324      this.range.selectNodeContents(this.element);
 325      this.range.collapse(true);
 326    },
 327    
 328    insertContent: function(fragments) {
 329      fragments.reverse(false).each((function(fragment) {
 330        this.element.insertBefore(fragment, this.element.firstChild);
 331      }).bind(this));
 332    }
 333  });
 334  
 335  Insertion.Bottom = Class.create();
 336  Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
 337    initializeRange: function() {
 338      this.range.selectNodeContents(this.element);
 339      this.range.collapse(this.element);
 340    },
 341    
 342    insertContent: function(fragments) {
 343      fragments.each((function(fragment) {
 344        this.element.appendChild(fragment);
 345      }).bind(this));
 346    }
 347  });
 348  
 349  Insertion.After = Class.create();
 350  Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
 351    initializeRange: function() {
 352      this.range.setStartAfter(this.element);
 353    },
 354    
 355    insertContent: function(fragments) {
 356      fragments.each((function(fragment) {
 357        this.element.parentNode.insertBefore(fragment, 
 358          this.element.nextSibling);
 359      }).bind(this));
 360    }
 361  });
 362  
 363  /*--------------------------------------------------------------------------*/
 364  
 365  Element.ClassNames = Class.create();
 366  Element.ClassNames.prototype = {
 367    initialize: function(element) {
 368      this.element = $(element);
 369    },
 370  
 371    _each: function(iterator) {
 372      this.element.className.split(/\s+/).select(function(name) {
 373        return name.length > 0;
 374      })._each(iterator);
 375    },
 376    
 377    set: function(className) {
 378      this.element.className = className;
 379    },
 380    
 381    add: function(classNameToAdd) {
 382      if (this.include(classNameToAdd)) return;
 383      this.set(this.toArray().concat(classNameToAdd).join(' '));
 384    },
 385    
 386    remove: function(classNameToRemove) {
 387      if (!this.include(classNameToRemove)) return;
 388      this.set(this.select(function(className) {
 389        return className != classNameToRemove;
 390      }).join(' '));
 391    },
 392    
 393    toString: function() {
 394      return this.toArray().join(' ');
 395    }
 396  }
 397  
 398  Object.extend(Element.ClassNames.prototype, Enumerable);


Généré le : Sun Feb 25 21:07:04 2007 par Balluche grâce à PHPXref 0.7