##// END OF EJS Templates
Tests rewrite for 1.2 added some globals configs to make tests easier....
Tests rewrite for 1.2 added some globals configs to make tests easier. Fixed search index_location to take from configuration files now fixed git http_user_agent bug

File last commit:

r547:1e757ac9 default
r688:8acbfa83 beta
Show More
element-delegate.js
138 lines | 3.8 KiB | application/javascript | JavascriptLexer
/*
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) {
return false;
}
if (!Event._createDelegate) {
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) {
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"});