76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav GlassYUI.add('dd-drag', function(Y) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides the ability to drag a Node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module dd
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule dd-drag
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides the ability to drag a Node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class Drag
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @namespace DD
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var DDM = Y.DD.DDM,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass NODE = 'node',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DRAGGING = 'dragging',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DRAG_NODE = 'dragNode',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass OFFSET_HEIGHT = 'offsetHeight',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass OFFSET_WIDTH = 'offsetWidth',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:mouseup
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handles the mouseup DOM event, does nothing internally just fires.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:mouseDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handles the mousedown DOM event, checks to see if you have a valid handle then starts the drag timers.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @preventable _defMouseDownFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>ev</dt><dd>The original mousedown event.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_MOUSE_DOWN = 'drag:mouseDown',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:afterMouseDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires after the mousedown event has been cleared.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>ev</dt><dd>The original mousedown event.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_AFTER_MOUSE_DOWN = 'drag:afterMouseDown',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:removeHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires after a handle is removed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>handle</dt><dd>The handle that was removed.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_REMOVE_HANDLE = 'drag:removeHandle',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:addHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires after a handle is added.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>handle</dt><dd>The handle that was added.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_ADD_HANDLE = 'drag:addHandle',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:removeInvalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires after an invalid selector is removed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>handle</dt><dd>The handle that was removed.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_REMOVE_INVALID = 'drag:removeInvalid',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:addInvalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires after an invalid selector is added.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl><dt>handle</dt><dd>The handle that was added.</dd></dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_ADD_INVALID = 'drag:addInvalid',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:start
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires at the start of a drag operation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageX</dt><dd>The original node position X.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageY</dt><dd>The original node position Y.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>startTime</dt><dd>The startTime of the event. getTime on the current Date object.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_START = 'drag:start',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:end
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires at the end of a drag operation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageX</dt><dd>The current node position X.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageY</dt><dd>The current node position Y.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>startTime</dt><dd>The startTime of the event, from the start event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>endTime</dt><dd>The endTime of the event. getTime on the current Date object.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_END = 'drag:end',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:drag
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires every mousemove during a drag operation.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageX</dt><dd>The current node position X.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageY</dt><dd>The current node position Y.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>scroll</dt><dd>Should a scroll action occur.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>info</dt><dd>Object hash containing calculated XY arrays: start, xy, delta, offset</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_DRAG = 'drag:drag',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:align
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @preventable _defAlignFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node is aligned.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageX</dt><dd>The current node position X.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageY</dt><dd>The current node position Y.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_ALIGN = 'drag:align',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:over
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node is over a Drop Target. (Fired from dd-drop)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:enter
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node enters a Drop Target. (Fired from dd-drop)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:exit
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node exits a Drop Target. (Fired from dd-drop)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drop</dt><dd>The drop object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:drophit
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node is dropped on a valid Drop Target. (Fired from dd-ddm-drop)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drop</dt><dd>The best guess on what was dropped on.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>drag</dt><dd>The drag object at the time of the event.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>others</dt><dd>An array of all the other drop targets that was dropped on.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @event drag:dropmiss
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fires when this node is dropped on an invalid Drop Target. (Fired from dd-ddm-drop)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} event An Event Facade object with the following specific property added:
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageX</dt><dd>The current node position X.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * <dt>pageY</dt><dd>The current node position Y.</dd>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * </dl>
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @bubbles DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {CustomEvent}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Drag = function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._lazyAddAttrs = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Drag.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var valid = DDM._regDrag(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!valid) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.error('Failed to register node, already in use: ' + o.node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Drag.NAME = 'drag';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * This property defaults to "mousedown", but when drag-gestures is loaded, it is changed to "gesturemovestart"
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @static
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property START_EVENT
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Drag.START_EVENT = 'mousedown';
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Drag.ATTRS = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Y.Node instance to use as the element to initiate a drag operation
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(node) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass if (this._canDrag(node)) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass return node;
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var n = Y.one(node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!n) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.error('DD.Drag: Invalid Node Given: ' + node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return n;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dragNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Y.Node instance to use as the draggable element, defaults to node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass dragNode: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(node) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass if (this._canDrag(node)) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass return node;
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var n = Y.one(node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!n) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.error('DD.Drag: Invalid dragNode Given: ' + node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return n;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute offsetNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Offset the drag element by the difference in cursor position: default true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass offsetNode: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute startCentered
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Center the dragNode to the mouse position on drag:start: default false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass startCentered: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute clickPixelThresh
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The number of pixels to move to start a drag operation, default is 3.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Number
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass clickPixelThresh: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: DDM.get('clickPixelThresh')
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute clickTimeThresh
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The number of milliseconds a mousedown has to pass to start a drag operation, default is 1000.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Number
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass clickTimeThresh: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: DDM.get('clickTimeThresh')
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute lock
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Set to lock this drag element so that it can't be dragged: default false.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lock: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(lock) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (lock) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(NODE).addClass(DDM.CSS_PREFIX + '-locked');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(NODE).removeClass(DDM.CSS_PREFIX + '-locked');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return lock;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute data
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A payload holder to store arbitrary data about this drag object, can be used to store any value.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Mixed
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass data: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute move
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description If this is false, the drag element will not move with the cursor: default true. Can be used to "resize" the element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass move: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute useShim
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Use the protective shim on all drag operations: default true. Only works with dd-ddm, not dd-ddm-base.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass useShim: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute activeHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This 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.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass activeHandle: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute primaryButtonOnly
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description By default a drag operation will only begin if the mousedown occurred with the primary mouse button. Setting this to false will allow for all mousedown events to trigger a drag.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass primaryButtonOnly: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dragging
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description 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.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass dragging: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass parent: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute target
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This attribute only works if the dd-drop module has been loaded. It will make this node a drop target as well as draggable.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass target: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handleTarget(config);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return config;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dragMode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This attribute only works if the dd-drop module is active. It will set the dragMode (point, intersect, strict) of this Drag instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass dragMode: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(mode) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return DDM._setDragMode(mode);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute groups
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of groups to add this drag into.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass groups: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: ['default'],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass getter: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this._groups) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._groups = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ret = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(this._groups, function(v, k) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ret[ret.length] = k;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return ret;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(g) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._groups = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(g, function(v, k) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._groups[v] = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return g;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute handles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of valid handles to add. Adding something here will set all handles, even if previously added with addHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass handles: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(g) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (g) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(g, function(v, k) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var key = v;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (v instanceof Y.Node || v instanceof Y.NodeList) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass key = v._yuid;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles[key] = v;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return g;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @deprecated
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute bubbles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Controls the default bubble parent for this Drag instance. Default: Y.DD.DDM. Set to false to disable bubbling. Use bubbleTargets in config
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass setter: function(t) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('bubbles is deprecated use bubbleTargets: HOST', 'warn', 'dd');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.addTarget(t);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return t;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute haltDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Should the mousedown event be halted. Default: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass haltDown: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass value: true
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.extend(Drag, Y.Base, {
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass /**
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * Checks the object for the methods needed to drag the object around.
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * Normally this would be a node instance, but in the case of Graphics, it
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * may be an SVG node or something similar.
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * @method _canDrag
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * @private
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * @param {Object} n The object to check
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass * @return {Boolean} True or false if the Object contains the methods needed to Drag
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass */
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass _canDrag: function(n) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass if (n && n.setXY && n.getXY && n.test && n.contains) {
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass return true;
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass }
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass return false;
c03d3f1eafc55ad0233f238f9ba1583c1e47fa96Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _bubbleTargets
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The default bubbleTarget for this object. Default: Y.DD.DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _bubbleTargets: Y.DD.DDM,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method addToGroup
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Add this Drag instance to a group, this should be used for on-the-fly group additions.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} g The group to add this Drag Instance to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass addToGroup: function(g) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._groups[g] = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._activateTargets();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method removeFromGroup
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Remove this Drag instance from a group, this should be used for on-the-fly group removals.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} g The group to remove this Drag Instance from.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass removeFromGroup: function(g) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete this._groups[g];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._activateTargets();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property target
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This will be a reference to the Drop instance associated with this drag if the target: true config attribute is set..
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Object}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass target: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _handleTarget
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Attribute handler for the target config attribute.
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {Boolean/Object} config The Config
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _handleTarget: function(config) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.DD.Drop) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (config === false) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.target) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._unregTarget(this.target);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.target = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!Y.Lang.isObject(config)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass config = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass config.bubbleTargets = ('bubbleTargets' in config) ? config.bubbleTargets : Y.Object.values(this._yuievt.targets);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass config.node = this.get(NODE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass config.groups = config.groups || this.get('groups');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.target = new Y.DD.Drop(config);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _groups
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Storage Array for the groups this drag belongs to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _groups: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _createEvents
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This method creates all the events for this Event Target and publishes them so we get Event Bubbling.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _createEvents: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.publish(EV_MOUSE_DOWN, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defaultFn: this._defMouseDownFn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass queuable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass emitFacade: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prefix: 'drag'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.publish(EV_ALIGN, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defaultFn: this._defAlignFn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass queuable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass emitFacade: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prefix: 'drag'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.publish(EV_DRAG, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defaultFn: this._defDragFn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass queuable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass emitFacade: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prefix: 'drag'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.publish(EV_END, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass defaultFn: this._defEndFn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass preventedFn: this._prevEndFn,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass queuable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass emitFacade: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prefix: 'drag'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ev = [
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_AFTER_MOUSE_DOWN,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_REMOVE_HANDLE,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_ADD_HANDLE,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_REMOVE_INVALID,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_ADD_INVALID,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass EV_START,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass 'drag:drophit',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass 'drag:dropmiss',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass 'drag:over',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass 'drag:enter',
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass 'drag:exit'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(ev, function(v, k) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.publish(v, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass type: v,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass emitFacade: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bubbles: true,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass preventable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass queuable: false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass prefix: 'drag'
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _ev_md
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A private reference to the mousedown DOM event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {EventFacade}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _ev_md: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _startTime
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The getTime of the mousedown event. Not used, just here in case someone wants/needs to use it.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Date
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _startTime: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _endTime
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The getTime of the mouseup event. Not used, just here in case someone wants/needs to use it.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Date
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _endTime: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _handles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A private hash of the valid drag handles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Object}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _handles: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _invalids
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A private hash of the invalid selector strings
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Object}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _invalids: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _invalidsDefault
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A private hash of the default invalid selector strings: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Object}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _invalidsDefault: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _dragThreshMet
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Private flag to see if the drag threshhold was met
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Boolean}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _dragThreshMet: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _fromTimeout
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Flag to determine if the drag operation came from a timeout
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Boolean}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _fromTimeout: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _clickTimeout
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Holder for the setTimeout call
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Boolean}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _clickTimeout: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property deltaXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The offset of the mouse position to the element's position
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass deltaXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property startXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The initial mouse position
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass startXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property nodeXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The initial element position
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nodeXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property lastXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The position of the element as it's moving (for offset calculations)
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass lastXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property actXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The xy that the node will be set to. Changing this will alter the position as it's dragged.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass actXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property realXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The real xy position of the node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass realXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property mouseXY
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The XY coords of the mousemove
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type {Array}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass mouseXY: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property region
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A region object associated with this drag, used for checking regions while dragging.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass region: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _handleMouseUp
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handler for the mouseup DOM event
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {EventFacade} ev The Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _handleMouseUp: function(ev) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire('drag:mouseup');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._fixIEMouseUp();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (DDM.activeDrag) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._end();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _fixDragStart
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The function we use as the ondragstart handler when we start a drag in Internet Explorer. This keeps IE from blowing up on images as drag handles.
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {Event} e The Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _fixDragStart: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.preventDefault();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _ieSelectFix
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The function we use as the onselectstart handler when we start a drag in Internet Explorer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _ieSelectFix: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _ieSelectBack
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description We will hold a copy of the current "onselectstart" method on this property, and reset it after we are done using it.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _ieSelectBack: null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _fixIEMouseDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This method copies the onselectstart listner on the document to the _ieSelectFix property
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _fixIEMouseDown: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.UA.ie) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._ieSelectBack = Y.config.doc.body.onselectstart;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.config.doc.body.onselectstart = this._ieSelectFix;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _fixIEMouseUp
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This method copies the _ieSelectFix property back to the onselectstart listner on the document.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _fixIEMouseUp: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.UA.ie) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.config.doc.body.onselectstart = this._ieSelectBack;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _handleMouseDownEvent
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handler for the mousedown DOM event
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {EventFacade} ev The Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _handleMouseDownEvent: function(ev) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_MOUSE_DOWN, { ev: ev });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defMouseDownFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handler for the mousedown DOM event
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {EventFacade} e The Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defMouseDownFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var ev = e.ev;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._dragThreshMet = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._ev_md = ev;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('primaryButtonOnly') && ev.button > 1) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.validClick(ev)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._fixIEMouseDown(ev);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('haltDown')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('Halting MouseDown', 'info', 'drag');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ev.halt();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.log('Preventing Default on MouseDown', 'info', 'drag');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ev.preventDefault();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._setStartPosition([ev.pageX, ev.pageY]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM.activeDrag = this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._clickTimeout = Y.later(this.get('clickTimeThresh'), this, this._timeoutCheck);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_AFTER_MOUSE_DOWN, { ev: ev });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method validClick
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Method first checks to see if we have handles, if so it validates the click against the handle. Then if it finds a valid handle, it checks it against the invalid handles list. Returns true if a good handle was used, false otherwise.
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @param {EventFacade} ev The Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Boolean}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass validClick: function(ev) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var r = false, n = false,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass tar = ev.target,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass hTest = null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass els = null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nlist = null,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass set = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._handles) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(this._handles, function(i, n) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (i instanceof Y.Node || i instanceof Y.NodeList) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!r) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nlist = i;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nlist instanceof Y.Node) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nlist = new Y.NodeList(i._node);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass nlist.each(function(nl) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (nl.contains(tar)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass r = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else if (Y.Lang.isString(n)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Am I this or am I inside this
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (tar.test(n + ', ' + n + ' *') && !hTest) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass hTest = n;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass r = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass n = this.get(NODE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (n.contains(tar) || n.compareTo(tar)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass r = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (r) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._invalids) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.each(this._invalids, function(i, n) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.Lang.isString(n)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Am I this or am I inside this
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (tar.test(n + ', ' + n + ' *')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass r = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (r) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (hTest) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass els = ev.currentTarget.all(hTest);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass set = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass els.each(function(n, i) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if ((n.contains(tar) || n.compareTo(tar)) && !set) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass set = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set('activeHandle', n);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }, this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set('activeHandle', this.get(NODE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return r;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _setStartPosition
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Sets the current position of the Element and calculates the offset
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Array} xy The XY coords to set the position to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _setStartPosition: function(xy) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.startXY = xy;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.nodeXY = this.lastXY = this.realXY = this.get(NODE).getXY();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('offsetNode')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.deltaXY = [(this.startXY[0] - this.nodeXY[0]), (this.startXY[1] - this.nodeXY[1])];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.deltaXY = [0, 0];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _timeoutCheck
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The method passed to setTimeout to determine if the clickTimeThreshold was met.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _timeoutCheck: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get('lock') && !this._dragThreshMet && this._ev_md) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._fromTimeout = this._dragThreshMet = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.start();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._alignNode([this._ev_md.pageX, this._ev_md.pageY], true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method removeHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Remove a Selector added by addHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} str The selector for the handle to be removed.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass removeHandle: function(str) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var key = str;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (str instanceof Y.Node || str instanceof Y.NodeList) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass key = str._yuid;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._handles[key]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete this._handles[key];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_REMOVE_HANDLE, { handle: str });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method addHandle
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Add a handle to a drag element. Drag only initiates when a mousedown happens on this element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} str The selector to test for a valid handle. Must be a child of the element.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass addHandle: function(str) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this._handles) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles = {};
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var key = str;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (str instanceof Y.Node || str instanceof Y.NodeList) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass key = str._yuid;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles[key] = str;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_ADD_HANDLE, { handle: str });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method removeInvalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Remove an invalid handle added by addInvalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} str The invalid handle to remove from the internal list.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass removeInvalid: function(str) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._invalids[str]) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._invalids[str] = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delete this._invalids[str];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_REMOVE_INVALID, { handle: str });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method addInvalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Add a selector string to test the handle against. If the test passes the drag operation will not continue.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {String} str The selector to test against to determine if this is an invalid drag handle.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass addInvalid: function(str) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (Y.Lang.isString(str)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._invalids[str] = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_ADD_INVALID, { handle: str });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method initializer
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Internal init handler
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass initializer: function(cfg) {
9eb94626cedb24875edf2f541cdceb32c6a96046Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(NODE).dd = this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get(NODE).get('id')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var id = Y.stamp(this.get(NODE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(NODE).set('id', id);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.actXY = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._invalids = Y.clone(this._invalidsDefault, true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._createEvents();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get(DRAG_NODE)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set(DRAG_NODE, this.get(NODE));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Fix for #2528096
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Don't prep the DD instance until all plugins are loaded.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.on('initializedChange', Y.bind(this._prep, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Shouldn't have to do this..
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set('groups', this.get('groups'));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _prep
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Attach event listners and add classname
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _prep: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._dragThreshMet = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var node = this.get(NODE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.addClass(DDM.CSS_PREFIX + '-draggable');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.on(Drag.START_EVENT, Y.bind(this._handleMouseDownEvent, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.on('mouseup', Y.bind(this._handleMouseUp, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.on('dragstart', Y.bind(this._fixDragStart, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _unprep
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Detach event listeners and remove classname
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _unprep: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var node = this.get(NODE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.removeClass(DDM.CSS_PREFIX + '-draggable');
9eb94626cedb24875edf2f541cdceb32c6a96046Dav Glass node.detachAll('mouseup');
9eb94626cedb24875edf2f541cdceb32c6a96046Dav Glass node.detachAll('dragstart');
9eb94626cedb24875edf2f541cdceb32c6a96046Dav Glass node.detachAll(Drag.START_EVENT);
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.mouseXY = [];
346b04e61cfa391532ea139b334fc5cc81d1ba39Dav Glass this.deltaXY = [0,0];
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.startXY = [];
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.nodeXY = [];
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.lastXY = [];
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.actXY = [];
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass this.realXY = [];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method start
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Starts the drag operation
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass start: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get('lock') && !this.get(DRAGGING)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var node = this.get(NODE), ow, oh, xy;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._startTime = (new Date()).getTime();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._start();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node.addClass(DDM.CSS_PREFIX + '-dragging');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_START, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageX: this.nodeXY[0],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageY: this.nodeXY[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass startTime: this._startTime
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass node = this.get(DRAG_NODE);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass xy = this.nodeXY;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass ow = node.get(OFFSET_WIDTH);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass oh = node.get(OFFSET_HEIGHT);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('startCentered')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._setStartPosition([xy[0] + (ow / 2), xy[1] + (oh / 2)]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.region = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass '0': xy[0],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass '1': xy[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass area: 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass top: xy[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass right: xy[0] + ow,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bottom: xy[1] + oh,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass left: xy[0]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set(DRAGGING, true);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method end
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Ends the drag operation
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass end: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._endTime = (new Date()).getTime();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._clickTimeout) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._clickTimeout.cancel();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._dragThreshMet = this._fromTimeout = false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this.get('lock') && this.get(DRAGGING)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_END, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageX: this.lastXY[0],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageY: this.lastXY[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass startTime: this._startTime,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass endTime: this._endTime
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(NODE).removeClass(DDM.CSS_PREFIX + '-dragging');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.set(DRAGGING, false);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.deltaXY = [0, 0];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defEndFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handler for fixing the selection in IE
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defEndFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._fixIEMouseUp();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._ev_md = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _prevEndFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Handler for preventing the drag:end event. It will reset the node back to it's start position
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _prevEndFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._fixIEMouseUp();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Bug #1852577
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(DRAG_NODE).setXY(this.nodeXY);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._ev_md = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.region = null;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _align
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Calculates the offsets and set's the XY that the element will move to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Array} xy The xy coords to align with.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _align: function(xy) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_ALIGN, {pageX: xy[0], pageY: xy[1] });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defAlignFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Calculates the offsets and set's the XY that the element will move to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} e The drag:align event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defAlignFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.actXY = [e.pageX - this.deltaXY[0], e.pageY - this.deltaXY[1]];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _alignNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This method performs the alignment before the element move.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Array} eXY The XY to move the element to, usually comes from the mousemove DOM event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _alignNode: function(eXY) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._align(eXY);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._moveNode();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _moveNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description This method performs the actual element move.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _moveNode: function(scroll) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //if (!this.get(DRAGGING)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass // return;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var diffXY = [], diffXY2 = [], startXY = this.nodeXY, xy = this.actXY;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass diffXY[0] = (xy[0] - this.lastXY[0]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass diffXY[1] = (xy[1] - this.lastXY[1]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass diffXY2[0] = (xy[0] - this.nodeXY[0]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass diffXY2[1] = (xy[1] - this.nodeXY[1]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.region = {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass '0': xy[0],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass '1': xy[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass area: 0,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass top: xy[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass right: xy[0] + this.get(DRAG_NODE).get(OFFSET_WIDTH),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass bottom: xy[1] + this.get(DRAG_NODE).get(OFFSET_HEIGHT),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass left: xy[0]
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass };
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.fire(EV_DRAG, {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageX: xy[0],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass pageY: xy[1],
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass scroll: scroll,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass info: {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass start: startXY,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass xy: xy,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass delta: diffXY,
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass offset: diffXY2
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.lastXY = xy;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _defDragFn
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Default function for drag:drag. Fired from _moveNode.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} ev The drag:drag event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _defDragFn: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('move')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (e.scroll) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.scroll.node.set('scrollTop', e.scroll.top);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass e.scroll.node.set('scrollLeft', e.scroll.left);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get(DRAG_NODE).setXY([e.pageX, e.pageY]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.realXY = [e.pageX, e.pageY];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _move
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Fired from DragDropMgr (DDM) on mousemove.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {EventFacade} ev The mousemove DOM event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _move: function(ev) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get('lock')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return false;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.mouseXY = [ev.pageX, ev.pageY];
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (!this._dragThreshMet) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var diffX = Math.abs(this.startXY[0] - ev.pageX),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass diffY = Math.abs(this.startXY[1] - ev.pageY);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (diffX > this.get('clickPixelThresh') || diffY > this.get('clickPixelThresh')) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._dragThreshMet = true;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.start();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._alignNode([ev.pageX, ev.pageY]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass } else {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this._clickTimeout) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._clickTimeout.cancel();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._alignNode([ev.pageX, ev.pageY]);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method stopDrag
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Method will forcefully stop a drag operation. For example calling this from inside an ESC keypress handler will stop this drag.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass stopDrag: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.get(DRAGGING)) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._end();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass },
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass /**
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @private
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method destructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Lifecycle destructor, unreg the drag from the DDM and remove listeners
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass */
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._unprep();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.target) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.target.destroy();
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass DDM._unregDrag(this);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass }
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass });
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.namespace('DD');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Y.DD.Drag = Drag;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass}, '@VERSION@' ,{skinnable:false, requires:['dd-ddm-base']});