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