[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yuilib/2in3/2.9.0/build/yui2-element-delegate/ -> yui2-element-delegate.js (source)

   1  YUI.add('yui2-element-delegate', function(Y) {
   2      var YAHOO    = Y.YUI2;
   3      /*
   4  Copyright (c) 2011, Yahoo! Inc. All rights reserved.
   5  Code licensed under the BSD License:
   6  http://developer.yahoo.com/yui/license.html
   7  version: 2.9.0
   8  */
   9  /**
  10   * Augments the Element Utility with a <code>delegate</code> method that 
  11   * facilitates easy creation of delegated event listeners.  (Note: Using CSS 
  12   * selectors as the filtering criteria for delegated event listeners requires 
  13   * inclusion of the Selector Utility.)
  14   *
  15   * @module element-delegate
  16   * @title Element Event Delegation Module
  17   * @namespace YAHOO.util
  18   * @requires element, event-delegate
  19   */
  20  
  21  (function () {
  22  
  23      var Event = YAHOO.util.Event,
  24          delegates = [],
  25          specialTypes = {
  26              mouseenter: true,
  27              mouseleave: true
  28          };
  29  
  30      YAHOO.lang.augmentObject(YAHOO.util.Element.prototype, {
  31  
  32          /**
  33           * Appends a delegated event listener.  Delegated event listeners 
  34           * receive two arguments by default: the DOM event and the element  
  35           * specified by the filtering function or CSS selector.
  36           * (Note: Using the delegate method requires the element-delegate 
  37           * module.  Using CSS selectors as the filtering criteria for delegated 
  38           * event listeners requires inclusion of the Selector Utility.)
  39           * @method delegate
  40           * @param {String} type The name of the event to listen for
  41           * @param {Function} fn The handler to call when the event fires
  42           * @param {Function|string} filter Function or CSS selector used to 
  43           * determine for what element(s) the event listener should be called. 
  44           * When a function is specified, the function should return an 
  45           * HTML element.  Using a CSS Selector requires the inclusion of the 
  46           * CSS Selector Utility.
  47           * @param {Any} obj A variable to pass to the handler
  48           * @param {Object} scope The object to use for the scope of the handler 
  49           * @return {boolean} Returns true if the delegated event listener 
  50           * was added successfully
  51           * @for Element
  52           */
  53          delegate: function (type, fn, filter, obj, overrideContext) {
  54  
  55              if (YAHOO.lang.isString(filter) && !YAHOO.util.Selector) {
  56                  return false;
  57              }
  58              
  59              if (!Event._createDelegate) {
  60                  return false;
  61              }            
  62  
  63              var sType = Event._getType(type),
  64                  el = this.get("element"),
  65                  fnDelegate,
  66                  fnMouseDelegate,
  67  
  68                  fnWrapper = function (e) {
  69  
  70                      return fnDelegate.call(el, e);
  71  
  72                  };
  73  
  74              if (specialTypes[type]) {
  75  
  76                  if (!Event._createMouseDelegate) {
  77                      return false;                
  78                  }
  79  
  80                  fnMouseDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
  81  
  82                  fnDelegate = Event._createDelegate(function (event, matchedEl, container) {
  83  
  84                      return fnMouseDelegate.call(matchedEl, event, container);
  85  
  86                  }, filter, obj, overrideContext);
  87  
  88              }
  89              else {
  90                  fnDelegate = Event._createDelegate(fn, filter, obj, overrideContext);
  91              }
  92  
  93  
  94              delegates.push([el, sType, fn, fnWrapper]);
  95  
  96              return this.on(sType, fnWrapper);
  97  
  98          },
  99  
 100  
 101          /**
 102           * Remove a delegated event listener
 103           * @method removeDelegate
 104           * @param {String} type The name of the event to listen for
 105           * @param {Function} fn The function call when the event fires
 106           * @return {boolean} Returns true if the unbind was successful, false 
 107           *  otherwise.
 108           * @for Element
 109           */
 110          removeDelegate: function (type, fn) {
 111  
 112              var sType = Event._getType(type),
 113                  index = Event._getCacheIndex(delegates, this.get("element"), sType, fn),
 114                  returnVal,
 115                  cacheItem;
 116  
 117              if (index >= 0) {
 118                  cacheItem = delegates[index];
 119              }
 120  
 121              if (cacheItem) {
 122  
 123                  returnVal = this.removeListener(cacheItem[1], cacheItem[3]);
 124  
 125                  if (returnVal) {
 126                      delete delegates[index][2];
 127                      delete delegates[index][3];
 128                      delegates.splice(index, 1);
 129                  }
 130  
 131              }
 132  
 133              return returnVal;
 134  
 135          }
 136          
 137      });
 138  
 139  }());
 140  YAHOO.register("element-delegate", YAHOO.util.Element, {version: "2.9.0", build: "2800"});
 141  
 142  }, '2.9.0' ,{"requires": ["yui2-yahoo", "yui2-dom", "yui2-event", "yui2-element"]});


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1