Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 5449

Show
Ignore:
Timestamp:
11/07/06 17:56:05 (2 years ago)
Author:
sam
Message:

prototype: Pick some low-hanging performance and DRYness fruit.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/CHANGELOG

    r5448 r5449  
    11*SVN* 
     2 
     3* Pick some low-hanging performance and DRYness fruit.  [sam] 
     4  - Inline length property accesses in for loops 
     5  - Enumerable-ize for loops where it makes sense 
     6  - Make better use of Element.Methods and Form.Methods/Form.Element.Methods 
    27 
    38* A slew of Ajax improvements.  Closes #6366.  [mislav, sam] 
  • spinoffs/prototype/src/array.js

    r5294 r5449  
    55  } else { 
    66    var results = []; 
    7     for (var i = 0; i < iterable.length; i++) 
     7    for (var i = 0, length = iterable.length; i < length; i++) 
    88      results.push(iterable[i]); 
    99    return results; 
     
    1818Object.extend(Array.prototype, { 
    1919  _each: function(iterator) { 
    20     for (var i = 0; i < this.length; i++) 
     20    for (var i = 0, length = this.length; i < length; i++) 
    2121      iterator(this[i]); 
    2222  }, 
     
    5656   
    5757  indexOf: function(object) { 
    58     for (var i = 0; i < this.length; i++) 
     58    for (var i = 0, length = this.length; i < length; i++) 
    5959      if (this[i] == object) return i; 
    6060    return -1; 
     
    8383  } 
    8484}); 
     85 
     86Array.prototype.toArray = Array.prototype.clone; 
     87 
  • spinoffs/prototype/src/dom.js

    r5447 r5449  
    11function $(element) { 
    22  if (arguments.length > 1) { 
    3     for (var i = 0, elements = []; i < arguments.length; i++) 
     3    for (var i = 0, elements = [], length = arguments.length; i < length; i++) 
    44      elements.push($(arguments[i])); 
    55    return elements; 
     
    2828    var children = ($(parentElement) || document.body).getElementsByTagName('*'); 
    2929    var elements = [], child; 
    30     for (var i = 0, len = children.length; i < len; i++) { 
     30    for (var i = 0, length = children.length; i < length; i++) { 
    3131      child = children[i]; 
    3232      if (child.className.length == 0) continue; 
     
    547547  add: function(classNameToAdd) { 
    548548    if (this.include(classNameToAdd)) return; 
    549     this.set(this.toArray().concat(classNameToAdd).join(' ')); 
     549    this.set($A(this).concat(classNameToAdd).join(' ')); 
    550550  }, 
    551551   
    552552  remove: function(classNameToRemove) { 
    553553    if (!this.include(classNameToRemove)) return; 
    554     this.set(this.select(function(className) { 
    555       return className != classNameToRemove; 
    556     }).join(' ')); 
     554    this.set($A(this).without(classNameToRemove).join(' ')); 
    557555  }, 
    558556   
    559557  toString: function() { 
    560     return this.toArray().join(' '); 
     558    return $A(this).join(' '); 
    561559  } 
    562560} 
  • spinoffs/prototype/src/enumerable.js

    r5193 r5449  
    5252  }, 
    5353   
    54   detect: function (iterator) { 
     54  detect: function(iterator) { 
    5555    var result; 
    5656    this.each(function(value, index) { 
  • spinoffs/prototype/src/event.js

    r4941 r5449  
    7272  unloadCache: function() { 
    7373    if (!Event.observers) return; 
    74     for (var i = 0; i < Event.observers.length; i++) { 
     74    for (var i = 0, length = Event.observers.length; i < length; i++) { 
    7575      Event.stopObserving.apply(this, Event.observers[i]); 
    7676      Event.observers[i][0] = null; 
  • spinoffs/prototype/src/form.js

    r5354 r5449  
    33    $(form).reset(); 
    44    return form; 
     5  }, 
     6   
     7  serializeElements: function(elements) { 
     8    return elements.inject([], function(queryComponents, element) { 
     9      var queryComponent = Form.Element.serialize(element); 
     10      if (queryComponent) queryComponents.push(queryComponent); 
     11      return queryComponents; 
     12    }).join('&'); 
    513  } 
    614}; 
     
    816Form.Methods = { 
    917  serialize: function(form) { 
    10     return this.serializeElements(Form.getElements($(form))); 
    11   }, 
    12    
    13   serializeElements: function(elements) { 
    14     var queryComponents = new Array(); 
    15  
    16     for (var i = 0; i < elements.length; i++) { 
    17       var queryComponent = Form.Element.serialize(elements[i]); 
    18       if (queryComponent) 
    19         queryComponents.push(queryComponent); 
    20     } 
    21  
    22     return queryComponents.join('&');     
    23   }, 
    24  
     18    return Form.serializeElements($(form).getElements()); 
     19  }, 
     20   
    2521  getElements: function(form) { 
    26     return $A($(form).getElementsByTagName('*')).inject([], function(elements, child) { 
    27       if (Form.Element.Serializers[child.tagName.toLowerCase()]) 
    28         elements.push(Element.extend(child)); 
    29       return elements; 
    30     }); 
     22    return $A($(form).getElementsByTagName('*')).inject([],  
     23      function(elements, child) { 
     24        if (Form.Element.Serializers[child.tagName.toLowerCase()]) 
     25          elements.push(Element.extend(child)); 
     26        return elements; 
     27      } 
     28    ); 
    3129  }, 
    3230   
     
    3937       
    4038    var matchingInputs = new Array(); 
    41     for (var i = 0; i < inputs.length; i++) { 
     39    for (var i = 0, length = inputs.length; i < length; i++) { 
    4240      var input = inputs[i]; 
    4341      if ((typeName && input.type != typeName) || 
    4442          (name && input.name != name))  
    4543        continue; 
    46       matchingInputs.push(input); 
     44      matchingInputs.push(Element.extend(input)); 
    4745    } 
    4846 
     
    5250  disable: function(form) { 
    5351    form = $(form); 
    54     var elements = Form.getElements(form); 
    55     for (var i = 0; i < elements.length; i++) { 
    56       var element = elements[i]; 
     52    form.getElements().each(function(element) { 
    5753      element.blur(); 
    5854      element.disabled = 'true'; 
    59     } 
     55    }); 
    6056    return form; 
    6157  }, 
     
    6359  enable: function(form) { 
    6460    form = $(form); 
    65     var elements = Form.getElements(form); 
    66     for (var i = 0; i < elements.length; i++) { 
    67       var element = elements[i]; 
     61    form.getElements().each(function(element) { 
    6862      element.disabled = ''; 
    69     } 
     63    }); 
    7064    return form; 
    7165  }, 
    7266 
    7367  findFirstElement: function(form) { 
    74     return Form.getElements(form).find(function(element) { 
     68    return $(form).getElements().find(function(element) { 
    7569      return element.type != 'hidden' && !element.disabled && 
    7670        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); 
     
    8074  focusFirstElement: function(form) { 
    8175    form = $(form); 
    82     Field.activate(Form.findFirstElement(form)); 
     76    form.findFirstElement().activate(); 
    8377    return form; 
    8478  } 
     
    280274   
    281275  registerFormCallbacks: function() { 
    282     var elements = Form.getElements(this.element); 
    283     for (var i = 0; i < elements.length; i++) 
    284       this.registerCallback(elements[i]); 
     276    Form.getElements(this.element).each(this.registerCallback.bind(this)); 
    285277  }, 
    286278   
  • spinoffs/prototype/src/selector.js

    r5177 r5449  
    8989 
    9090    var results = []; 
    91     for (var i = 0; i < scope.length; i++) 
     91    for (var i = 0, length = scope.length; i < length; i++) 
    9292      if (this.match(element = scope[i])) 
    9393        results.push(Element.extend(element)); 
  • spinoffs/prototype/src/string.js

    r5448 r5449  
    9999      : oStringList[0]; 
    100100       
    101     for (var i = 1, len = oStringList.length; i < len; i++) { 
     101    for (var i = 1, length = oStringList.length; i < length; i++) { 
    102102      var s = oStringList[i]; 
    103103      camelizedString += s.charAt(0).toUpperCase() + s.substring(1);