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