3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore/**
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * Adds mousewheel event support
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @module event
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @submodule event-mousewheel
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore */
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moorevar DOM_MOUSE_SCROLL = 'DOMMouseScroll',
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore fixArgs = function(args) {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore var a = Y.Array(args, 0, true), target;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore if (Y.UA.gecko) {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore a[0] = DOM_MOUSE_SCROLL;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore target = Y.config.win;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore } else {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore target = Y.config.doc;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore }
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore if (a.length < 3) {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore a[2] = target;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore } else {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore a.splice(2, 0, target);
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore }
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore return a;
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore };
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore/**
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * Mousewheel event. This listener is automatically attached to the
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * correct target, so one should not be supplied. Mouse wheel
66fb9cd912d23b294b8ed1016dfde1d09196d994Luke Smith * direction and velocity is stored in the 'wheelDelta' field.
44c58938384a04a0df1913145f8653db3b277354Adam Moore * @event mousewheel
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @param type {string} 'mousewheel'
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @param fn {function} the callback to execute
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @param context optional context object
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @param args 0..n additional arguments to provide to the listener.
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @return {EventHandle} the detach handle
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore * @for YUI
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore */
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam MooreY.Env.evt.plugins.mousewheel = {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore on: function() {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore return Y.Event._attach(fixArgs(arguments));
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore },
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore detach: function() {
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore return Y.Event.detach.apply(Y.Event, fixArgs(arguments));
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore }
3f3aa287185afb5d48d7ef0717054a154c372dc9Adam Moore};