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

Ticket #11371: update_remove_replace.patch

File update_remove_replace.patch, 1.8 kB (added by jdalton, 5 months ago)

Automatically remove observers from Element#update. Gives option to remove observers for Element#replace, Element#remove

  • a/src/dom.js

    old new  
    976976  }; 
    977977} 
    978978 
     979if (Prototype.Browser.IE) { 
     980  $w('remove update replace').each(function(method){ 
     981 
     982    var getNodes = (method == 'update')? function(element){ 
     983      return $(element).childElements(); 
     984    } : function(element){ 
     985      return [element=$(element)].concat(element.childElements()); 
     986    }; 
     987    var stopObservers = function(element){ 
     988      var nodes = getNodes(element), i = nodes.length; 
     989      while(i) Event.stopObserving(nodes[--i]); 
     990      return element; 
     991    } 
     992    var wrapper 
     993    switch(method){ 
     994      case 'remove': wrapper = function(proceed, element, stopObserving){ 
     995        proceed(stopObserving? stopObservers(element) : element) 
     996      }; break; 
     997 
     998      case 'replace': wrapper = function(proceed, element, content, stopObserving){ 
     999        proceed(stopObserving? stopObservers(element) : element, content) 
     1000      }; break; 
     1001 
     1002      case 'update': wrapper = function(proceed, element, content){ 
     1003        proceed(stopObservers(element), content) 
     1004      }; 
     1005    } 
     1006    Element.Methods[method]= Element.Methods[method].wrap(wrapper); 
     1007  }); 
     1008} 
     1009 
    9791010Element._returnOffset = function(l, t) { 
    9801011  var result = [l, t]; 
    9811012  result.left = l;