Mercurial > kallithea
diff rhodecode/public/js/yui/element-delegate/element-delegate-debug.js @ 547:1e757ac98988
renamed project to rhodecode
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Wed, 06 Oct 2010 03:18:16 +0200 |
parents | pylons_app/public/js/yui/element-delegate/element-delegate-debug.js@564e40829f80 |
children | 289ff43cc190 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rhodecode/public/js/yui/element-delegate/element-delegate-debug.js Wed Oct 06 03:18:16 2010 +0200 @@ -0,0 +1,141 @@ +/* +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"});