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