src/cm/media/js/lib/yui/yui3-3.15.0/build/dd-drag/dd-drag-debug.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('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
                Y.log('bubbles is deprecated use bubbleTargets: HOST', 'warn', 'dd');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
                this.addTarget(t);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
                return t;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
        * Should the mousedown event be halted. Default: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
        * @attribute haltDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
        * @type Boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
        haltDown: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
            value: true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
    };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
    Y.extend(Drag, Y.Base, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
        * Checks the object for the methods needed to drag the object around.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
        * Normally this would be a node instance, but in the case of Graphics, it
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
        * may be an SVG node or something similar.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
        * @method _canDrag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
        * @param {Object} n The object to check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
        * @return {Boolean} True or false if the Object contains the methods needed to Drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
        _canDrag: function(n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
            if (n && n.setXY && n.getXY && n.test && n.contains) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
                return true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
        * The default bubbleTarget for this object. Default: Y.DD.DDM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
        * @property _bubbleTargets
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
        _bubbleTargets: Y.DD.DDM,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
        * 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
   461
        * @method addToGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
        * @param {String} g The group to add this Drag Instance to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
        addToGroup: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
            this._groups[g] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
            DDM._activateTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
        * 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
   472
        * @method removeFromGroup
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
        * @param {String} g The group to remove this Drag Instance from.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
        removeFromGroup: function(g) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
            delete this._groups[g];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
            DDM._activateTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
        * 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
   483
        * @property target
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
        target: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
        * Attribute handler for the target config attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
        * @method _handleTarget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
        * @param {Boolean/Object} config The Config
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
        _handleTarget: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
            if (Y.DD.Drop) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
                if (config === false) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
                    if (this.target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
                        DDM._unregTarget(this.target);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
                        this.target = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
                    if (!Y.Lang.isObject(config)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
                        config = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
                    config.bubbleTargets = config.bubbleTargets || this.getTargets();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
                    config.node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
                    config.groups = config.groups || this.get('groups');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
                    this.target = new Y.DD.Drop(config);
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
        * Storage Array for the groups this drag belongs to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
        * @property _groups
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
        _groups: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
        * 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
   520
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
        * @method _createEvents
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
        _createEvents: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
            this.publish(EV_MOUSE_DOWN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
                defaultFn: this._defMouseDownFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
            this.publish(EV_ALIGN, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
                defaultFn: this._defAlignFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
            this.publish(EV_DRAG, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
                defaultFn: this._defDragFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
            this.publish(EV_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
                defaultFn: this._defEndFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
                preventedFn: this._prevEndFn,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
                queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
                emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
                bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
                prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
            var ev = [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
                EV_AFTER_MOUSE_DOWN,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
                EV_REMOVE_HANDLE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
                EV_ADD_HANDLE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
                EV_REMOVE_INVALID,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
                EV_ADD_INVALID,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
                EV_START,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
                'drag:drophit',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
                'drag:dropmiss',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
                'drag:over',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
                'drag:enter',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
                'drag:exit'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
            ];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
            Y.Array.each(ev, function(v) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
                this.publish(v, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
                    type: v,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
                    emitFacade: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
                    bubbles: true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
                    preventable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
                    queuable: false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
                    prefix: 'drag'
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
            }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
        * A private reference to the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
        * @property _ev_md
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
        * @type {EventFacade}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
        _ev_md: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
        * 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
   592
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
        * @property _startTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
        * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
        _startTime: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
        * 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
   599
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
        * @property _endTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
        * @type Date
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
        _endTime: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
        * A private hash of the valid drag handles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
        * @property _handles
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
        _handles: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
        * A private hash of the invalid selector strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
        * @property _invalids
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
        _invalids: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
        * 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
   620
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
        * @property _invalidsDefault
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
        * @type {Object}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
        _invalidsDefault: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
        * Private flag to see if the drag threshhold was met
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
        * @property _dragThreshMet
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
        _dragThreshMet: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
        * Flag to determine if the drag operation came from a timeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
        * @property _fromTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
        _fromTimeout: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
        * Holder for the setTimeout call
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
        * @property _clickTimeout
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
        * @type {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
        _clickTimeout: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
        * The offset of the mouse position to the element's position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
        * @property deltaXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
        deltaXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
        * The initial mouse position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
        * @property startXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
        startXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
        * The initial element position
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
        * @property nodeXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
        nodeXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
        * The position of the element as it's moving (for offset calculations)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
        * @property lastXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
        lastXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
        * 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
   672
        * @property actXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
        actXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
        * The real xy position of the node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
        * @property realXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
        realXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
        * The XY coords of the mousemove
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
        * @property mouseXY
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
        * @type {Array}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
        mouseXY: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
        * A region object associated with this drag, used for checking regions while dragging.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
        * @property region
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
        * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
        region: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
        * Handler for the mouseup DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
        * @method _handleMouseUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
        * @param {EventFacade} ev The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
        _handleMouseUp: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
            this.fire('drag:mouseup');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
            if (DDM.activeDrag) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
                DDM._end();
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
        * The function we use as the ondragstart handler when we start a drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
        * in Internet Explorer. This keeps IE from blowing up on images as drag handles.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
        * @method _fixDragStart
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
        * @param {Event} e The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
        _fixDragStart: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
            if (this.validClick(e)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
                e.preventDefault();
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
        * 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
   721
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
        * @method _ieSelectFix
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
        _ieSelectFix: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
            return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
        * 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
   729
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
        * @property _ieSelectBack
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
        _ieSelectBack: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
        * This method copies the onselectstart listner on the document to the _ieSelectFix property
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
        * @method _fixIEMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
        _fixIEMouseDown: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
            if (Y.UA.ie) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
                this._ieSelectBack = Y.config.doc.body.onselectstart;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
                Y.config.doc.body.onselectstart = this._ieSelectFix;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
        * This method copies the _ieSelectFix property back to the onselectstart listner on the document.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        * @method _fixIEMouseUp
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
        _fixIEMouseUp: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
            if (Y.UA.ie) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
                Y.config.doc.body.onselectstart = this._ieSelectBack;
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
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
        * Handler for the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
        * @method _handleMouseDownEvent
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
        * @param {EventFacade} ev  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
        _handleMouseDownEvent: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
            this.fire(EV_MOUSE_DOWN, { ev: ev });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
        * Handler for the mousedown DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
        * @method _defMouseDownFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
        * @param {EventFacade} e  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
        _defMouseDownFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
            var ev = e.ev;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
            this._dragThreshMet = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
            this._ev_md = ev;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
            if (this.get('primaryButtonOnly') && ev.button > 1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
            if (this.validClick(ev)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
                this._fixIEMouseDown(ev);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
                if (Drag.START_EVENT.indexOf('gesture') !== 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
                    //Only do these if it's not a gesture
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
                    if (this.get('haltDown')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
                        Y.log('Halting MouseDown', 'info', 'drag');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
                        ev.halt();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
                        Y.log('Preventing Default on MouseDown', 'info', 'drag');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
                        ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
                this._setStartPosition([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
                DDM.activeDrag = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
                this._clickTimeout = Y.later(this.get('clickTimeThresh'), this, this._timeoutCheck);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
            this.fire(EV_AFTER_MOUSE_DOWN, { ev: ev });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
        * Method first checks to see if we have handles, if so it validates the click
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
        * against the handle. Then if it finds a valid handle, it checks it against
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
        * the invalid handles list. Returns true if a good handle was used, false otherwise.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
        * @method validClick
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
        * @param {EventFacade} ev  The Event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
        * @return {Boolean}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
        validClick: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
            var r = false, n = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
            tar = ev.target,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
            hTest = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
            els = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
            nlist = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
            set = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
            if (this._handles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
                Y.Object.each(this._handles, function(i, n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
                    if (i instanceof Y.Node || i instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
                        if (!r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
                            nlist = i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
                            if (nlist instanceof Y.Node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
                                nlist = new Y.NodeList(i._node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
                            nlist.each(function(nl) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
                                if (nl.contains(tar)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
                                    r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
                                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
                            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
                    } else if (Y.Lang.isString(n)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
                        //Am I this or am I inside this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
                        if (tar.test(n + ', ' + n + ' *') && !hTest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
                            hTest = n;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
                            r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
                n = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
                if (n.contains(tar) || n.compareTo(tar)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
                    r = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
            if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
                if (this._invalids) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
                    Y.Object.each(this._invalids, function(i, n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
                        if (Y.Lang.isString(n)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
                            //Am I this or am I inside this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
                            if (tar.test(n + ', ' + n + ' *')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
                                r = false;
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
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
            if (r) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
                if (hTest) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
                    els = ev.currentTarget.all(hTest);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
                    set = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
                    els.each(function(n) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
                        if ((n.contains(tar) || n.compareTo(tar)) && !set) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
                            set = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
                            this.set('activeHandle', n);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
                    }, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
                    this.set('activeHandle', this.get(NODE));
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
            return r;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
        * Sets the current position of the Element and calculates the offset
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
        * @method _setStartPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
        * @param {Array} xy The XY coords to set the position to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
        _setStartPosition: function(xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
            this.startXY = xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
            this.nodeXY = this.lastXY = this.realXY = this.get(NODE).getXY();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
            if (this.get('offsetNode')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
                this.deltaXY = [(this.startXY[0] - this.nodeXY[0]), (this.startXY[1] - this.nodeXY[1])];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
                this.deltaXY = [0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
        * The method passed to setTimeout to determine if the clickTimeThreshold was met.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
        * @method _timeoutCheck
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
        _timeoutCheck: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
            if (!this.get('lock') && !this._dragThreshMet && this._ev_md) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
                this._fromTimeout = this._dragThreshMet = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
                this.start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
                this._alignNode([this._ev_md.pageX, this._ev_md.pageY], true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
        * Remove a Selector added by addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
        * @method removeHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
        * @param {String} str The selector for the handle to be removed.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
        removeHandle: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
            var key = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
            if (str instanceof Y.Node || str instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
                key = str._yuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
            if (this._handles[key]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
                delete this._handles[key];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
                this.fire(EV_REMOVE_HANDLE, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
        * 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
   918
        * @method addHandle
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
        * @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
   920
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
        addHandle: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
            if (!this._handles) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
                this._handles = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
            var key = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
            if (str instanceof Y.Node || str instanceof Y.NodeList) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
                key = str._yuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
            this._handles[key] = str;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
            this.fire(EV_ADD_HANDLE, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
        * Remove an invalid handle added by addInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
        * @method removeInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
        * @param {String} str The invalid handle to remove from the internal list.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
        removeInvalid: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
            if (this._invalids[str]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
                this._invalids[str] = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
                delete this._invalids[str];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
                this.fire(EV_REMOVE_INVALID, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
        * 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
   950
        * @method addInvalid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
        * @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
   952
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
        addInvalid: function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
            if (Y.Lang.isString(str)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
                this._invalids[str] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
                this.fire(EV_ADD_INVALID, { handle: str });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
        * Internal init handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
        * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
        initializer: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
            this.get(NODE).dd = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
            if (!this.get(NODE).get('id')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
                var id = Y.stamp(this.get(NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
                this.get(NODE).set('id', id);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
            this.actXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
            this._invalids = Y.clone(this._invalidsDefault, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
            this._createEvents();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
            if (!this.get(DRAG_NODE)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
                this.set(DRAG_NODE, this.get(NODE));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
            //Fix for #2528096
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
            //Don't prep the DD instance until all plugins are loaded.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
            this.on('initializedChange', Y.bind(this._prep, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
            //Shouldn't have to do this..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
            this.set('groups', this.get('groups'));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
        * Attach event listners and add classname
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
        * @method _prep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
        _prep: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
            this._dragThreshMet = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
            var node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
            node.addClass(DDM.CSS_PREFIX + '-draggable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
            node.on(Drag.START_EVENT, Y.bind(this._handleMouseDownEvent, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
            node.on('mouseup', Y.bind(this._handleMouseUp, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
            node.on('dragstart', Y.bind(this._fixDragStart, this));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
        * Detach event listeners and remove classname
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
        * @method _unprep
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
        _unprep: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
            var node = this.get(NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
            node.removeClass(DDM.CSS_PREFIX + '-draggable');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
            node.detachAll('mouseup');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
            node.detachAll('dragstart');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
            node.detachAll(Drag.START_EVENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
            this.mouseXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
            this.deltaXY = [0,0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
            this.startXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
            this.nodeXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
            this.lastXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
            this.actXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
            this.realXY = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
        * Starts the drag operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
        * @method start
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
        start: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
            if (!this.get('lock') && !this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
                var node = this.get(NODE), ow, oh, xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
                this._startTime = (new Date()).getTime();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
                DDM._start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
                node.addClass(DDM.CSS_PREFIX + '-dragging');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
                this.fire(EV_START, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
                    pageX: this.nodeXY[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
                    pageY: this.nodeXY[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
                    startTime: this._startTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
                node = this.get(DRAG_NODE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
                xy = this.nodeXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
                ow = node.get(OFFSET_WIDTH);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
                oh = node.get(OFFSET_HEIGHT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
                if (this.get('startCentered')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
                    this._setStartPosition([xy[0] + (ow / 2), xy[1] + (oh / 2)]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
                this.region = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
                    '0': xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
                    '1': xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
                    area: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
                    top: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
                    right: xy[0] + ow,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
                    bottom: xy[1] + oh,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
                    left: xy[0]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
                };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
                this.set(DRAGGING, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
        * Ends the drag operation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
        * @method end
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
        end: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
            this._endTime = (new Date()).getTime();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
            if (this._clickTimeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
                this._clickTimeout.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
            this._dragThreshMet = this._fromTimeout = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
            if (!this.get('lock') && this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
                this.fire(EV_END, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
                    pageX: this.lastXY[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
                    pageY: this.lastXY[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
                    startTime: this._startTime,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
                    endTime: this._endTime
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
                });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-dragging');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
            this.set(DRAGGING, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
            this.deltaXY = [0, 0];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
        * Handler for fixing the selection in IE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
        * @method _defEndFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
        _defEndFn: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
            this._ev_md = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
        * 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
  1102
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
        * @method _prevEndFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
        _prevEndFn: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
            this._fixIEMouseUp();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
            //Bug #1852577
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
            this.get(DRAG_NODE).setXY(this.nodeXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
            this._ev_md = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
            this.region = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
        * Calculates the offsets and set's the XY that the element will move to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
        * @method _align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
        * @param {Array} xy The xy coords to align with.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
        _align: function(xy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
            this.fire(EV_ALIGN, {pageX: xy[0], pageY: xy[1] });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
        * Calculates the offsets and set's the XY that the element will move to.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
        * @method _defAlignFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
        * @param {EventFacade} e The drag:align event.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
        _defAlignFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
            this.actXY = [e.pageX - this.deltaXY[0], e.pageY - this.deltaXY[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
        * This method performs the alignment before the element move.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
        * @method _alignNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
        * @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
  1135
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
        _alignNode: function(eXY, scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
            this._align(eXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
            if (!scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
                this._moveNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
        * This method performs the actual element move.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
        * @method _moveNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
        _moveNode: function(scroll) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
            //if (!this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
            //    return;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
            //}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
            var diffXY = [], diffXY2 = [], startXY = this.nodeXY, xy = this.actXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
            diffXY[0] = (xy[0] - this.lastXY[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
            diffXY[1] = (xy[1] - this.lastXY[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
            diffXY2[0] = (xy[0] - this.nodeXY[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
            diffXY2[1] = (xy[1] - this.nodeXY[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
            this.region = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
                '0': xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
                '1': xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
                area: 0,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
                top: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
                right: xy[0] + this.get(DRAG_NODE).get(OFFSET_WIDTH),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
                bottom: xy[1] + this.get(DRAG_NODE).get(OFFSET_HEIGHT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
                left: xy[0]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
            this.fire(EV_DRAG, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
                pageX: xy[0],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
                pageY: xy[1],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
                scroll: scroll,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
                info: {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
                    start: startXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
                    xy: xy,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
                    delta: diffXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
                    offset: diffXY2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
                }
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
            this.lastXY = xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
        * Default function for drag:drag. Fired from _moveNode.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
        * @method _defDragFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
        * @param {EventFacade} ev The drag:drag event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
        _defDragFn: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
            if (this.get('move')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
                if (e.scroll && e.scroll.node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
                    var domNode = e.scroll.node.getDOMNode();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
                    //If it's the window
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
                    if (domNode === Y.config.win) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
                        domNode.scrollTo(e.scroll.left, e.scroll.top);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
                    } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
                        e.scroll.node.set('scrollTop', e.scroll.top);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
                        e.scroll.node.set('scrollLeft', e.scroll.left);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
                this.get(DRAG_NODE).setXY([e.pageX, e.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
                this.realXY = [e.pageX, e.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
        * Fired from DragDropMgr (DDM) on mousemove.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
        * @method _move
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
        * @param {EventFacade} ev The mousemove DOM event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
        _move: function(ev) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
            if (this.get('lock')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
                return false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
            this.mouseXY = [ev.pageX, ev.pageY];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
            if (!this._dragThreshMet) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
                var diffX = Math.abs(this.startXY[0] - ev.pageX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
                diffY = Math.abs(this.startXY[1] - ev.pageY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
                if (diffX > this.get('clickPixelThresh') || diffY > this.get('clickPixelThresh')) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
                    this._dragThreshMet = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
                    this.start();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
                    //This only happens on gestures to stop the page from scrolling
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
                    if (ev && ev.preventDefault) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
                        ev.preventDefault();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
                    this._alignNode([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
                if (this._clickTimeout) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
                    this._clickTimeout.cancel();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
                this._alignNode([ev.pageX, ev.pageY]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
        * 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
  1239
        * @method stopDrag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
        * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
        stopDrag: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
            if (this.get(DRAGGING)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
                DDM._end();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
        * Lifecycle destructor, unreg the drag from the DDM and remove listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
        * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
        * @method destructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
        destructor: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
            this._unprep();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
            if (this.target) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
                this.target.destroy();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
            DDM._unregDrag(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
    Y.namespace('DD');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
    Y.DD.Drag = Drag;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
}, '@VERSION@', {"requires": ["dd-ddm-base"]});