123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- /*
- Copyright (c) 2009, Yahoo! Inc. All rights reserved.
- Code licensed under the BSD License:
- http://developer.yahoo.net/yui/license.txt
- version: 2.8.0r4
- */
- /**
- * Augments the Element Utility with a <code>delegate</code> method that
- * facilitates easy creation of delegated event listeners. (Note: Using CSS
- * selectors as the filtering criteria for delegated event listeners requires
- * inclusion of the Selector Utility.)
- *
- * @module element-delegate
- * @title Element Event Delegation Module
- * @namespace YAHOO.util
- * @requires element, event-delegate
- */
- (function () {
- var Event = YAHOO.util.Event,
- delegates = [],
- specialTypes = {
- mouseenter: true,
- mouseleave: true
- };
- YAHOO.lang.augmentObject(YAHOO.util.Element.prototype, {
- /**
- * Appends a delegated event listener. Delegated event listeners
- * receive two arguments by default: the DOM event and the element
- * specified by the filtering function or CSS selector.
- * (Note: Using the delegate method requires the element-delegate
- * module. Using CSS selectors as the filtering criteria for delegated
- * event listeners requires inclusion of the Selector Utility.)
- * @method delegate
- * @param {String} type The name of the event to listen for
- * @param {Function} fn The handler to call when the event fires
- * @param {Function|string} filter Function or CSS selector used to
- * determine for what element(s) the event listener should be called.
- * When a function is specified, the function should return an
- * HTML element. Using a CSS Selector requires the inclusion of the
- * CSS Selector Utility.
- * @param {Any} obj A variable to pass to the handler
- * @param {Object} scope The object to use for the scope of the handler
- * @return {boolean} Returns true if the delegated event listener
- * was added successfully
- * @for Element
- */
- delegate: function (type, fn, filter, obj, overrideContext) {
- if (YAHOO.lang.isString(filter) && !YAHOO.util.Selector) {
- YAHOO.log("Using a CSS selector to define the filtering criteria for a delegated listener requires the Selector Utility.", "error", "Element");
- return false;
- }
-
- if (!Event._createDelegate) {
- YAHOO.log("Using delegate functionality requires the event-delegate module.", "error", "Element");
- return false;
- }
- var sType = Event._getType(type),
- el = this.get("element"),
- fnDelegate,
- fnMouseDelegate,
- fnWrapper = function (e) {
- return fnDelegate.call(el, e);
- };
- if (specialTypes[type]) {
- if (!Event._createMouseDelegate) {
- YAHOO.log("Delegating a " + type + " event requires the event-mouseleave module.", "error", "Element");
- return false;
- }
- fnMouseDelegate = Event._createMouseDelegate(fn, obj, overrideContext);
- fnDelegate = Event._createDelegate(function (event, matchedEl, container) {
- return fnMouseDelegate.call(matchedEl, event, container);
- }, filter, obj, overrideContext);
- }
- else {
- fnDelegate = Event._createDelegate(fn, filter, obj, overrideContext);
- }
- delegates.push([el, sType, fn, fnWrapper]);
- return this.on(sType, fnWrapper);
- },
- /**
- * Remove a delegated event listener
- * @method removeDelegate
- * @param {String} type The name of the event to listen for
- * @param {Function} fn The function call when the event fires
- * @return {boolean} Returns true if the unbind was successful, false
- * otherwise.
- * @for Element
- */
- removeDelegate: function (type, fn) {
- var sType = Event._getType(type),
- index = Event._getCacheIndex(delegates, this.get("element"), sType, fn),
- returnVal,
- cacheItem;
- if (index >= 0) {
- cacheItem = delegates[index];
- }
- if (cacheItem) {
- returnVal = this.removeListener(cacheItem[1], cacheItem[3]);
- if (returnVal) {
- delete delegates[index][2];
- delete delegates[index][3];
- delegates.splice(index, 1);
- }
- }
- return returnVal;
- }
-
- });
- }());
- YAHOO.register("element-delegate", YAHOO.util.Element, {version: "2.8.0r4", build: "2449"});
|