src/cm/media/js/lib/yui/yui3-3.15.0/build/dd-drag/dd-drag.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('dd-drag', 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
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
     * Provides the ability to drag a Node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
     * @module dd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
     * @submodule dd-drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
     * Provides the ability to drag a Node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
     * @class Drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
     * @extends Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
     * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
     * @namespace DD
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    var DDM = Y.DD.DDM,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
        NODE = 'node',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
        DRAGGING = 'dragging',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
        DRAG_NODE = 'dragNode',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
        OFFSET_HEIGHT = 'offsetHeight',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
        OFFSET_WIDTH = 'offsetWidth',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
        * Handles the mouseup DOM event, does nothing internally just fires.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        * @event drag:mouseup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
        * @type {CustomEvent}
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
        * Handles the mousedown DOM event, checks to see if you have a valid handle then starts the drag timers.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
        * @event drag:mouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        * @preventable _defMouseDownFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
        * <dl><dt>ev</dt><dd>The original mousedown event.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
        EV_MOUSE_DOWN = 'drag:mouseDown',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        * Fires after the mousedown event has been cleared.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        * @event drag:afterMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
        * <dl><dt>ev</dt><dd>The original mousedown event.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
        EV_AFTER_MOUSE_DOWN = 'drag:afterMouseDown',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
        * Fires after a handle is removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
        * @event drag:removeHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
        * <dl><dt>handle</dt><dd>The handle that was removed.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
        EV_REMOVE_HANDLE = 'drag:removeHandle',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
        * Fires after a handle is added.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
        * @event drag:addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
        * <dl><dt>handle</dt><dd>The handle that was added.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
        EV_ADD_HANDLE = 'drag:addHandle',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
        * Fires after an invalid selector is removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
        * @event drag:removeInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
        * <dl><dt>handle</dt><dd>The handle that was removed.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
        EV_REMOVE_INVALID = 'drag:removeInvalid',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
        * Fires after an invalid selector is added.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
        * @event drag:addInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
        * <dl><dt>handle</dt><dd>The handle that was added.</dd></dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
        EV_ADD_INVALID = 'drag:addInvalid',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
        * Fires at the start of a drag operation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
        * @event drag:start
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
        * <dt>pageX</dt><dd>The original node position X.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
        * <dt>pageY</dt><dd>The original node position Y.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
        * <dt>startTime</dt><dd>The startTime of the event. getTime on the current Date object.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
        EV_START = 'drag:start',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
        * Fires at the end of a drag operation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
        * @event drag:end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
        * <dt>pageX</dt><dd>The current node position X.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
        * <dt>pageY</dt><dd>The current node position Y.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
        * <dt>startTime</dt><dd>The startTime of the event, from the start event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
        * <dt>endTime</dt><dd>The endTime of the event. getTime on the current Date object.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
        EV_END = 'drag:end',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
        * Fires every mousemove during a drag operation.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
        * @event drag:drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
        * <dt>pageX</dt><dd>The current node position X.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
        * <dt>pageY</dt><dd>The current node position Y.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        * <dt>scroll</dt><dd>Should a scroll action occur.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
        * <dt>info</dt><dd>Object hash containing calculated XY arrays: start, xy, delta, offset</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
        EV_DRAG = 'drag:drag',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
        * Fires when this node is aligned.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
        * @event drag:align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
        * @preventable _defAlignFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
        * <dt>pageX</dt><dd>The current node position X.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
        * <dt>pageY</dt><dd>The current node position Y.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
        EV_ALIGN = 'drag:align',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
        * Fires when this node is over a Drop Target. (Fired from dd-drop)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
        * @event drag:over
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
        * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
        * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
        * @type {CustomEvent}
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
        * Fires when this node enters a Drop Target. (Fired from dd-drop)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
        * @event drag:enter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
        * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
        * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
        * Fires when this node exits a Drop Target. (Fired from dd-drop)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
        * @event drag:exit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
        * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
        * Fires when this node is dropped on a valid Drop Target. (Fired from dd-ddm-drop)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
        * @event drag:drophit
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
        * <dt>drop</dt><dd>The best guess on what was dropped on.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
        * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
        * <dt>others</dt><dd>An array of all the other drop targets that was dropped on.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
        * Fires when this node is dropped on an invalid Drop Target. (Fired from dd-ddm-drop)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
        * @event drag:dropmiss
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
        * @param {EventFacade} event An Event Facade object with the following specific property added:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
        * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
        * <dt>pageX</dt><dd>The current node position X.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
        * <dt>pageY</dt><dd>The current node position Y.</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
        * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
        * @bubbles DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
        * @type {CustomEvent}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
    Drag = function(o) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
        this._lazyAddAttrs = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
        Drag.superclass.constructor.apply(this, arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
        var valid = DDM._regDrag(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
        if (!valid) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
            Y.error('Failed to register node, already in use: ' + o.node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
        }
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
    Drag.NAME = 'drag';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
    * This property defaults to "mousedown", but when drag-gestures is loaded, it is changed to "gesturemovestart"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
    * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
    * @property START_EVENT
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
    */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
    Drag.START_EVENT = 'mousedown';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
    Drag.ATTRS = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
        * Y.Node instance to use as the element to initiate a drag operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
        * @attribute node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
        * @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
        node: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
            setter: function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
                if (this._canDrag(node)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
                    return node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
                var n = Y.one(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
                if (!n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
                    Y.error('DD.Drag: Invalid Node Given: ' + node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
                return n;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
        * Y.Node instance to use as the draggable element, defaults to node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
        * @attribute dragNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
        * @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
        dragNode: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
            setter: function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
                if (this._canDrag(node)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
                    return node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
                var n = Y.one(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
                if (!n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
                    Y.error('DD.Drag: Invalid dragNode Given: ' + node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
                return n;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
        * Offset the drag element by the difference in cursor position: default true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
        * @attribute offsetNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
        offsetNode: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
            value: true
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
        * Center the dragNode to the mouse position on drag:start: default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
        * @attribute startCentered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
        startCentered: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
            value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
        * The number of pixels to move to start a drag operation, default is 3.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
        * @attribute clickPixelThresh
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
        * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
        clickPixelThresh: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
            value: DDM.get('clickPixelThresh')
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
        * The number of milliseconds a mousedown has to pass to start a drag operation, default is 1000.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
        * @attribute clickTimeThresh
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
        * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
        clickTimeThresh: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
            value: DDM.get('clickTimeThresh')
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
        * Set to lock this drag element so that it can't be dragged: default false.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
        * @attribute lock
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
        lock: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
            value: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
            setter: function(lock) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
                if (lock) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
                    this.get(NODE).addClass(DDM.CSS_PREFIX + '-locked');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
                    this.get(NODE).removeClass(DDM.CSS_PREFIX + '-locked');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
                return lock;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
        * A payload holder to store arbitrary data about this drag object, can be used to store any value.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
        * @attribute data
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
        * @type Mixed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
        data: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
            value: false
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
        * If this is false, the drag element will not move with the cursor: default true. Can be used to "resize" the element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
        * @attribute move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
        move: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
        * Use the protective shim on all drag operations: default true. Only works with dd-ddm, not dd-ddm-base.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
        * @attribute useShim
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
        useShim: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
        * Config option is set by Drag to inform you of which handle fired the drag event (in the case that there are several handles): default false.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
        * @attribute activeHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
        * @type Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
        activeHandle: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
            value: false
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
        * By default a drag operation will only begin if the mousedown occurred with the primary mouse button.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
        * Setting this to false will allow for all mousedown events to trigger a drag.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
        * @attribute primaryButtonOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
        primaryButtonOnly: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
        * This attribute is not meant to be used by the implementor, it is meant to be used as an Event tracker so you can listen for it to change.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
        * @attribute dragging
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
        dragging: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
            value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
        parent: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
            value: false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
        * This attribute only works if the dd-drop module has been loaded. It will make this node a drop target as well as draggable.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
        * @attribute target
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
        target: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
            value: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
            setter: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
                this._handleTarget(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
                return config;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
        * This attribute only works if the dd-drop module is active. It will set the dragMode (point, intersect, strict) of this Drag instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
        * @attribute dragMode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
        * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
        dragMode: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
            value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
            setter: function(mode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
                return DDM._setDragMode(mode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
        * Array of groups to add this drag into.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
        * @attribute groups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
        * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
        groups: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
            value: ['default'],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
            getter: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
                if (!this._groups) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
                    this._groups = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
                    return [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
                return Y.Object.keys(this._groups);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
            },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
            setter: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
                this._groups = Y.Array.hash(g);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
                return g;
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
        * Array of valid handles to add. Adding something here will set all handles, even if previously added with addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
        * @attribute handles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
        * @type Array
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
        handles: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
            value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
            setter: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
                if (g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
                    this._handles = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
                    Y.Array.each(g, function(v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
                        var key = v;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
                        if (v instanceof Y.Node || v instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
                            key = v._yuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
                        this._handles[key] = v;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
                    }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
                    this._handles = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
                return g;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
        * Controls the default bubble parent for this Drag instance. Default: Y.DD.DDM. Set to false to disable bubbling. Use bubbleTargets in config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
        * @deprecated
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
        * @attribute bubbles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
        * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
        bubbles: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
            setter: function(t) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
                this.addTarget(t);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
                return t;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
        * Should the mousedown event be halted. Default: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
        * @attribute haltDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
        haltDown: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        }
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
    Y.extend(Drag, Y.Base, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
        * Checks the object for the methods needed to drag the object around.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
        * Normally this would be a node instance, but in the case of Graphics, it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        * may be an SVG node or something similar.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
        * @method _canDrag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
        * @param {Object} n The object to check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
        * @return {Boolean} True or false if the Object contains the methods needed to Drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
        _canDrag: function(n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
            if (n && n.setXY && n.getXY && n.test && n.contains) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
                return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
        * The default bubbleTarget for this object. Default: Y.DD.DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
        * @property _bubbleTargets
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
        _bubbleTargets: Y.DD.DDM,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
        * Add this Drag instance to a group, this should be used for on-the-fly group additions.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
        * @method addToGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
        * @param {String} g The group to add this Drag Instance to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
        addToGroup: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
            this._groups[g] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
            DDM._activateTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
        * Remove this Drag instance from a group, this should be used for on-the-fly group removals.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
        * @method removeFromGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
        * @param {String} g The group to remove this Drag Instance from.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
        removeFromGroup: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
            delete this._groups[g];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
            DDM._activateTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
        * This will be a reference to the Drop instance associated with this drag if the target: true config attribute is set..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
        * @property target
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
        target: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
        * Attribute handler for the target config attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
        * @method _handleTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
        * @param {Boolean/Object} config The Config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
        _handleTarget: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
            if (Y.DD.Drop) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
                if (config === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
                    if (this.target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
                        DDM._unregTarget(this.target);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
                        this.target = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
                    if (!Y.Lang.isObject(config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
                        config = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
                    config.bubbleTargets = config.bubbleTargets || this.getTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
                    config.node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
                    config.groups = config.groups || this.get('groups');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
                    this.target = new Y.DD.Drop(config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
        * Storage Array for the groups this drag belongs to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
        * @property _groups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
        _groups: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
        * This method creates all the events for this Event Target and publishes them so we get Event Bubbling.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
        * @method _createEvents
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
        _createEvents: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
            this.publish(EV_MOUSE_DOWN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
                defaultFn: this._defMouseDownFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
            this.publish(EV_ALIGN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
                defaultFn: this._defAlignFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
            this.publish(EV_DRAG, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
                defaultFn: this._defDragFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
                prefix: 'drag'
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
            this.publish(EV_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
                defaultFn: this._defEndFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
                preventedFn: this._prevEndFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
            var ev = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
                EV_AFTER_MOUSE_DOWN,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
                EV_REMOVE_HANDLE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
                EV_ADD_HANDLE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
                EV_REMOVE_INVALID,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
                EV_ADD_INVALID,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
                EV_START,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
                'drag:drophit',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
                'drag:dropmiss',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
                'drag:over',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
                'drag:enter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
                'drag:exit'
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
            Y.Array.each(ev, function(v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
                this.publish(v, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
                    type: v,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
                    emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
                    bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
                    preventable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
                    queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                    prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
            }, this);
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
        * A private reference to the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
        * @property _ev_md
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
        * @type {EventFacade}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
        _ev_md: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
        * The getTime of the mousedown event. Not used, just here in case someone wants/needs to use it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
        * @property _startTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
        * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
        _startTime: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
        * The getTime of the mouseup event. Not used, just here in case someone wants/needs to use it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
        * @property _endTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
        * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
        _endTime: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
        * A private hash of the valid drag handles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
        * @property _handles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
        _handles: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
        * A private hash of the invalid selector strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
        * @property _invalids
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
        _invalids: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
        * A private hash of the default invalid selector strings: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
        * @property _invalidsDefault
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
        _invalidsDefault: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
        * Private flag to see if the drag threshhold was met
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
        * @property _dragThreshMet
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
        _dragThreshMet: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
        * Flag to determine if the drag operation came from a timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
        * @property _fromTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
        _fromTimeout: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
        * Holder for the setTimeout call
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
        * @property _clickTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
        _clickTimeout: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
        * The offset of the mouse position to the element's position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
        * @property deltaXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
        deltaXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
        * The initial mouse position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
        * @property startXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
        startXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
        * The initial element position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
        * @property nodeXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
        nodeXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
        * The position of the element as it's moving (for offset calculations)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
        * @property lastXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
        lastXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
        * The xy that the node will be set to. Changing this will alter the position as it's dragged.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
        * @property actXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
        actXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
        * The real xy position of the node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
        * @property realXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
        realXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
        * The XY coords of the mousemove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
        * @property mouseXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
        mouseXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
        * A region object associated with this drag, used for checking regions while dragging.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
        * @property region
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
        * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
        region: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
        * Handler for the mouseup DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
        * @method _handleMouseUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
        * @param {EventFacade} ev The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
        _handleMouseUp: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
            this.fire('drag:mouseup');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
            if (DDM.activeDrag) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
                DDM._end();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
        * The function we use as the ondragstart handler when we start a drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
        * in Internet Explorer. This keeps IE from blowing up on images as drag handles.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
        * @method _fixDragStart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
        * @param {Event} e The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
        _fixDragStart: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
            if (this.validClick(e)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
                e.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
        * The function we use as the onselectstart handler when we start a drag in Internet Explorer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
        * @method _ieSelectFix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
        _ieSelectFix: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
        * We will hold a copy of the current "onselectstart" method on this property, and reset it after we are done using it.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
        * @property _ieSelectBack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
        _ieSelectBack: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
        * This method copies the onselectstart listner on the document to the _ieSelectFix property
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
        * @method _fixIEMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
        _fixIEMouseDown: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
            if (Y.UA.ie) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
                this._ieSelectBack = Y.config.doc.body.onselectstart;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
                Y.config.doc.body.onselectstart = this._ieSelectFix;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
        * This method copies the _ieSelectFix property back to the onselectstart listner on the document.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
        * @method _fixIEMouseUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
        _fixIEMouseUp: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
            if (Y.UA.ie) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
                Y.config.doc.body.onselectstart = this._ieSelectBack;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
        * Handler for the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
        * @method _handleMouseDownEvent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
        * @param {EventFacade} ev  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        _handleMouseDownEvent: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
            this.fire(EV_MOUSE_DOWN, { ev: ev });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
        * Handler for the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
        * @method _defMouseDownFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
        * @param {EventFacade} e  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
        _defMouseDownFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
            var ev = e.ev;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
            this._dragThreshMet = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
            this._ev_md = ev;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
            if (this.get('primaryButtonOnly') && ev.button > 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
            if (this.validClick(ev)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
                this._fixIEMouseDown(ev);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
                if (Drag.START_EVENT.indexOf('gesture') !== 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
                    //Only do these if it's not a gesture
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
                    if (this.get('haltDown')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
                        ev.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
                        ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
                this._setStartPosition([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
                DDM.activeDrag = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
                this._clickTimeout = Y.later(this.get('clickTimeThresh'), this, this._timeoutCheck);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
            this.fire(EV_AFTER_MOUSE_DOWN, { ev: ev });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
        * Method first checks to see if we have handles, if so it validates the click
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
        * against the handle. Then if it finds a valid handle, it checks it against
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
        * the invalid handles list. Returns true if a good handle was used, false otherwise.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
        * @method validClick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
        * @param {EventFacade} ev  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
        * @return {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
        validClick: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
            var r = false, n = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
            tar = ev.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
            hTest = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
            els = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
            nlist = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
            set = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
            if (this._handles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
                Y.Object.each(this._handles, function(i, n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
                    if (i instanceof Y.Node || i instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
                        if (!r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
                            nlist = i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
                            if (nlist instanceof Y.Node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
                                nlist = new Y.NodeList(i._node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
                            nlist.each(function(nl) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
                                if (nl.contains(tar)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
                                    r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
                            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
                    } else if (Y.Lang.isString(n)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
                        //Am I this or am I inside this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
                        if (tar.test(n + ', ' + n + ' *') && !hTest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
                            hTest = n;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
                            r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                n = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                if (n.contains(tar) || n.compareTo(tar)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
                    r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
            if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
                if (this._invalids) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
                    Y.Object.each(this._invalids, function(i, n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
                        if (Y.Lang.isString(n)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
                            //Am I this or am I inside this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
                            if (tar.test(n + ', ' + n + ' *')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
                                r = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
            if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
                if (hTest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
                    els = ev.currentTarget.all(hTest);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
                    set = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
                    els.each(function(n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
                        if ((n.contains(tar) || n.compareTo(tar)) && !set) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
                            set = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
                            this.set('activeHandle', n);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
                    }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
                    this.set('activeHandle', this.get(NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
            return r;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
        * Sets the current position of the Element and calculates the offset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
        * @method _setStartPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
        * @param {Array} xy The XY coords to set the position to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
        _setStartPosition: function(xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
            this.startXY = xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
            this.nodeXY = this.lastXY = this.realXY = this.get(NODE).getXY();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
            if (this.get('offsetNode')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
                this.deltaXY = [(this.startXY[0] - this.nodeXY[0]), (this.startXY[1] - this.nodeXY[1])];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
                this.deltaXY = [0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
        * The method passed to setTimeout to determine if the clickTimeThreshold was met.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
        * @method _timeoutCheck
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
        _timeoutCheck: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
            if (!this.get('lock') && !this._dragThreshMet && this._ev_md) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
                this._fromTimeout = this._dragThreshMet = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
                this.start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
                this._alignNode([this._ev_md.pageX, this._ev_md.pageY], true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
        * Remove a Selector added by addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
        * @method removeHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
        * @param {String} str The selector for the handle to be removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
        removeHandle: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
            var key = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
            if (str instanceof Y.Node || str instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
                key = str._yuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
            if (this._handles[key]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
                delete this._handles[key];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
                this.fire(EV_REMOVE_HANDLE, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
        * Add a handle to a drag element. Drag only initiates when a mousedown happens on this element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
        * @method addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
        * @param {String} str The selector to test for a valid handle. Must be a child of the element.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
        addHandle: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
            if (!this._handles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
                this._handles = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
            var key = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
            if (str instanceof Y.Node || str instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
                key = str._yuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
            this._handles[key] = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
            this.fire(EV_ADD_HANDLE, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
        * Remove an invalid handle added by addInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        * @method removeInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
        * @param {String} str The invalid handle to remove from the internal list.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
        removeInvalid: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
            if (this._invalids[str]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
                this._invalids[str] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
                delete this._invalids[str];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
                this.fire(EV_REMOVE_INVALID, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
        * Add a selector string to test the handle against. If the test passes the drag operation will not continue.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
        * @method addInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
        * @param {String} str The selector to test against to determine if this is an invalid drag handle.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
        addInvalid: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
            if (Y.Lang.isString(str)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
                this._invalids[str] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
                this.fire(EV_ADD_INVALID, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
        * Internal init handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
        * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
        initializer: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
            this.get(NODE).dd = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
            if (!this.get(NODE).get('id')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
                var id = Y.stamp(this.get(NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
                this.get(NODE).set('id', id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
            this.actXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
            this._invalids = Y.clone(this._invalidsDefault, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
            this._createEvents();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
            if (!this.get(DRAG_NODE)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
                this.set(DRAG_NODE, this.get(NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
            //Fix for #2528096
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
            //Don't prep the DD instance until all plugins are loaded.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
            this.on('initializedChange', Y.bind(this._prep, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
            //Shouldn't have to do this..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
            this.set('groups', this.get('groups'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
        * Attach event listners and add classname
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
        * @method _prep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
        _prep: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
            this._dragThreshMet = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
            var node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
            node.addClass(DDM.CSS_PREFIX + '-draggable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
            node.on(Drag.START_EVENT, Y.bind(this._handleMouseDownEvent, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
            node.on('mouseup', Y.bind(this._handleMouseUp, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
            node.on('dragstart', Y.bind(this._fixDragStart, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
        * Detach event listeners and remove classname
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
        * @method _unprep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        _unprep: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
            var node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
            node.removeClass(DDM.CSS_PREFIX + '-draggable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
            node.detachAll('mouseup');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
            node.detachAll('dragstart');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
            node.detachAll(Drag.START_EVENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
            this.mouseXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
            this.deltaXY = [0,0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
            this.startXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
            this.nodeXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
            this.lastXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
            this.actXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
            this.realXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
        * Starts the drag operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
        * @method start
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
        start: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
            if (!this.get('lock') && !this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
                var node = this.get(NODE), ow, oh, xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
                this._startTime = (new Date()).getTime();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
                DDM._start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
                node.addClass(DDM.CSS_PREFIX + '-dragging');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
                this.fire(EV_START, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
                    pageX: this.nodeXY[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
                    pageY: this.nodeXY[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
                    startTime: this._startTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
                node = this.get(DRAG_NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
                xy = this.nodeXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
                ow = node.get(OFFSET_WIDTH);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
                oh = node.get(OFFSET_HEIGHT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
                if (this.get('startCentered')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
                    this._setStartPosition([xy[0] + (ow / 2), xy[1] + (oh / 2)]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
                this.region = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
                    '0': xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
                    '1': xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
                    area: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
                    top: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
                    right: xy[0] + ow,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
                    bottom: xy[1] + oh,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
                    left: xy[0]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
                this.set(DRAGGING, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
        * Ends the drag operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
        * @method end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
        end: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
            this._endTime = (new Date()).getTime();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
            if (this._clickTimeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
                this._clickTimeout.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
            this._dragThreshMet = this._fromTimeout = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
            if (!this.get('lock') && this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
                this.fire(EV_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
                    pageX: this.lastXY[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
                    pageY: this.lastXY[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
                    startTime: this._startTime,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
                    endTime: this._endTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-dragging');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
            this.set(DRAGGING, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
            this.deltaXY = [0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
        * Handler for fixing the selection in IE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
        * @method _defEndFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
        _defEndFn: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
            this._ev_md = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
        * Handler for preventing the drag:end event. It will reset the node back to it's start position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
        * @method _prevEndFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
        _prevEndFn: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
            //Bug #1852577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
            this.get(DRAG_NODE).setXY(this.nodeXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
            this._ev_md = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
            this.region = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
        * Calculates the offsets and set's the XY that the element will move to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
        * @method _align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
        * @param {Array} xy The xy coords to align with.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
        _align: function(xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
            this.fire(EV_ALIGN, {pageX: xy[0], pageY: xy[1] });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
        * Calculates the offsets and set's the XY that the element will move to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
        * @method _defAlignFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
        * @param {EventFacade} e The drag:align event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
        _defAlignFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
            this.actXY = [e.pageX - this.deltaXY[0], e.pageY - this.deltaXY[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
        * This method performs the alignment before the element move.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
        * @method _alignNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
        * @param {Array} eXY The XY to move the element to, usually comes from the mousemove DOM event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
        _alignNode: function(eXY, scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
            this._align(eXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
            if (!scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
                this._moveNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
        * This method performs the actual element move.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
        * @method _moveNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
        _moveNode: function(scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
            //if (!this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
            //    return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
            //}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
            var diffXY = [], diffXY2 = [], startXY = this.nodeXY, xy = this.actXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
            diffXY[0] = (xy[0] - this.lastXY[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
            diffXY[1] = (xy[1] - this.lastXY[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
            diffXY2[0] = (xy[0] - this.nodeXY[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
            diffXY2[1] = (xy[1] - this.nodeXY[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
            this.region = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
                '0': xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
                '1': xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
                area: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
                top: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
                right: xy[0] + this.get(DRAG_NODE).get(OFFSET_WIDTH),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
                bottom: xy[1] + this.get(DRAG_NODE).get(OFFSET_HEIGHT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
                left: xy[0]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
            this.fire(EV_DRAG, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
                pageX: xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
                pageY: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
                scroll: scroll,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
                info: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
                    start: startXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
                    xy: xy,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
                    delta: diffXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
                    offset: diffXY2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
            this.lastXY = xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
        * Default function for drag:drag. Fired from _moveNode.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
        * @method _defDragFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
        * @param {EventFacade} ev The drag:drag event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
        _defDragFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
            if (this.get('move')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
                if (e.scroll && e.scroll.node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
                    var domNode = e.scroll.node.getDOMNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
                    //If it's the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
                    if (domNode === Y.config.win) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
                        domNode.scrollTo(e.scroll.left, e.scroll.top);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
                        e.scroll.node.set('scrollTop', e.scroll.top);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
                        e.scroll.node.set('scrollLeft', e.scroll.left);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
                this.get(DRAG_NODE).setXY([e.pageX, e.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
                this.realXY = [e.pageX, e.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
        * Fired from DragDropMgr (DDM) on mousemove.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
        * @method _move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
        * @param {EventFacade} ev The mousemove DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
        _move: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
            if (this.get('lock')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
            this.mouseXY = [ev.pageX, ev.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
            if (!this._dragThreshMet) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
                var diffX = Math.abs(this.startXY[0] - ev.pageX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
                diffY = Math.abs(this.startXY[1] - ev.pageY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
                if (diffX > this.get('clickPixelThresh') || diffY > this.get('clickPixelThresh')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
                    this._dragThreshMet = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
                    this.start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
                    //This only happens on gestures to stop the page from scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
                    if (ev && ev.preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
                        ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
                    this._alignNode([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
                if (this._clickTimeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
                    this._clickTimeout.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
                this._alignNode([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
        * Method will forcefully stop a drag operation. For example calling this from inside an ESC keypress handler will stop this drag.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
        * @method stopDrag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
        stopDrag: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
            if (this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
                DDM._end();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
        * Lifecycle destructor, unreg the drag from the DDM and remove listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
        * @method destructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
        destructor: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
            this._unprep();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
            if (this.target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
                this.target.destroy();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
            DDM._unregDrag(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
    Y.namespace('DD');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
    Y.DD.Drag = Drag;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
}, '@VERSION@', {"requires": ["dd-ddm-base"]});