Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source
Show
Ignore:
Timestamp:
08/04/07 07:13:34 (1 year ago)
Author:
sam
Message:

prototype: Make the eventName and handler arguments to Event.stopObserving optional. If no handler is specified, all handlers for the given event are unregistered. If no event name is specified, all observed events on the element are unregistered.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • spinoffs/prototype/branches/1-6-0-events/CHANGELOG

    r7268 r7269  
    11*SVN* 
     2 
     3* Make the eventName and handler arguments to Event.stopObserving optional.  If no handler is specified, all handlers for the given event are unregistered.  If no event name is specified, all observed events on the element are unregistered.  [sam] 
    24 
    35* Add cross-support for the DOMContentLoaded event through a Prototype custom event on document called "contentloaded".  The DOMContentLoaded event fires before window.load, when the entire HTML document, but not necessarily its images, stylesheets or other assets, has loaded.  Based on [6596].  [sam, Mislav Marohnić]  
  • spinoffs/prototype/branches/1-6-0-events/src/event.js

    r7266 r7269  
    125125   
    126126  function getWrappersForEventName(id, eventName) { 
    127     var c = getCacheForID(id), name = getDOMEventName(eventName)
    128     return c[name] = c[name] || []; 
     127    var c = getCacheForID(id)
     128    return c[eventName] = c[eventName] || []; 
    129129  } 
    130130   
     
    185185      element = $(element); 
    186186      var id = getEventID(element), name = getDOMEventName(eventName); 
     187       
     188      if (!handler && eventName) { 
     189        return getWrappersForEventName(id, eventName).each(function(wrapper) { 
     190          element.stopObserving(eventName, wrapper.handler); 
     191        }) && false; 
     192         
     193      } else if (!eventName) { 
     194        return Object.keys(getCacheForID(id)).each(function(eventName) { 
     195          element.stopObserving(eventName); 
     196        }) && false; 
     197      } 
    187198       
    188199      var wrapper = findWrapper(id, eventName, handler); 
  • spinoffs/prototype/branches/1-6-0-events/test/unit/event.html

    r7266 r7269  
    129129    }}, 
    130130     
     131    testMultipleCustomEventObserversWithTheSameHandler: function() { with(this) { 
     132      var span = $("span"), count = 0, observer = function() { count++ }; 
     133       
     134      span.observe("somethingHappened", observer); 
     135      span.observe("somethingElseHappened", observer); 
     136      span.fire("somethingHappened"); 
     137      assertEqual(1, count); 
     138      span.fire("somethingElseHappened"); 
     139      assertEqual(2, count); 
     140    }}, 
     141     
     142    testStopObservingWithoutArguments: function() { with(this) { 
     143      var span = $("span"), count = 0, observer = function() { count++ }; 
     144       
     145      span.observe("somethingHappened", observer); 
     146      span.observe("somethingElseHappened", observer); 
     147      span.stopObserving(); 
     148      span.fire("somethingHappened"); 
     149      assertEqual(0, count); 
     150      span.fire("somethingElseHappened"); 
     151      assertEqual(0, count); 
     152    }}, 
     153     
     154    testStopObservingWithoutHandlerArgument: function() { with(this) { 
     155      var span = $("span"), count = 0, observer = function() { count++ }; 
     156       
     157      span.observe("somethingHappened", observer); 
     158      span.observe("somethingElseHappened", observer); 
     159      span.stopObserving("somethingHappened"); 
     160      span.fire("somethingHappened"); 
     161      assertEqual(0, count); 
     162      span.fire("somethingElseHappened"); 
     163      assertEqual(1, count); 
     164      span.stopObserving("somethingElseHappened"); 
     165      span.fire("somethingElseHappened"); 
     166      assertEqual(1, count); 
     167    }}, 
     168     
    131169    testDocumentContentLoadedEventFiresBeforeWindowLoad: function() { with(this) { 
    132170      assert(eventResults.contentLoaded, "contentLoaded");