src/cm/media/js/lib/yui/yui3-3.15.0/build/event-move/event-move.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
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
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
         Y.one('#myNode').on('gesturemove', function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
         Y.one('#myNode').on('gesturemoveend', function (e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
         });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
     });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
 * @module event-gestures
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
 * @submodule event-move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
 var GESTURE_MAP = Y.Event._GESTURE_MAP,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
     EVENT = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
         start: GESTURE_MAP.start,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
         end: GESTURE_MAP.end,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
         move: GESTURE_MAP.move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
     },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    START = "start",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    MOVE = "move",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    END = "end",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    GESTURE_MOVE = "gesture" + MOVE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    GESTURE_MOVE_END = GESTURE_MOVE + END,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    GESTURE_MOVE_START = GESTURE_MOVE + START,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
    _MOVE_START_HANDLE = "_msh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    _MOVE_HANDLE = "_mh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    _MOVE_END_HANDLE = "_meh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    _DEL_MOVE_START_HANDLE = "_dmsh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    _DEL_MOVE_HANDLE = "_dmh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    _DEL_MOVE_END_HANDLE = "_dmeh",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    _MOVE_START = "_ms",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
    _MOVE = "_m",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
    MIN_TIME = "minTime",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    MIN_DISTANCE = "minDistance",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
    PREVENT_DEFAULT = "preventDefault",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    BUTTON = "button",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    OWNER_DOCUMENT = "ownerDocument",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    CURRENT_TARGET = "currentTarget",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    TARGET = "target",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    NODE_TYPE = "nodeType",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    SUPPORTS_POINTER = Y.config.win && ("msPointerEnabled" in Y.config.win.navigator),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    MS_TOUCH_ACTION_COUNT = 'msTouchActionCount',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
    MS_INIT_TOUCH_ACTION = 'msInitTouchAction',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
    _defArgsProcessor = function(se, args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
        var iConfig = (delegate) ? 4 : 3,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
            config = (args.length > iConfig) ? Y.merge(args.splice(iConfig,1)[0]) : {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        if (!(PREVENT_DEFAULT in config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
            config[PREVENT_DEFAULT] = se.PREVENT_DEFAULT;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
        return config;
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
    _getRoot = function(node, subscriber) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
        return subscriber._extra.root || (node.get(NODE_TYPE) === 9) ? node : node.get(OWNER_DOCUMENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
    //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
    82
    _checkDocumentElem = function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        var elem = node.getDOMNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
        if (node.compareTo(Y.config.doc) && elem.documentElement) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
            return elem.documentElement;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
    _normTouchFacade = function(touchFacade, touch, params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        touchFacade.pageX = touch.pageX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
        touchFacade.pageY = touch.pageY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
        touchFacade.screenX = touch.screenX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
        touchFacade.screenY = touch.screenY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        touchFacade.clientX = touch.clientX;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
        touchFacade.clientY = touch.clientY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        touchFacade[TARGET] = touchFacade[TARGET] || touch[TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        touchFacade[CURRENT_TARGET] = touchFacade[CURRENT_TARGET] || touch[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        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
   103
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
    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
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
    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
   109
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
    _setTouchActions = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        var elem = _checkDocumentElem(node) || node.getDOMNode(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
            num = node.getData(MS_TOUCH_ACTION_COUNT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        //Checks to see if msTouchAction is supported.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        if (SUPPORTS_POINTER) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
            if (!num) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
                num = 0;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
                node.setData(MS_INIT_TOUCH_ACTION, elem.style.msTouchAction);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
            elem.style.msTouchAction = Y.Event._DEFAULT_TOUCH_ACTION;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
            num++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
            node.setData(MS_TOUCH_ACTION_COUNT, num);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
    /*
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
    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
   128
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
    _unsetTouchActions = function (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
        var elem = _checkDocumentElem(node) || node.getDOMNode(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
            num = node.getData(MS_TOUCH_ACTION_COUNT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
            initTouchAction = node.getData(MS_INIT_TOUCH_ACTION);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
        if (SUPPORTS_POINTER) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            num--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
            node.setData(MS_TOUCH_ACTION_COUNT, num);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
            if (num === 0 && elem.style.msTouchAction !== initTouchAction) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
                elem.style.msTouchAction = initTouchAction;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
    _prevent = function(e, preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
        if (preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
            // preventDefault is a boolean or a function
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
            if (!preventDefault.call || preventDefault(e)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
                e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
    define = Y.Event.define;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
    Y.Event._DEFAULT_TOUCH_ACTION = 'none';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
 * 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
   157
 * 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
   158
 * 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
   159
 * 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
   160
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
 * <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
   162
 * 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
   163
 * 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
   164
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
 * @event gesturemovestart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
 * @param type {string} "gesturemovestart"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
 * @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
   169
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
 * <dt>minDistance (defaults to 0)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
 * <dd>The minimum distance threshold which should be crossed before the gesturemovestart is fired</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
 * <dt>minTime (defaults to 0)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
 * <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
   176
 * <dt>button (no default)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
 * <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
   178
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
 * <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
   180
 * 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
   181
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
define(GESTURE_MOVE_START, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    on: function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        //Set -ms-touch-action on IE10 and set preventDefault to true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
        subscriber[_MOVE_START_HANDLE] = node.on(EVENT[START],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
            this._onStart,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
            this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
            node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
            subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
            ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
        subscriber[_DEL_MOVE_START_HANDLE] = node.delegate(EVENT[START],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
                se._onStart(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
            filter);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
        var handle = subscriber[_DEL_MOVE_START_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
            subscriber[_DEL_MOVE_START_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
        _unsetTouchActions(node);
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
    detach: function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
        var startHandle = subscriber[_MOVE_START_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
        if (startHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
            startHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
            subscriber[_MOVE_START_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
        _unsetTouchActions(node);
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
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
        var params = _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
        if (!(MIN_TIME in params)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
            params[MIN_TIME] = this.MIN_TIME;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
        if (!(MIN_DISTANCE in params)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
            params[MIN_DISTANCE] = this.MIN_DISTANCE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
        return params;
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
    _onStart : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
            node = e[CURRENT_TARGET];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
        var params = subscriber._extra,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
            fireStart = true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
            minTime = params[MIN_TIME],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
            minDistance = params[MIN_DISTANCE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
            button = params.button,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
            preventDefault = params[PREVENT_DEFAULT],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
            root = _getRoot(node, subscriber),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
            startXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
        if (e.touches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
            if (e.touches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
                _normTouchFacade(e, e.touches[0], params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
                fireStart = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
            fireStart = (button === undefined) || (button === e.button);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        if (fireStart) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
            _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
            if (minTime === 0 || minDistance === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
                this._start(e, node, ce, params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
                startXY = [e.pageX, e.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
                if (minTime > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
                    params._ht = Y.later(minTime, this, this._start, [e, node, ce, params]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                    params._hme = root.on(EVENT[END], Y.bind(function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
                        this._cancel(params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
                    }, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
                if (minDistance > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
                    params._hm = root.on(EVENT[MOVE], Y.bind(function(em) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
                        if (Math.abs(em.pageX - startXY[0]) > minDistance || Math.abs(em.pageY - startXY[1]) > minDistance) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
                            this._start(e, node, ce, params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
                    }, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
    _cancel : function(params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
        if (params._ht) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
            params._ht.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
            params._ht = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
        if (params._hme) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
            params._hme.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
            params._hme = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
        if (params._hm) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
            params._hm.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
            params._hm = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
    _start : function(e, node, ce, params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
        if (params) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
            this._cancel(params);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
        e.type = GESTURE_MOVE_START;
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
        node.setData(_MOVE_START, e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
        ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
    MIN_TIME : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
    MIN_DISTANCE : 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
 * 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
   343
 * and on mouse based devices in response to a "mousemove".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
 * <p>By default this event is only fired when the same node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
 * 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
   347
 * if they want to listen for this event without an initial "gesturemovestart".</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
 * <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
   350
 * 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
   351
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
 * <p>This event can also be listened for using node.delegate().</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
 * <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
   355
 * 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
   356
 * 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
   357
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
 * @event gesturemove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
 * @param type {string} "gesturemove"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
 * @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
   362
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
 * <dt>standAlone (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
 * <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
   366
 * <dt>root (defaults to document)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
 * <dd>The node to which the internal DOM listeners should be attached.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
 * <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
   370
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
define(GESTURE_MOVE, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
    on : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
        var root = _getRoot(node, subscriber, EVENT[MOVE]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
            moveHandle = root.on(EVENT[MOVE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
                this._onMove,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
                this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
                node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
                subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
                ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
        subscriber[_MOVE_HANDLE] = moveHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
        subscriber[_DEL_MOVE_HANDLE] = node.delegate(EVENT[MOVE],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
                se._onMove(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
            filter);
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
    detach : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
        var moveHandle = subscriber[_MOVE_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
        if (moveHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
            moveHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
            subscriber[_MOVE_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
        _unsetTouchActions(node);
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
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
        var handle = subscriber[_DEL_MOVE_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
            subscriber[_DEL_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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
        return _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
    _onMove : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
            node = e[CURRENT_TARGET];
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
        var fireMove = subscriber._extra.standAlone || node.getData(_MOVE_START),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
            preventDefault = subscriber._extra.preventDefault;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        if (fireMove) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
            if (e.touches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
                if (e.touches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
                    _normTouchFacade(e, e.touches[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
                    fireMove = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            if (fireMove) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
                _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
                e.type = GESTURE_MOVE;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
                ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
        }
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
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
 * 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
   466
 * and on mouse based devices in response to a "mouseup".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
 * <p>By default this event is only fired when the same node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
 * 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
   470
 * if they want to listen for this event without a preceding "gesturemovestart" or "gesturemove".</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
 * <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
   473
 * 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
   474
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
 * <p>This event can also be listened for using node.delegate().</p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
 * <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
   478
 * 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
   479
 * 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
   480
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
 * @event gesturemoveend
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
 * @for YUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
 * @param type {string} "gesturemoveend"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
 * @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
   486
 * @param cfg {Object} Optional. An object which specifies:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
 * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
 * <dt>standAlone (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
 * <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
   490
 * <dt>root (defaults to document)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
 * <dd>The node to which the internal DOM listeners should be attached.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
 * <dt>preventDefault (defaults to false)</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
 * <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
   494
 * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
 * @return {EventHandle} the detach handle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
define(GESTURE_MOVE_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
    on : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
        _setTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
        var root = _getRoot(node, subscriber),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
            endHandle = root.on(EVENT[END],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
                this._onEnd,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
                this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
                node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
                subscriber,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
                ce);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
        subscriber[_MOVE_END_HANDLE] = endHandle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
    delegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
        var se = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
        subscriber[_DEL_MOVE_END_HANDLE] = node.delegate(EVENT[END],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
            function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
                se._onEnd(e, node, subscriber, ce, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
            filter);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
    detachDelegate : function(node, subscriber, ce, filter) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
        var handle = subscriber[_DEL_MOVE_END_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
        if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
            handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
            subscriber[_DEL_MOVE_END_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
    detach : function (node, subscriber, ce) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
        var endHandle = subscriber[_MOVE_END_HANDLE];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
        if (endHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
            endHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
            subscriber[_MOVE_END_HANDLE] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
        _unsetTouchActions(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
    processArgs : function(args, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
        return _defArgsProcessor(this, args, delegate);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
    _onEnd : function(e, node, subscriber, ce, delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
        if (delegate) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            node = e[CURRENT_TARGET];
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
        var fireMoveEnd = subscriber._extra.standAlone || node.getData(_MOVE) || node.getData(_MOVE_START),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
            preventDefault = subscriber._extra.preventDefault;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
        if (fireMoveEnd) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
            if (e.changedTouches) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
                if (e.changedTouches.length === 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
                    _normTouchFacade(e, e.changedTouches[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
                    fireMoveEnd = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
                }
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
            if (fireMoveEnd) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
                _prevent(e, preventDefault);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
                e.type = GESTURE_MOVE_END;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
                ce.fire(e);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                node.clearData(_MOVE_START);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                node.clearData(_MOVE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
            }
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
    PREVENT_DEFAULT : false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
}, '@VERSION@', {"requires": ["node-base", "event-touch", "event-synthetic"]});