src/cm/media/js/lib/yui/yui3-3.15.0/build/event-mouseenter/event-mouseenter.js
author ymh <ymh.work@gmail.com>
Fri, 14 Mar 2014 13:16:10 +0100
changeset 611 fa66f4bb1563
parent 602 e16a97fb364a
permissions -rw-r--r--
add some more custom config and put every thing in comment in the custom.yaml template
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('event-mouseenter', 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
 * <p>Adds subscription and delegation support for mouseenter and mouseleave
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * events.  Unlike mouseover and mouseout, these events aren't fired from child
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * elements of a subscribed node.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * <p>This avoids receiving three mouseover notifications from a setup like</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
 * <pre><code>div#container > p > a[href]</code></pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
 * <p>where</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
 * <pre><code>Y.one('#container').on('mouseover', callback)</code></pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
 * <p>When the mouse moves over the link, one mouseover event is fired from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
 * #container, then when the mouse moves over the p, another mouseover event is
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
 * fired and bubbles to #container, causing a second notification, and finally
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
 * when the mouse moves over the link, a third mouseover event is fired and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
 * bubbles to #container for a third notification.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
 * <p>By contrast, using mouseenter instead of mouseover, the callback would be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
 * executed only once when the mouse moves over #container.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
 * @module event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
 * @submodule event-mouseenter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
var domEventProxies = Y.Env.evt.dom_wrappers,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    contains = Y.DOM.contains,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    toArray = Y.Array,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
    noop = function () {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    config = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
        proxyType: "mouseover",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
        relProperty: "fromElement",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
        _notify: function (e, property, notifier) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
            var el = this._node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
                related = e.relatedTarget || e[property];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
            if (el !== related && !contains(el, related)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
                notifier.fire(new Y.DOMEventFacade(e, el,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
                    domEventProxies['event:' + Y.stamp(el) + e.type]));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
        on: function (node, sub, notifier) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
            var el = Y.Node.getDOMNode(node),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
                args = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
                    this.proxyType,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
                    this._notify,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
                    el,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
                    null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
                    this.relProperty,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
                    notifier];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
            sub.handle = Y.Event._attach(args, { facade: false });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
            // node.on(this.proxyType, notify, null, notifier);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
        detach: function (node, sub) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
            sub.handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
        delegate: function (node, sub, notifier, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
            var el = Y.Node.getDOMNode(node),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                args = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                    this.proxyType,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                    noop,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                    el,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                    null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                    notifier
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
            sub.handle = Y.Event._attach(args, { facade: false });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
            sub.handle.sub.filter = filter;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
            sub.handle.sub.relProperty = this.relProperty;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
            sub.handle.sub._notify = this._filterNotify;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        _filterNotify: function (thisObj, args, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
            args = args.slice();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
            if (this.args) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                args.push.apply(args, this.args);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            var currentTarget = Y.delegate._applyFilter(this.filter, args, ce),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                related = args[0].relatedTarget || args[0][this.relProperty],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                e, i, len, ret, ct;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
            if (currentTarget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                currentTarget = toArray(currentTarget);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                for (i = 0, len = currentTarget.length && (!e || !e.stopped); i < len; ++i) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                    ct = currentTarget[0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
                    if (!contains(ct, related)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
                        if (!e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                            e = new Y.DOMEventFacade(args[0], ct, ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
                            e.container = Y.one(ce.el);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
                        e.currentTarget = Y.one(ct);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
                        // TODO: where is notifier? args? this.notifier?
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
                        ret = args[1].fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
                        if (ret === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
                            break;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                        }
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
            return ret;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        detachDelegate: function (node, sub) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
            sub.handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
Y.Event.define("mouseenter", config, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
Y.Event.define("mouseleave", Y.merge(config, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    proxyType: "mouseout",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
    relProperty: "toElement"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
}), true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
}, '@VERSION@', {"requires": ["event-synthetic"]});