76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('event-hover', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass/**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Adds support for a "hover" event. The event provides a convenience wrapper
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * for subscribing separately to mouseenter and mouseleave. The signature for
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * subscribing to the event is</p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <pre><code>node.on("hover", overFn, outFn);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * node.delegate("hover", overFn, outFn, ".filterSelector");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Y.on("hover", overFn, outFn, ".targetSelector");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Y.delegate("hover", overFn, outFn, "#container", ".filterSelector");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </code></pre>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <p>Additionally, for compatibility with a more typical subscription
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * signature, the following are also supported:</p>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <pre><code>Y.on("hover", overFn, ".targetSelector", outFn);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Y.delegate("hover", overFn, "#container", outFn, ".filterSelector");
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </code></pre>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass *
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule event-hover
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassvar isFunction = Y.Lang.isFunction,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass noop = function () {},
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass conf = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass processArgs: function (args) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // Y.delegate('hover', over, out, '#container', '.filter')
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // comes in as ['hover', over, out, '#container', '.filter'], but
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // node.delegate('hover', over, out, '.filter')
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // comes in as ['hover', over, containerEl, out, '.filter']
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var i = isFunction(args[2]) ? 2 : 3;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return (isFunction(args[i])) ? args.splice(i,1)[0] : noop;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass on: function (node, sub, notifier, filter) {
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith var args = (sub.args) ? sub.args.slice() : [];
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith args.unshift(null);
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass sub._detach = node[(filter) ? "delegate" : "on"]({
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass mouseenter: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.phase = 'over';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass notifier.fire(e);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass mouseleave: function (e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var thisObj = sub.context || this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith args[0] = e;
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.type = 'hover';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.phase = 'out';
15ddc967c5d429ed2983719db23b453794ab0338Luke Smith sub._extra.apply(thisObj, args);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, filter);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass detach: function (node, sub, notifier) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass sub._detach.detach();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassconf.delegate = conf.on;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glassconf.detachDelegate = conf.detach;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassY.Event.define("hover", conf);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass}, '@VERSION@' ,{requires:['event-mouseenter']});