diff -r 000000000000 -r 40c8f766c9b8 src/cm/media/js/lib/yui/yui_3.0.0b1/api/delegate.js.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.0.0b1/api/delegate.js.html Mon Nov 23 15:14:29 2009 +0100 @@ -0,0 +1,273 @@ + + +
+ +(function() {
+
+var Lang = Y.Lang,
+ delegates = {},
+ resolveTextNode = function(n) {
+ try {
+ if (n && 3 == n.nodeType) {
+ return n.parentNode;
+ }
+ } catch(e) { }
+ return n;
+ },
+ _worker = function(delegateKey, e, el) {
+ var target = resolveTextNode((e.target || e.srcElement)),
+ tests = delegates[delegateKey],
+ spec,
+ ename,
+ elements,
+ nElements,
+ matched,
+ ev,
+ i;
+
+ for (spec in tests) {
+ if (tests.hasOwnProperty(spec)) {
+ ename = tests[spec];
+ elements = Y.Selector.query(spec, el);
+ nElements = elements.length;
+ if (nElements > 0) {
+ i = elements.length - 1;
+ do {
+ matched = elements[i];
+ if (matched === target || Y.DOM.contains(matched, target)) {
+
+ if (!ev) {
+ ev = new Y.DOMEventFacade(e, el);
+ ev.container = ev.currentTarget;
+ }
+
+ ev.currentTarget = Y.Node.get(matched);
+ Y.fire(ename, ev);
+ }
+ }
+ while (i--);
+ }
+ }
+ }
+ },
+
+ attach = function (type, key, element) {
+ Y.Event._attach([type, function (e) {
+ _worker(key, (e || window.event), element);
+ }, element], { facade: false });
+ },
+
+ _sanitize = Y.cached(function(str) {
+ return str.replace(/[|,:]/g, '~');
+ });
+
+/**
+ * Sets up a delegated listener container.
+ * @event delegate
+ * @param type {string} 'delegate'
+ * @param fn {string} the function to execute
+ * @param el {string|node} the element that is the delegation container
+ * @param delegateType {string} the event type to delegate
+ * @param spec {string} a selector that must match the target of the
+ * event.
+ * @return {EventHandle} the detach handle
+ * @for YUI
+ */
+Y.Env.evt.plugins.delegate = {
+
+ on: function(type, fn, el, delegateType, spec) {
+
+ if (!spec) {
+ Y.log('delegate: no spec, nothing to do', 'warn', 'event');
+ return false;
+ }
+
+ // identifier to target the container
+ var guid = (Lang.isString(el) ? el : Y.stamp(el)),
+
+ // the custom event for the delegation spec
+ ename = 'delegate:' + guid + delegateType + _sanitize(spec),
+
+ // the key to the listener for the event type and container
+ delegateKey = delegateType + guid,
+
+ a = Y.Array(arguments, 0, true),
+
+ element;
+
+
+ if (!(delegateKey in delegates)) {
+
+ if (Lang.isString(el)) { // Selector
+ element = Y.Selector.query(el);
+ }
+ else { // Node instance
+ element = Y.Node.getDOMNode(el);
+ }
+
+ if (Lang.isArray(element)) {
+
+ Y.Array.each(element, function (v) {
+ attach(delegateType, delegateKey, v);
+ });
+
+ }
+ else {
+ attach(delegateType, delegateKey, element);
+ }
+
+ delegates[delegateKey] = {};
+ }
+
+ delegates[delegateKey][spec] = ename;
+
+ a[0] = ename;
+
+ // remove element, delegation spec and context object from the args
+ a.splice(2, 3);
+
+ // subscribe to the custom event for the delegation spec
+ return Y.on.apply(Y, a);
+ }
+};
+
+})();
+