src/cm/media/js/lib/yui/yui3-3.15.0/build/event-move/event-move-debug.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('event-move', 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
 * Adds lower level support for "gesturemovestart", "gesturemove" and "gesturemoveend" events, which can be used to create drag/drop
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 * interactions which work across touch and mouse input devices. They correspond to "touchstart", "touchmove" and "touchend" on a touch input
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * device, and "mousedown", "mousemove", "mouseup" on a mouse based input device.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 * <p>Documentation for the gesturemove triplet of events can be found on the <a href="../classes/YUI.html#event_gesturemove">YUI</a> global,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
 * along with the other supported events.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
 @example
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
     YUI().use('event-move', function (Y) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
         Y.one('#myNode').on('gesturemovestart', function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
             Y.log('gesturemovestart Fired.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
         Y.one('#myNode').on('gesturemove', function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
             Y.log('gesturemove Fired.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
         Y.one('#myNode').on('gesturemoveend', function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
             Y.log('gesturemoveend Fired.');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
     });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
 * @module event-gestures
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
 * @submodule event-move
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
 var GESTURE_MAP = Y.Event._GESTURE_MAP,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
     EVENT = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
         start: GESTURE_MAP.start,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
         end: GESTURE_MAP.end,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
         move: GESTURE_MAP.move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
     },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    START = "start",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    MOVE = "move",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    END = "end",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
    GESTURE_MOVE = "gesture" + MOVE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
    GESTURE_MOVE_END = GESTURE_MOVE + END,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    GESTURE_MOVE_START = GESTURE_MOVE + START,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    _MOVE_START_HANDLE = "_msh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    _MOVE_HANDLE = "_mh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    _MOVE_END_HANDLE = "_meh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    _DEL_MOVE_START_HANDLE = "_dmsh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    _DEL_MOVE_HANDLE = "_dmh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
    _DEL_MOVE_END_HANDLE = "_dmeh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
    _MOVE_START = "_ms",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    _MOVE = "_m",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    MIN_TIME = "minTime",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    MIN_DISTANCE = "minDistance",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
    PREVENT_DEFAULT = "preventDefault",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    BUTTON = "button",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    OWNER_DOCUMENT = "ownerDocument",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    CURRENT_TARGET = "currentTarget",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    TARGET = "target",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
    NODE_TYPE = "nodeType",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    SUPPORTS_POINTER = Y.config.win && ("msPointerEnabled" in Y.config.win.navigator),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    MS_TOUCH_ACTION_COUNT = 'msTouchActionCount',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    MS_INIT_TOUCH_ACTION = 'msInitTouchAction',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
    _defArgsProcessor = function(se, args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        var iConfig = (delegate) ? 4 : 3,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
            config = (args.length > iConfig) ? Y.merge(args.splice(iConfig,1)[0]) : {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
        if (!(PREVENT_DEFAULT in config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
            config[PREVENT_DEFAULT] = se.PREVENT_DEFAULT;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
        return config;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
    _getRoot = function(node, subscriber) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
        return subscriber._extra.root || (node.get(NODE_TYPE) === 9) ? node : node.get(OWNER_DOCUMENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
    //Checks to see if the node is the document, and if it is, returns the documentElement.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
    _checkDocumentElem = function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        var elem = node.getDOMNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        if (node.compareTo(Y.config.doc) && elem.documentElement) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            return elem.documentElement;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    _normTouchFacade = function(touchFacade, touch, params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
        touchFacade.pageX = touch.pageX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        touchFacade.pageY = touch.pageY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
        touchFacade.screenX = touch.screenX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        touchFacade.screenY = touch.screenY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        touchFacade.clientX = touch.clientX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        touchFacade.clientY = touch.clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        touchFacade[TARGET] = touchFacade[TARGET] || touch[TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        touchFacade[CURRENT_TARGET] = touchFacade[CURRENT_TARGET] || touch[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        touchFacade[BUTTON] = (params && params[BUTTON]) || 1; // default to left (left as per vendors, not W3C which is 0)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
    In IE10 touch mode, gestures will not work properly unless the -ms-touch-action CSS property is set to something other than 'auto'. Read http://msdn.microsoft.com/en-us/library/windows/apps/hh767313.aspx for more info. To get around this, we set -ms-touch-action: none which is the same as e.preventDefault() on touch environments. This tells the browser to fire DOM events for all touch events, and not perform any default behavior.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
    The user can over-ride this by setting a more lenient -ms-touch-action property on a node (such as pan-x, pan-y, etc.) via CSS when subscribing to the 'gesturemovestart' event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
    _setTouchActions = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        var elem = _checkDocumentElem(node) || node.getDOMNode(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
            num = node.getData(MS_TOUCH_ACTION_COUNT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        //Checks to see if msTouchAction is supported.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        if (SUPPORTS_POINTER) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
            if (!num) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                num = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                node.setData(MS_INIT_TOUCH_ACTION, elem.style.msTouchAction);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
            elem.style.msTouchAction = Y.Event._DEFAULT_TOUCH_ACTION;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
            num++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
            node.setData(MS_TOUCH_ACTION_COUNT, num);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
        }
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
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
    Resets the element's -ms-touch-action property back to the original value, This is called on detach() and detachDelegate().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
    _unsetTouchActions = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
        var elem = _checkDocumentElem(node) || node.getDOMNode(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
            num = node.getData(MS_TOUCH_ACTION_COUNT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            initTouchAction = node.getData(MS_INIT_TOUCH_ACTION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
        if (SUPPORTS_POINTER) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
            num--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
            node.setData(MS_TOUCH_ACTION_COUNT, num);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
            if (num === 0 && elem.style.msTouchAction !== initTouchAction) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
                elem.style.msTouchAction = initTouchAction;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
    _prevent = function(e, preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
        if (preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
            // preventDefault is a boolean or a function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
            if (!preventDefault.call || preventDefault(e)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
                e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
    define = Y.Event.define;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
    Y.Event._DEFAULT_TOUCH_ACTION = 'none';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
 * Sets up a "gesturemovestart" event, that is fired on touch devices in response to a single finger "touchstart",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
 * and on mouse based devices in response to a "mousedown". The subscriber can specify the minimum time
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
 * and distance thresholds which should be crossed before the "gesturemovestart" is fired and for the mouse,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
 * which button should initiate a "gesturemovestart". This event can also be listened for using node.delegate().
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
 * <p>It is recommended that you use Y.bind to set up context and additional arguments for your event handler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
 * however if you want to pass the context and arguments as additional signature arguments to on/delegate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
 * you need to provide a null value for the configuration object, e.g: <code>node.on("gesturemovestart", fn, null, context, arg1, arg2, arg3)</code></p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
 * @event gesturemovestart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
 * @param type {string} "gesturemovestart"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
 * @param fn {function} The method the event invokes. It receives the event facade of the underlying DOM event (mousedown or touchstart.touches[0]) which contains position co-ordinates.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
 * <dt>minDistance (defaults to 0)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
 * <dd>The minimum distance threshold which should be crossed before the gesturemovestart is fired</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
 * <dt>minTime (defaults to 0)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
 * <dd>The minimum time threshold for which the finger/mouse should be help down before the gesturemovestart is fired</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
 * <dt>button (no default)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
 * <dd>In the case of a mouse input device, if the event should only be fired for a specific mouse button.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
 * <dd>Can be set to true/false to prevent default behavior as soon as the touchstart or mousedown is received (that is before minTime or minDistance thresholds are crossed, and so before the gesturemovestart listener is notified) so that things like text selection and context popups (on touch devices) can be
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
 * prevented. This property can also be set to a function, which returns true or false, based on the event facade passed to it (for example, DragDrop can determine if the target is a valid handle or not before preventing default).</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
define(GESTURE_MOVE_START, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
    on: function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
        //Set -ms-touch-action on IE10 and set preventDefault to true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
        subscriber[_MOVE_START_HANDLE] = node.on(EVENT[START],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
            this._onStart,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
            this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
            node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
            subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
            ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
        subscriber[_DEL_MOVE_START_HANDLE] = node.delegate(EVENT[START],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
                se._onStart(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
            filter);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        var handle = subscriber[_DEL_MOVE_START_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
            subscriber[_DEL_MOVE_START_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
    detach: function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
        var startHandle = subscriber[_MOVE_START_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
        if (startHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
            startHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
            subscriber[_MOVE_START_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
        var params = _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
        if (!(MIN_TIME in params)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
            params[MIN_TIME] = this.MIN_TIME;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
        if (!(MIN_DISTANCE in params)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
            params[MIN_DISTANCE] = this.MIN_DISTANCE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
        return params;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
    _onStart : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
            node = e[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
        var params = subscriber._extra,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            fireStart = true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
            minTime = params[MIN_TIME],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
            minDistance = params[MIN_DISTANCE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
            button = params.button,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
            preventDefault = params[PREVENT_DEFAULT],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
            root = _getRoot(node, subscriber),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
            startXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        if (e.touches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
            if (e.touches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
                _normTouchFacade(e, e.touches[0], params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
                fireStart = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
            fireStart = (button === undefined) || (button === e.button);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
        Y.log("gesturemovestart: params = button:" + button + ", minTime = " + minTime + ", minDistance = " + minDistance, "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
        if (fireStart) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
            _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
            if (minTime === 0 || minDistance === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
                Y.log("gesturemovestart: No minTime or minDistance. Firing immediately", "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
                this._start(e, node, ce, params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
                startXY = [e.pageX, e.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                if (minTime > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
                    Y.log("gesturemovestart: minTime specified. Setup timer.", "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                    Y.log("gesturemovestart: initialTime for minTime = " + new Date().getTime(), "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
                    params._ht = Y.later(minTime, this, this._start, [e, node, ce, params]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
                    params._hme = root.on(EVENT[END], Y.bind(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
                        this._cancel(params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
                    }, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
                if (minDistance > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
                    Y.log("gesturemovestart: minDistance specified. Setup native mouse/touchmove listener to measure distance.", "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
                    Y.log("gesturemovestart: initialXY for minDistance = " + startXY, "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
                    params._hm = root.on(EVENT[MOVE], Y.bind(function(em) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
                        if (Math.abs(em.pageX - startXY[0]) > minDistance || Math.abs(em.pageY - startXY[1]) > minDistance) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
                            Y.log("gesturemovestart: minDistance hit.", "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
                            this._start(e, node, ce, params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
                    }, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
    _cancel : function(params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
        if (params._ht) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
            params._ht.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
            params._ht = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
        if (params._hme) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
            params._hme.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
            params._hme = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
        if (params._hm) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
            params._hm.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
            params._hm = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
    _start : function(e, node, ce, params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
        if (params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
            this._cancel(params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
        e.type = GESTURE_MOVE_START;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
        Y.log("gesturemovestart: Firing start: " + new Date().getTime(), "event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
        node.setData(_MOVE_START, e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
        ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
    MIN_TIME : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
    MIN_DISTANCE : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
 * Sets up a "gesturemove" event, that is fired on touch devices in response to a single finger "touchmove",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
 * and on mouse based devices in response to a "mousemove".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
 * <p>By default this event is only fired when the same node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
 * has received a "gesturemovestart" event. The subscriber can set standAlone to true, in the configuration properties,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
 * if they want to listen for this event without an initial "gesturemovestart".</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
 * <p>By default this event sets up it's internal "touchmove" and "mousemove" DOM listeners on the document element. The subscriber
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
 * can set the root configuration property, to specify which node to attach DOM listeners to, if different from the document.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
 * <p>This event can also be listened for using node.delegate().</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
 * <p>It is recommended that you use Y.bind to set up context and additional arguments for your event handler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
 * however if you want to pass the context and arguments as additional signature arguments to on/delegate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
 * you need to provide a null value for the configuration object, e.g: <code>node.on("gesturemove", fn, null, context, arg1, arg2, arg3)</code></p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
 * @event gesturemove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
 * @param type {string} "gesturemove"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
 * @param fn {function} The method the event invokes. It receives the event facade of the underlying DOM event (mousemove or touchmove.touches[0]) which contains position co-ordinates.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
 * <dt>standAlone (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
 * <dd>true, if the subscriber should be notified even if a "gesturemovestart" has not occured on the same node.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
 * <dt>root (defaults to document)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
 * <dd>The node to which the internal DOM listeners should be attached.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
 * <dd>Can be set to true/false to prevent default behavior as soon as the touchmove or mousemove is received. As with gesturemovestart, can also be set to function which returns true/false based on the event facade passed to it.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
define(GESTURE_MOVE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
    on : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
        var root = _getRoot(node, subscriber, EVENT[MOVE]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
            moveHandle = root.on(EVENT[MOVE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
                this._onMove,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
                this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
                node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
                subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
                ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
        subscriber[_MOVE_HANDLE] = moveHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
        subscriber[_DEL_MOVE_HANDLE] = node.delegate(EVENT[MOVE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
                se._onMove(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
            filter);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
    detach : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
        var moveHandle = subscriber[_MOVE_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
        if (moveHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
            moveHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
            subscriber[_MOVE_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
        var handle = subscriber[_DEL_MOVE_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
            subscriber[_DEL_MOVE_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
        return _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
    _onMove : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
            node = e[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
        var fireMove = subscriber._extra.standAlone || node.getData(_MOVE_START),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
            preventDefault = subscriber._extra.preventDefault;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
        Y.log("onMove initial fireMove check:" + fireMove,"event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
        if (fireMove) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
            if (e.touches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
                if (e.touches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
                    _normTouchFacade(e, e.touches[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
                    fireMove = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
            if (fireMove) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
                _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
                Y.log("onMove second fireMove check:" + fireMove,"event-gestures");
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
                e.type = GESTURE_MOVE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
                ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
 * Sets up a "gesturemoveend" event, that is fired on touch devices in response to a single finger "touchend",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
 * and on mouse based devices in response to a "mouseup".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
 * <p>By default this event is only fired when the same node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
 * has received a "gesturemove" or "gesturemovestart" event. The subscriber can set standAlone to true, in the configuration properties,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
 * if they want to listen for this event without a preceding "gesturemovestart" or "gesturemove".</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
 * <p>By default this event sets up it's internal "touchend" and "mouseup" DOM listeners on the document element. The subscriber
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
 * can set the root configuration property, to specify which node to attach DOM listeners to, if different from the document.</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
 * <p>This event can also be listened for using node.delegate().</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
 * <p>It is recommended that you use Y.bind to set up context and additional arguments for your event handler,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
 * however if you want to pass the context and arguments as additional signature arguments to on/delegate,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
 * you need to provide a null value for the configuration object, e.g: <code>node.on("gesturemoveend", fn, null, context, arg1, arg2, arg3)</code></p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
 * @event gesturemoveend
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
 * @param type {string} "gesturemoveend"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
 * @param fn {function} The method the event invokes. It receives the event facade of the underlying DOM event (mouseup or touchend.changedTouches[0]).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
 * <dt>standAlone (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
 * <dd>true, if the subscriber should be notified even if a "gesturemovestart" or "gesturemove" has not occured on the same node.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
 * <dt>root (defaults to document)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
 * <dd>The node to which the internal DOM listeners should be attached.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
 * <dd>Can be set to true/false to prevent default behavior as soon as the touchend or mouseup is received. As with gesturemovestart, can also be set to function which returns true/false based on the event facade passed to it.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
define(GESTURE_MOVE_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
    on : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        var root = _getRoot(node, subscriber),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
            endHandle = root.on(EVENT[END],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
                this._onEnd,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
                this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
                node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
                subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
                ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
        subscriber[_MOVE_END_HANDLE] = endHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
        subscriber[_DEL_MOVE_END_HANDLE] = node.delegate(EVENT[END],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
                se._onEnd(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
            filter);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
        var handle = subscriber[_DEL_MOVE_END_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
            subscriber[_DEL_MOVE_END_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
    detach : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
        var endHandle = subscriber[_MOVE_END_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
        if (endHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
            endHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            subscriber[_MOVE_END_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
        return _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
    _onEnd : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
            node = e[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
        var fireMoveEnd = subscriber._extra.standAlone || node.getData(_MOVE) || node.getData(_MOVE_START),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
            preventDefault = subscriber._extra.preventDefault;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
        if (fireMoveEnd) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
            if (e.changedTouches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
                if (e.changedTouches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                    _normTouchFacade(e, e.changedTouches[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
                    fireMoveEnd = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
            if (fireMoveEnd) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
                _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
                e.type = GESTURE_MOVE_END;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
                ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
                node.clearData(_MOVE_START);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
                node.clearData(_MOVE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
}, '@VERSION@', {"requires": ["node-base", "event-touch", "event-synthetic"]});