event-gestures.js revision 35a16952b0308d5bf01f468c2e748bd2895a4bdf
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncYUI.add('event-flick', function(Y) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync/**
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * Adds support for a "flick" event, which is fired at the end of a touch or mouse based flick gesture, and provides
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * velocity of the flick, along with distance and time information.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync *
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * @module event-gestures
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @submodule event-flick
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync */
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync// TODO: Better way to sniff 'n' switch touch support?
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsyncvar EVENT = ("ontouchstart" in Y.config.win) ? {
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync start: "touchstart",
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync end: "touchend"
6ec4e1827eab6a424d672ef0e5a17b065e52db20vboxsync } : {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start: "mousedown",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync end: "mouseup"
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync START = "start",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync END = "end",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync OWNER_DOCUMENT = "ownerDocument",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_VELOCITY = "minVelocity",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_DISTANCE = "minDistance",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _FLICK_START = "_fs",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _FLICK_START_HANDLE = "_fsh",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _FLICK_END_HANDLE = "_feh",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync NODE_TYPE = "nodeType";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync/**
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * Sets up a "flick" event, that is fired whenever the user initiates a flick gesture on the node
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * where the listener is attached. The subscriber can specify a minimum distance or velocity for
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * which the event is to be fired.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync *
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @event flick
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @param type {string} "flick"
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @param fn {function} The method the event invokes.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @param cfg {Object} Optional. An object which specifies the minimum distance and/or velocity
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * of the flick gesture for which the event is to be fired.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync *
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync * @return {EventHandle} the detach handle
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync */
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncY.Event.define('flick', {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // The initialization implementation. Called for the first subscription per node.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync init: function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var startHandle = node.on(EVENT[START],
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this._onStart,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync subscriber,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_FLICK_START_HANDLE, startHandle);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // The destroy implementation. Called for the last detach per node.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync destroy: function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var startHandle = node.getData(_FLICK_START_HANDLE),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle = node.getData(_FLICK_END_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (startHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync startHandle.detach();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_FLICK_START_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (endHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle.detach();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_FLICK_END_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // How to process the additional spec args
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync processArgs: function(args) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var params = (args[3]) ? args.splice(3, 1)[0] : {};
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (!(MIN_VELOCITY in params)) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params.minVelocity = this.MIN_VELOCITY;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (!(MIN_DISTANCE in params)) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params.minDistance = this.MIN_DISTANCE;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync return params;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // Internal DOM listener to identify the start of the gesture
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _onStart: function(e, node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var start = true, // always true for mouse
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync doc;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.touches) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start = (e.touches.length === 1);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e = e.touches[0];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (start) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.preventDefault();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_FLICK_START, {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync time : new Date().getTime(),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync pageX: e.pageX,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync pageY: e.pageY,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync clientX: e.clientX,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync clientY: e.clientY,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _e : e
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync });
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle = node.getData(_FLICK_END_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (!endHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync doc = (node.get(NODE_TYPE) === 9) ? node : node.get(OWNER_DOCUMENT);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle = doc.on(EVENT[END], Y.bind(this._onEnd, this), null, node, subscriber, ce);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_FLICK_END_HANDLE,endHandle);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
4d4f336b656d46f8d301603114bb99ce635aafc0vboxsync }
4d4f336b656d46f8d301603114bb99ce635aafc0vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // Internal DOM listener to identify the end of the gesture. Fires the
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // synthetic flick event.
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _onEnd: function(e, node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var endTime = new Date().getTime(),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync valid = node.getData(_FLICK_START),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start = valid,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endEvent = e,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync startTime,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync time,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync xyDistance,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync distance,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync absDistance,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync velocity,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync axis;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (valid) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.changedTouches) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.changedTouches.length === 1 && e.touches.length === 0) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endEvent = e.changedTouches[0];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync } else {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync valid = false;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (valid) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync startTime = start.time;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endTime = new Date().getTime();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync time = endTime - startTime;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params = subscriber._extra;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync xyDistance = [
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endEvent.pageX - start.pageX,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endEvent.pageY - start.pageY
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync axis = params.axis || (Math.abs(xyDistance[0]) >= Math.abs(xyDistance[1])) ? 'x' : 'y';
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync distance = xyDistance[(axis === 'x') ? 0 : 1];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync absDistance = Math.abs(distance);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync velocity = absDistance/time;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (isFinite(velocity) && velocity >= params.minVelocity && absDistance >= params.minDistance) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce.fire({
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync distance: distance,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync time: time,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync velocity: velocity,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync axis: axis,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync button: e.button,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start: start,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync end: {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync time: endTime,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync clientX: endEvent.clientX,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync clientY: endEvent.clientY,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync pageX: endEvent.pageX,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync pageY: endEvent.pageY,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _e : e
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync });
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_FLICK_START);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_VELOCITY : 0,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_DISTANCE : 10
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync}, '@VERSION@' ,{requires:['node-base','event-touch','event-synthetic']});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncYUI.add('event-move', function(Y) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync// TODO: Better way to sniff 'n' switch touch support?
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncvar EVENT = ("ontouchstart" in Y.config.win) ? {
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync start: "touchstart",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync move: "touchmove",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync end: "touchend"
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync } : {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start: "mousedown",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync move: "mousemove",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync end: "mouseup"
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync START = "start",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MOVE = "move",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync END = "end",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _MOVE_START_HANDLE = "_msh",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _MOVE_HANDLE = "_mh",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _MOVE_END_HANDLE = "_meh",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _MOVE_START = "_ms",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _MOVE = "_m",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_TIME = "minTime",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_DISTANCE = "minDistance",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync OWNER_DOCUMENT = "ownerDocument",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync NODE_TYPE = "nodeType",
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync PUB_CFG = {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync emitFacade:false
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync // TODO: Should this be in SynthEvent as the default?
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _defArgsProcessor = function(args) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync return args[3] ? args.splice(3,1)[0] : {};
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _getRoot = function(node, subscriber) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync return subscriber._extra.root || (node.get(NODE_TYPE) === 9) ? node : node.get(OWNER_DOCUMENT);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync define = Y.Event.define;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncdefine('movestart', {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync init: function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_MOVE_START_HANDLE, node.on(EVENT[START],
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this._onStart,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync subscriber,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce));
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync destroy: function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var startHandle = node.getData(_MOVE_START_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (startHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync startHandle.detach();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_MOVE_START_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync processArgs : function(args) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var params = _defArgsProcessor(args);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (!(MIN_TIME in params)) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params[MIN_TIME] = this.MIN_TIME;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (!(MIN_DISTANCE in params)) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync params[MIN_DISTANCE] = this.MIN_DISTANCE;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync return params;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync publishConfig: PUB_CFG,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _onStart : function(e, node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.preventDefault();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var start = true,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync origE = e; // always true for mouse
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.touches) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync start = (e.touches.length === 1);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e = e.touches[0];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.target = e.target || origE.target;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.currentTarget = e.currentTarget || origE.currentTarget;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (start) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.type = "movestart";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_MOVE_START, e);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce.fire(e);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_TIME : 0,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync MIN_DISTANCE : 3
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncdefine('move', {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync init : function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var root = _getRoot(node, subscriber),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync moveHandle = root.on(EVENT[MOVE],
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this._onMove,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync subscriber,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_MOVE_HANDLE, moveHandle);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync processArgs : _defArgsProcessor,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync destroy : function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var moveHandle = node.getData(_MOVE_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (moveHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync moveHandle.detach();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_MOVE_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync publishConfig : PUB_CFG,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _onMove : function(e, node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var move = subscriber._extra.standAlone || node.getData(_MOVE_START),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync origE = e;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (move) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.touches) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync move = (e.touches.length === 1);
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync e = e.touches[0];
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync e.target = e.target || origE.target;
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync e.currentTarget = e.currentTarget || origE.currentTarget;
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync }
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync if (move) {
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync origE.preventDefault();
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync e.type = "move";
71955773a7f477f9a159a491f765ba97e1f00e1avboxsync node.setData(_MOVE, e);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce.fire(e);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncdefine('moveend', {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync init : function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var root = _getRoot(node, subscriber),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle = root.on(EVENT[END],
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this._onEnd,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync this,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync subscriber,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.setData(_MOVE_END_HANDLE, endHandle);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync processArgs : _defArgsProcessor,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync destroy : function (node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var endHandle = node.getData(_MOVE_END_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (endHandle) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync endHandle.detach();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_MOVE_END_HANDLE);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync },
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync publishConfig : PUB_CFG,
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync _onEnd : function(e, node, subscriber, ce) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync var moveEnd = subscriber._extra.standAlone || node.getData(_MOVE) || node.getData(_MOVE_START),
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync origE = e;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (moveEnd) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.changedTouches) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync if (e.changedTouches.length === 1) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e = e.changedTouches[0];
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.target = e.target || origE.target;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.currentTarget = e.currentTarget || origE.currentTarget;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync } else {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync moveEnd = false;
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync if (moveEnd) {
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync origE.preventDefault();
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync e.type = "moveend";
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_MOVE_START);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync node.clearData(_MOVE);
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync ce.fire(e);
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync }
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync}, '@VERSION@' ,{requires:['node-base','event-touch','event-synthetic']});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsyncYUI.add('event-gestures', function(Y){}, '@VERSION@' ,{use:['event-flick', 'event-move']});
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync
a33af978add1a03aab11b2895f441af5cb2a11a6vboxsync