src/cm/media/js/lib/yui/yui3-3.15.0/build/event-focus/event-focus-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('event-focus', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * Adds bubbling and delegation support to DOM events focus and blur.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @module event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @submodule event-focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
var Event    = Y.Event,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
    YLang    = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    isString = YLang.isString,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
    arrayIndex = Y.Array.indexOf,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    useActivate = (function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        // Changing the structure of this test, so that it doesn't use inline JS in HTML,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
        // which throws an exception in Win8 packaged apps, due to additional security restrictions:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
        // http://msdn.microsoft.com/en-us/library/windows/apps/hh465380.aspx#differences
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
        var supported = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
            doc = Y.config.doc,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
            p;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
        if (doc) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
            p = doc.createElement("p");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
            p.setAttribute("onbeforeactivate", ";");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
            // onbeforeactivate is a function in IE8+.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
            // onbeforeactivate is a string in IE6,7 (unfortunate, otherwise we could have just checked for function below).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
            // onbeforeactivate is a function in IE10, in a Win8 App environment (no exception running the test).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
            // onbeforeactivate is undefined in Webkit/Gecko.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
            // onbeforeactivate is a function in Webkit/Gecko if it's a supported event (e.g. onclick).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
            supported = (p.onbeforeactivate !== undefined);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        return supported;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    }());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
function define(type, proxy, directEvent) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    var nodeDataKey = '_' + type + 'Notifiers';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    Y.Event.define(type, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        _useActivate : useActivate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        _attach: function (el, notifier, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
            if (Y.DOM.isWindow(el)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
                return Event._attach([type, function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
                    notifier.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
                }, el]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
                return Event._attach(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
                    [proxy, this._proxy, el, this, notifier, delegate],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
                    { capture: true });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
        _proxy: function (e, notifier, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
            var target        = e.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
                currentTarget = e.currentTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                notifiers     = target.getData(nodeDataKey),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                yuid          = Y.stamp(currentTarget._node),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                defer         = (useActivate || target !== currentTarget),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                directSub;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
            notifier.currentTarget = (delegate) ? target : currentTarget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
            notifier.container     = (delegate) ? currentTarget : null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
            // Maintain a list to handle subscriptions from nested
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
            // containers div#a>div#b>input #a.on(focus..) #b.on(focus..),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            // use one focus or blur subscription that fires notifiers from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
            // #b then #a to emulate bubble sequence.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
            if (!notifiers) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
                notifiers = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
                target.setData(nodeDataKey, notifiers);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
                // only subscribe to the element's focus if the target is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                // not the current target (
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                if (defer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                    directSub = Event._attach(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                        [directEvent, this._notify, target._node]).sub;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                    directSub.once = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                // In old IE, defer is always true.  In capture-phase browsers,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
                // The delegate subscriptions will be encountered first, which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                // will establish the notifiers data and direct subscription
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
                // on the node.  If there is also a direct subscription to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                // node's focus/blur, it should not call _notify because the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                // direct subscription from the delegate sub(s) exists, which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
                // will call _notify.  So this avoids _notify being called
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
                // twice, unnecessarily.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                defer = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
            if (!notifiers[yuid]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                notifiers[yuid] = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
            notifiers[yuid].push(notifier);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            if (!defer) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                this._notify(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        _notify: function (e, container) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
            var currentTarget = e.currentTarget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
                notifierData  = currentTarget.getData(nodeDataKey),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
                axisNodes     = currentTarget.ancestors(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
                doc           = currentTarget.get('ownerDocument'),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
                delegates     = [],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
                                // Used to escape loops when there are no more
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                                // notifiers to consider
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                count         = notifierData ?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
                                    Y.Object.keys(notifierData).length :
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
                                    0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                target, notifiers, notifier, yuid, match, tmp, i, len, sub, ret;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
            // clear the notifications list (mainly for delegation)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
            currentTarget.clearData(nodeDataKey);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
            // Order the delegate subs by their placement in the parent axis
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
            axisNodes.push(currentTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
            // document.get('ownerDocument') returns null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
            // which we'll use to prevent having duplicate Nodes in the list
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
            if (doc) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
                axisNodes.unshift(doc);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
            // ancestors() returns the Nodes from top to bottom
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            axisNodes._nodes.reverse();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
            if (count) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
                // Store the count for step 2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
                tmp = count;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
                axisNodes.some(function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
                    var yuid      = Y.stamp(node),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
                        notifiers = notifierData[yuid],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
                        i, len;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
                    if (notifiers) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
                        count--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
                        for (i = 0, len = notifiers.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
                            if (notifiers[i].handle.sub.filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                                delegates.push(notifiers[i]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
                    return !count;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                count = tmp;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
            // Walk up the parent axis, notifying direct subscriptions and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
            // testing delegate filters.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
            while (count && (target = axisNodes.shift())) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
                yuid = Y.stamp(target);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
                notifiers = notifierData[yuid];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
                if (notifiers) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
                    for (i = 0, len = notifiers.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
                        notifier = notifiers[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
                        sub      = notifier.handle.sub;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                        match    = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                        e.currentTarget = target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
                        if (sub.filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
                            match = sub.filter.apply(target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
                                [target, e].concat(sub.args || []));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
                            // No longer necessary to test against this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
                            // delegate subscription for the nodes along
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
                            // the parent axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
                            delegates.splice(
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
                                arrayIndex(delegates, notifier), 1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
                        if (match) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
                            // undefined for direct subs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
                            e.container = notifier.container;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
                            ret = notifier.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
                        if (ret === false || e.stopped === 2) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
                            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
                    delete notifiers[yuid];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
                    count--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
                if (e.stopped !== 2) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
                    // delegates come after subs targeting this specific node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
                    // because they would not normally report until they'd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
                    // bubbled to the container node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
                    for (i = 0, len = delegates.length; i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
                        notifier = delegates[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
                        sub = notifier.handle.sub;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
                        if (sub.filter.apply(target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
                            [target, e].concat(sub.args || []))) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
                            e.container = notifier.container;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
                            e.currentTarget = target;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
                            ret = notifier.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
                        if (ret === false || e.stopped === 2 ||
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
                            // If e.stopPropagation() is called, notify any
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
                            // delegate subs from the same container, but break
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
                            // once the container changes. This emulates
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
                            // delegate() behavior for events like 'click' which
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
                            // won't notify delegates higher up the parent axis.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
                            (e.stopped && delegates[i+1] &&
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
                             delegates[i+1].container !== notifier.container)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
                            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
                if (e.stopped) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
                    break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
        on: function (node, sub, notifier) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
            sub.handle = this._attach(node._node, notifier);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        detach: function (node, sub) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
            sub.handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
        delegate: function (node, sub, notifier, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
            if (isString(filter)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
                sub.filter = function (target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
                    return Y.Selector.test(target._node, filter,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
                        node === target ? null : node._node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
            sub.handle = this._attach(node._node, notifier, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
        detachDelegate: function (node, sub) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            sub.handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
    }, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
// For IE, we need to defer to focusin rather than focus because
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
// `el.focus(); doSomething();` executes el.onbeforeactivate, el.onactivate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
// el.onfocusin, doSomething, then el.onfocus.  All others support capture
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
// phase focus, which executes before doSomething.  To guarantee consistent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
// behavior for this use case, IE's direct subscriptions are made against
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
// focusin so subscribers will be notified before js following el.focus() is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
// executed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
if (useActivate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
    //     name     capture phase       direct subscription
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
    define("focus", "beforeactivate",   "focusin");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
    define("blur",  "beforedeactivate", "focusout");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
} else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
    define("focus", "focus", "focus");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
    define("blur",  "blur",  "blur");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
}, '@VERSION@', {"requires": ["event-synthetic"]});