src/cm/media/js/lib/yui/yui3.0.0/build/dd/dd-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('dd-ddm-base', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
     * Provides the base Drag Drop Manger required for making a Node draggable.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
     * @submodule dd-ddm-base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
     */     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
     /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
     * Provides the base Drag Drop Manger required for making a Node draggable.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
     * @class DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
    var DDMBase = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
        DDMBase.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    DDMBase.NAME = 'ddm';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
    DDMBase.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        * @attribute dragCursor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        * @description The cursor to apply when dragging, if shimmed the shim will get the cursor.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        dragCursor: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
            value: 'move'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        * @attribute clickPixelThresh
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        * @description The number of pixels to move to start a drag operation, default is 3.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        clickPixelThresh: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            value: 3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        * @attribute clickTimeThresh
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        * @description The number of milliseconds a mousedown has to pass to start a drag operation, default is 1000.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        clickTimeThresh: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            value: 1000
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        * @attribute dragMode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        * @description This attribute only works if the dd-drop module is active. It will set the dragMode (point, intersect, strict) of all future Drag instances. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        dragMode: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
            value: 'point',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
            setter: function(mode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
                this._setDragMode(mode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
                return mode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
            }           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    Y.extend(DDMBase, Y.Base, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        * @property _active
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        * @description flag set when we activate our first drag, so DDM can start listening for events.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        _active: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
        * @method _setDragMode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
        * @description Handler for dragMode attribute setter.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
        * @param String/Number The Number value or the String for the DragMode to default all future drag instances to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        * @return Number The Mode to be set
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        _setDragMode: function(mode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
            if (mode === null) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
                mode = Y.DD.DDM.get('dragMode');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
            switch (mode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                case 1:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                case 'intersect':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                    return 1;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
                case 2:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
                case 'strict':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
                    return 2;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
                case 0:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                case 'point':
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                    return 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
            return 0;       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        * @property CSS_PREFIX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
        * @description The PREFIX to attach to all DD CSS class names
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        CSS_PREFIX: 'yui-dd',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
        _activateTargets: function() {},        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
        * @property _drags
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        * @description Holder for all registered drag elements.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        _drags: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
        * @property activeDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
        * @description A reference to the currently active draggable object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        * @type {Drag}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        activeDrag: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        * @method _regDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
        * @description Adds a reference to the drag object to the DDM._drags array, called in the constructor of Drag.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        * @param {Drag} d The Drag object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
        _regDrag: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
            if (this.getDrag(d.get('node'))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
            if (!this._active) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
                this._setupListeners();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
            this._drags.push(d);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
            return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        * @method _unregDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
        * @description Remove this drag object from the DDM._drags array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        * @param {Drag} d The drag object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
        _unregDrag: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
            var tmp = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
            Y.each(this._drags, function(n, i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
                if (n !== d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
                    tmp[tmp.length] = n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
            this._drags = tmp;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
        * @method _setupListeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        * @description Add the document listeners.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        _setupListeners: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
            this._active = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
            var doc = Y.get(document);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
            doc.on('mousemove', Y.bind(this._move, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            //Y.Event.nativeAdd(document, 'mousemove', Y.bind(this._move, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
            doc.on('mouseup', Y.bind(this._end, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
        * @method _start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
        * @description Internal method used by Drag to signal the start of a drag operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
        _start: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
            this.fire('ddm:start');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
            this._startDrag();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        * @method _startDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        * @description Factory method to be overwritten by other DDM's
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
        * @param {Number} x The x position of the drag element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        * @param {Number} y The y position of the drag element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        * @param {Number} w The width of the drag element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
        * @param {Number} h The height of the drag element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
        _startDrag: function() {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
        * @method _endDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
        * @description Factory method to be overwritten by other DDM's
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        _endDrag: function() {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
        _dropMove: function() {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        * @method _end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
        * @description Internal method used by Drag to signal the end of a drag operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
        _end: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
            if (this.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
                this._endDrag();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
                this.fire('ddm:end');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
                this.activeDrag.end.call(this.activeDrag);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
                this.activeDrag = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
        * @method stopDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
        * @description Method will forcefully stop a drag operation. For example calling this from inside an ESC keypress handler will stop this drag.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
        */       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
        stopDrag: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
            if (this.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
                this._end();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
        * @method _move
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
        * @description Internal listener for the mousemove DOM event to pass to the Drag's move method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
        * @param {Event.Facade} ev The Dom mousemove Event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
        _move: function(ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
            if (this.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
                this.activeDrag._move.call(this.activeDrag, ev);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
                this._dropMove();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
        * //TODO Private, rename??...
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
        * @method cssSizestoObject
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
        * @description Helper method to use to set the gutter from the attribute setter.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
        * @param {String} gutter CSS style string for gutter: '5 0' (sets top and bottom to 5px, left and right to 0px), '1 2 3 4' (top 1px, right 2px, bottom 3px, left 4px)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
        * @return {Object} The gutter Object Literal.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
        cssSizestoObject: function(gutter) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
            var x = gutter.split(' ');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
            switch (x.length) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
                case 1: x[1] = x[2] = x[3] = x[0]; break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
                case 2: x[2] = x[0]; x[3] = x[1]; break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
                case 3: x[3] = x[1]; break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
            return {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
                top   : parseInt(x[0],10),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
                right : parseInt(x[1],10),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
                bottom: parseInt(x[2],10),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
                left  : parseInt(x[3],10)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
        * @method getDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
        * @description Get a valid Drag instance back from a Node or a selector string, false otherwise
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
        * @param {String/Object} node The Node instance or Selector string to check for a valid Drag Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
        * @return {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
        getDrag: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
            var drag = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
                n = Y.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
            if (n instanceof Y.Node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                Y.each(this._drags, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
                    if (n.compareTo(v.get('node'))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                        drag = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
            return drag;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
    Y.namespace('DD');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
    Y.DD.DDM = new DDMBase();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
    * @event ddm:start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
    * @description Fires from the DDM before all drag events fire.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
    * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
    * @event ddm:end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
    * @description Fires from the DDM after the DDM finishes, before the drag end events.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
    * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
}, '3.0.0' ,{requires:['node', 'base'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
YUI.add('dd-ddm', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
     * Extends the dd-ddm-base Class to add support for the viewport shim to allow a draggable node to drag to be dragged over an iframe or any other node that traps mousemove events.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
     * It is also required to have Drop Targets enabled, as the viewport shim will contain the shims for the Drop Targets.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
     * @submodule dd-ddm
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
     * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
    Y.mix(Y.DD.DDM, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
        * @property _pg
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
        * @description The shim placed over the screen to track the mousemove event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
        * @type {Node}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
        _pg: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
        * @property _debugShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
        * @description Set this to true to set the shims opacity to .5 for debugging it, default: false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
        _debugShim: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
        _activateTargets: function() {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
        _deactivateTargets: function() {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
        _startDrag: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            if (this.activeDrag.get('useShim')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
                this._pg_activate();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
                this._activateTargets();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
        _endDrag: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
            this._pg_deactivate();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
            this._deactivateTargets();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
        * @method _pg_deactivate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
        * @description Deactivates the shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
        _pg_deactivate: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
            this._pg.setStyle('display', 'none');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
        * @method _pg_activate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
        * @description Activates the shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
        _pg_activate: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
            var ah = this.activeDrag.get('activeHandle'), cur = 'auto';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
            if (ah) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
                cur = ah.getStyle('cursor');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
            if (cur == 'auto') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
                cur = this.get('dragCursor');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
            this._pg_size();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
            this._pg.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
                top: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
                left: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
                display: 'block',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
                opacity: ((this._debugShim) ? '.5' : '0'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
                cursor: cur
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
        * @method _pg_size
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
        * @description Sizes the shim on: activatation, window:scroll, window:resize
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
        _pg_size: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
            if (this.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                var b = Y.get('body'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
                h = b.get('docHeight'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
                w = b.get('docWidth');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
                this._pg.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
                    height: h + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                    width: w + 'px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
        * @method _createPG
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
        * @description Creates the shim and adds it's listeners to it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
        _createPG: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
            var pg = Y.Node.create('<div></div>'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
            bd = Y.get('body');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
            pg.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
                top: '0',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
                left: '0',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
                position: 'absolute',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
                zIndex: '9999',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
                overflow: 'hidden',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
                backgroundColor: 'red',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
                display: 'none',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
                height: '5px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
                width: '5px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
            pg.set('id', Y.stamp(pg));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
            pg.addClass('yui-dd-shim');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
            if (bd.get('firstChild')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
                bd.insertBefore(pg, bd.get('firstChild'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
                bd.appendChild(pg);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
            this._pg = pg;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
            this._pg.on('mouseup', Y.bind(this._end, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
            this._pg.on('mousemove', Y.bind(this._move, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
            var win = Y.get(window);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
            Y.on('window:resize', Y.bind(this._pg_size, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
            win.on('scroll', Y.bind(this._pg_size, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   408
        }   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   409
    }, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   410
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   411
    Y.on('domready', Y.bind(Y.DD.DDM._createPG, Y.DD.DDM));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   412
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   413
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   414
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   415
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   416
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   417
}, '3.0.0' ,{requires:['dd-ddm-base', 'event-resize'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   418
YUI.add('dd-ddm-drop', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   419
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   420
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   421
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   422
     * Extends the dd-ddm Class to add support for the placement of Drop Target shims inside the viewport shim. It also handles all Drop Target related events and interactions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   423
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   424
     * @submodule dd-ddm-drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   425
     * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   426
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   427
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   428
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   429
    //TODO CSS class name for the bestMatch..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   430
    Y.mix(Y.DD.DDM, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   431
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   432
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   433
        * @property _noShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   434
        * @description This flag turns off the use of the mouseover/mouseout shim. It should not be used unless you know what you are doing.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   435
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   436
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   437
        _noShim: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   438
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   439
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   440
        * @property _activeShims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   441
        * @description Placeholder for all active shims on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   442
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   443
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   444
        _activeShims: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   445
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   446
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   447
        * @method _hasActiveShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   448
        * @description This method checks the _activeShims Object to see if there is a shim active.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   449
        * @return {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   450
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   451
        _hasActiveShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   452
            if (this._noShim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   453
                return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   454
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   455
            return this._activeShims.length;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   456
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   457
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   458
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   459
        * @method _addActiveShim 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   460
        * @description Adds a Drop Target to the list of active shims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   461
        * @param {Object} d The Drop instance to add to the list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   462
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   463
        _addActiveShim: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   464
            this._activeShims[this._activeShims.length] = d;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   465
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   466
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   467
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   468
        * @method _removeActiveShim 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   469
        * @description Removes a Drop Target to the list of active shims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   470
        * @param {Object} d The Drop instance to remove from the list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   471
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   472
        _removeActiveShim: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   473
            var s = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   474
            Y.each(this._activeShims, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   475
                if (v._yuid !== d._yuid) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   476
                    s[s.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   477
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   478
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   479
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   480
            this._activeShims = s;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   481
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   482
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   483
        * @method syncActiveShims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   484
        * @description This method will sync the position of the shims on the Drop Targets that are currently active.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   485
        * @param {Boolean} force Resize/sync all Targets.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   486
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   487
        syncActiveShims: function(force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   488
            Y.later(0, this, function(force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   489
                var drops = ((force) ? this.targets : this._lookup());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   490
                Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   491
                    v.sizeShim.call(v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   492
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   493
            }, force);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   494
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   495
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   496
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   497
        * @property mode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   498
        * @description The mode that the drag operations will run in 0 for Point, 1 for Intersect, 2 for Strict
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   499
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   500
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   501
        mode: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   502
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   503
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   504
        * @property POINT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   505
        * @description In point mode, a Drop is targeted by the cursor being over the Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   506
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   507
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   508
        POINT: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   509
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   510
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   511
        * @property INTERSECT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   512
        * @description In intersect mode, a Drop is targeted by "part" of the drag node being over the Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   513
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   514
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   515
        INTERSECT: 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   516
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   517
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   518
        * @property STRICT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   519
        * @description In strict mode, a Drop is targeted by the "entire" drag node being over the Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   520
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   521
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   522
        STRICT: 2,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   523
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   524
        * @property useHash
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   525
        * @description Should we only check targets that are in the viewport on drags (for performance), default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   526
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   527
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   528
        useHash: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   529
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   530
        * @property activeDrop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   531
        * @description A reference to the active Drop Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   532
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   533
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   534
        activeDrop: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   535
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   536
        * @property validDrops
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   537
        * @description An array of the valid Drop Targets for this interaction.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   538
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   539
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   540
        //TODO Change array/object literals to be in sync..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   541
        validDrops: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   542
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   543
        * @property otherDrops
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   544
        * @description An object literal of Other Drop Targets that we encountered during this interaction (in the case of overlapping Drop Targets)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   545
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   546
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   547
        otherDrops: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   548
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   549
        * @property targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   550
        * @description All of the Targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   551
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   552
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   553
        targets: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   554
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   555
        * @private 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   556
        * @method _addValid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   557
        * @description Add a Drop Target to the list of Valid Targets. This list get's regenerated on each new drag operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   558
        * @param {Object} drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   559
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   560
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   561
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   562
        _addValid: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   563
            this.validDrops[this.validDrops.length] = drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   564
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   565
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   566
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   567
        * @private 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   568
        * @method _removeValid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   569
        * @description Removes a Drop Target from the list of Valid Targets. This list get's regenerated on each new drag operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   570
        * @param {Object} drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   571
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   572
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   573
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   574
        _removeValid: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   575
            var drops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   576
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   577
                if (v !== drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   578
                    drops[drops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   579
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   580
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   581
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   582
            this.validDrops = drops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   583
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   584
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   585
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   586
        * @method isOverTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   587
        * @description Check to see if the Drag element is over the target, method varies on current mode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   588
        * @param {Object} drop The drop to check against
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   589
        * @return {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   590
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   591
        isOverTarget: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   592
            if (this.activeDrag && drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   593
                var xy = this.activeDrag.mouseXY, r, dMode = this.activeDrag.get('dragMode'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   594
                    aRegion;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   595
                if (xy && this.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   596
                    aRegion = this.activeDrag.region;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   597
                    if (dMode == this.STRICT) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   598
                        return this.activeDrag.get('dragNode').inRegion(drop.region, true, aRegion);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   599
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   600
                        if (drop && drop.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   601
                            if ((dMode == this.INTERSECT) && this._noShim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   602
                                r = ((aRegion) ? aRegion : this.activeDrag.get('node'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   603
                                return drop.get('node').intersect(r).inRegion;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   604
                            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   605
                                return drop.shim.intersect({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   606
                                    top: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   607
                                    bottom: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   608
                                    left: xy[0], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   609
                                    right: xy[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   610
                                }, drop.region).inRegion;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   611
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   612
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   613
                            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   614
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   615
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   616
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   617
                    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   618
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   619
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   620
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   621
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   622
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   623
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   624
        * @method clearCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   625
        * @description Clears the cache data used for this interaction.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   626
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   627
        clearCache: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   628
            this.validDrops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   629
            this.otherDrops = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   630
            this._activeShims = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   631
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   632
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   633
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   634
        * @method _activateTargets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   635
        * @description Clear the cache and activate the shims of all the targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   636
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   637
        _activateTargets: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   638
            this.clearCache();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   639
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   640
                v._activateShim.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   641
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   642
            this._handleTargetOver();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   643
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   644
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   645
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   646
        * @method getBestMatch
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   647
        * @description This method will gather the area for all potential targets and see which has the hightest covered area and return it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   648
        * @param {Array} drops An Array of drops to scan for the best match.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   649
        * @param {Boolean} all If present, it returns an Array. First item is best match, second is an Array of the other items in the original Array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   650
        * @return {Object or Array} 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   651
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   652
        getBestMatch: function(drops, all) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   653
            var biggest = null, area = 0, out;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   654
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   655
            Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   656
                var inter = this.activeDrag.get('dragNode').intersect(v.get('node'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   657
                v.region.area = inter.area;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   658
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   659
                if (inter.inRegion) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   660
                    if (inter.area > area) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   661
                        area = inter.area;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   662
                        biggest = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   663
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   664
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   665
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   666
            if (all) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   667
                out = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   668
                //TODO Sort the others in numeric order by area covered..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   669
                Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   670
                    if (v !== biggest) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   671
                        out[out.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   672
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   673
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   674
                return [biggest, out];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   675
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   676
                return biggest;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   677
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   678
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   679
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   680
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   681
        * @method _deactivateTargets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   682
        * @description This method fires the drop:hit, drag:drophit, drag:dropmiss methods and deactivates the shims..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   683
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   684
        _deactivateTargets: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   685
            var other = [], tmp,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   686
                activeDrag = this.activeDrag,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   687
                activeDrop = this.activeDrop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   688
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   689
            //TODO why is this check so hard??
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   690
            if (activeDrag && activeDrop && this.otherDrops[activeDrop]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   691
                if (!activeDrag.get('dragMode')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   692
                    //TODO otherDrops -- private..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   693
                    other = this.otherDrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   694
                    delete other[activeDrop];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   695
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   696
                    tmp = this.getBestMatch(this.otherDrops, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   697
                    activeDrop = tmp[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   698
                    other = tmp[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   699
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   700
                activeDrag.get('node').removeClass(this.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   701
                if (activeDrop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   702
                    activeDrop.fire('drop:hit', { drag: activeDrag, drop: activeDrop, others: other });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   703
                    activeDrag.fire('drag:drophit', { drag: activeDrag,  drop: activeDrop, others: other });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   704
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   705
            } else if (activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   706
                activeDrag.get('node').removeClass(this.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   707
                activeDrag.fire('drag:dropmiss', { pageX: activeDrag.lastXY[0], pageY: activeDrag.lastXY[1] });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   708
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   709
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   710
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   711
            this.activeDrop = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   712
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   713
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   714
                v._deactivateShim.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   715
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   716
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   717
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   718
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   719
        * @method _dropMove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   720
        * @description This method is called when the move method is called on the Drag Object.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   721
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   722
        _dropMove: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   723
            if (this._hasActiveShim()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   724
                this._handleTargetOver();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   725
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   726
                Y.each(this.otherDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   727
                    v._handleOut.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   728
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   729
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   730
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   731
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   732
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   733
        * @method _lookup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   734
        * @description Filters the list of Drops down to those in the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   735
        * @return {Array} The valid Drop Targets that are in the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   736
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   737
        _lookup: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   738
            if (!this.useHash || this._noShim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   739
                return this.validDrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   740
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   741
            var drops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   742
            //Only scan drop shims that are in the Viewport
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   743
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   744
                if (v.shim && v.shim.inViewportRegion(false, v.region)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   745
                    drops[drops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   746
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   747
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   748
            return drops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   749
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   750
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   751
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   752
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   753
        * @method _handleTargetOver
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   754
        * @description This method execs _handleTargetOver on all valid Drop Targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   755
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   756
        _handleTargetOver: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   757
            var drops = this._lookup();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   758
            Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   759
                v._handleTargetOver.call(v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   760
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   761
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   762
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   763
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   764
        * @method _regTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   765
        * @description Add the passed in Target to the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   766
        * @param {Object} t The Target to add to the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   767
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   768
        _regTarget: function(t) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   769
            this.targets[this.targets.length] = t;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   770
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   771
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   772
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   773
        * @method _unregTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   774
        * @description Remove the passed in Target from the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   775
        * @param {Object} drop The Target to remove from the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   776
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   777
        _unregTarget: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   778
            var targets = [], vdrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   779
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   780
                if (v != drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   781
                    targets[targets.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   782
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   783
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   784
            this.targets = targets;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   785
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   786
            vdrops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   787
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   788
                if (v !== drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   789
                    vdrops[vdrops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   790
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   791
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   792
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   793
            this.validDrops = vdrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   794
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   795
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   796
        * @method getDrop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   797
        * @description Get a valid Drop instance back from a Node or a selector string, false otherwise
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   798
        * @param {String/Object} node The Node instance or Selector string to check for a valid Drop Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   799
        * @return {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   800
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   801
        getDrop: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   802
            var drop = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   803
                n = Y.Node.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   804
            if (n instanceof Y.Node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   805
                Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   806
                    if (n.compareTo(v.get('node'))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   807
                        drop = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   808
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   809
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   810
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   811
            return drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   812
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   813
    }, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   814
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   815
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   816
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   817
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   818
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   819
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   820
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   821
}, '3.0.0' ,{requires:['dd-ddm'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   822
YUI.add('dd-drag', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   823
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   824
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   825
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   826
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   827
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   828
     * @submodule dd-drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   829
     */     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   830
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   831
     * This class provides the ability to drag a Node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   832
     * @class Drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   833
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   834
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   835
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   836
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   837
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   838
    var DDM = Y.DD.DDM,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   839
        NODE = 'node',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   840
        DRAGGING = 'dragging',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   841
        DRAG_NODE = 'dragNode',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   842
        OFFSET_HEIGHT = 'offsetHeight',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   843
        OFFSET_WIDTH = 'offsetWidth',        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   844
        MOUSE_UP = 'mouseup',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   845
        MOUSE_DOWN = 'mousedown',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   846
        DRAG_START = 'dragstart',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   847
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   848
        * @event drag:mouseDown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   849
        * @description Handles the mousedown DOM event, checks to see if you have a valid handle then starts the drag timers.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   850
        * @preventable _defMouseDownFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   851
        * @param {Event.Facade} ev The mousedown event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   852
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   853
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   854
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   855
        EV_MOUSE_DOWN = 'drag:mouseDown',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   856
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   857
        * @event drag:afterMouseDown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   858
        * @description Fires after the mousedown event has been cleared.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   859
        * @param {Event.Facade} ev The mousedown event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   860
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   861
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   862
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   863
        EV_AFTER_MOUSE_DOWN = 'drag:afterMouseDown',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   864
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   865
        * @event drag:removeHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   866
        * @description Fires after a handle is removed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   867
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   868
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   869
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   870
        EV_REMOVE_HANDLE = 'drag:removeHandle',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   871
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   872
        * @event drag:addHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   873
        * @description Fires after a handle is added.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   874
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   875
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   876
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   877
        EV_ADD_HANDLE = 'drag:addHandle',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   878
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   879
        * @event drag:removeInvalid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   880
        * @description Fires after an invalid selector is removed.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   881
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   882
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   883
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   884
        EV_REMOVE_INVALID = 'drag:removeInvalid',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   885
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   886
        * @event drag:addInvalid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   887
        * @description Fires after an invalid selector is added.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   888
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   889
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   890
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   891
        EV_ADD_INVALID = 'drag:addInvalid',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   892
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   893
        * @event drag:start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   894
        * @description Fires at the start of a drag operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   895
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   896
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   897
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   898
        EV_START = 'drag:start',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   899
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   900
        * @event drag:end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   901
        * @description Fires at the end of a drag operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   902
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   903
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   904
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   905
        EV_END = 'drag:end',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   906
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   907
        * @event drag:drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   908
        * @description Fires every mousemove during a drag operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   909
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   910
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   911
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   912
        EV_DRAG = 'drag:drag',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   913
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   914
        * @event drag:align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   915
        * @preventable _defAlignFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   916
        * @description Fires when this node is aligned.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   917
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   918
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   919
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   920
        EV_ALIGN = 'drag:align',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   921
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   922
        * @event drag:over
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   923
        * @description Fires when this node is over a Drop Target. (Fired from dd-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   924
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   925
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   926
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   927
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   928
        * @event drag:enter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   929
        * @description Fires when this node enters a Drop Target. (Fired from dd-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   930
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   931
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   932
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   933
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   934
        * @event drag:exit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   935
        * @description Fires when this node exits a Drop Target. (Fired from dd-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   936
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   937
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   938
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   939
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   940
        * @event drag:drophit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   941
        * @description Fires when this node is dropped on a valid Drop Target. (Fired from dd-ddm-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   942
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   943
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   944
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   945
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   946
        * @event drag:dropmiss
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   947
        * @description Fires when this node is dropped on an invalid Drop Target. (Fired from dd-ddm-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   948
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   949
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   950
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   951
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   952
    Drag = function(o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   953
        this._lazyAddAttrs = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   954
        Drag.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   955
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   956
        var valid = DDM._regDrag(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   957
        if (!valid) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   958
            Y.error('Failed to register node, already in use: ' + o.node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   959
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   960
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   961
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   962
    Drag.NAME = 'drag';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   963
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   964
    Drag.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   965
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   966
        * @attribute node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   967
        * @description Y.Node instanace to use as the element to initiate a drag operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   968
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   969
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   970
        node: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   971
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   972
                var n = Y.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   973
                if (!n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   974
                    Y.error('DD.Drag: Invalid Node Given: ' + node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   975
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   976
                    n = n.item(0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   977
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   978
                return n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   979
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   980
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   981
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   982
        * @attribute dragNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   983
        * @description Y.Node instanace to use as the draggable element, defaults to node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   984
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   985
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   986
        dragNode: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   987
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   988
                var n = Y.Node.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   989
                if (!n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   990
                    Y.error('DD.Drag: Invalid dragNode Given: ' + node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   991
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   992
                return n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   993
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   994
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   995
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   996
        * @attribute offsetNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   997
        * @description Offset the drag element by the difference in cursor position: default true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   998
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   999
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1000
        offsetNode: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1001
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1002
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1003
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1004
        * @attribute clickPixelThresh
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1005
        * @description The number of pixels to move to start a drag operation, default is 3.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1006
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1007
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1008
        clickPixelThresh: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1009
            value: DDM.get('clickPixelThresh')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1010
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1011
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1012
        * @attribute clickTimeThresh
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1013
        * @description The number of milliseconds a mousedown has to pass to start a drag operation, default is 1000.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1014
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1015
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1016
        clickTimeThresh: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1017
            value: DDM.get('clickTimeThresh')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1018
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1019
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1020
        * @attribute lock
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1021
        * @description Set to lock this drag element so that it can't be dragged: default false.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1022
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1023
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1024
        lock: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1025
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1026
            setter: function(lock) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1027
                if (lock) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1028
                    this.get(NODE).addClass(DDM.CSS_PREFIX + '-locked');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1029
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1030
                    this.get(NODE).removeClass(DDM.CSS_PREFIX + '-locked');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1031
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1032
                return lock;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1033
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1034
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1035
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1036
        * @attribute data
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1037
        * @description A payload holder to store arbitrary data about this drag object, can be used to store any value.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1038
        * @type Mixed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1039
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1040
        data: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1041
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1042
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1043
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1044
        * @attribute move
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1045
        * @description If this is false, the drag element will not move with the cursor: default true. Can be used to "resize" the element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1046
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1047
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1048
        move: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1049
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1050
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1051
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1052
        * @attribute useShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1053
        * @description Use the protective shim on all drag operations: default true. Only works with dd-ddm, not dd-ddm-base.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1054
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1055
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1056
        useShim: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1057
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1058
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1059
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1060
        * @attribute activeHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1061
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1062
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1063
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1064
        activeHandle: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1065
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1066
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1067
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1068
        * @attribute primaryButtonOnly
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1069
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1070
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1071
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1072
        primaryButtonOnly: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1073
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1074
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1075
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1076
        * @attribute dragging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1077
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1078
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1079
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1080
        dragging: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1081
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1082
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1083
        parent: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1084
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1085
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1086
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1087
        * @attribute target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1088
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1089
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1090
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1091
        target: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1092
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1093
            setter: function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1094
                this._handleTarget(config);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1095
                return config;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1096
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1097
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1098
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1099
        * @attribute dragMode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1100
        * @description This attribute only works if the dd-drop module is active. It will set the dragMode (point, intersect, strict) of this Drag instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1101
        * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1102
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1103
        dragMode: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1104
            value: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1105
            setter: function(mode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1106
                return DDM._setDragMode(mode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1107
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1108
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1109
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1110
        * @attribute groups
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1111
        * @description Array of groups to add this drag into.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1112
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1113
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1114
        groups: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1115
            value: ['default'],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1116
            getter: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1117
                if (!this._groups) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1118
                    this._groups = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1119
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1120
                var ret = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1121
                Y.each(this._groups, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1122
                    ret[ret.length] = k;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1123
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1124
                return ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1125
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1126
            setter: function(g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1127
                this._groups = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1128
                Y.each(g, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1129
                    this._groups[v] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1130
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1131
                return g;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1132
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1133
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1134
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1135
        * @attribute handles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1136
        * @description Array of valid handles to add. Adding something here will set all handles, even if previously added with addHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1137
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1138
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1139
        handles: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1140
            value: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1141
            setter: function(g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1142
                if (g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1143
                    this._handles = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1144
                    Y.each(g, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1145
                        this._handles[v] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1146
                    }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1147
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1148
                    this._handles = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1149
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1150
                return g;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1151
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1152
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1153
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1154
        * @attribute bubbles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1155
        * @description Controls the default bubble parent for this Drag instance. Default: Y.DD.DDM. Set to false to disable bubbling.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1156
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1157
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1158
        bubbles: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1159
            writeOnce: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1160
            value: Y.DD.DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1161
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1162
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1164
    Y.extend(Drag, Y.Base, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1165
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1166
        * @method addToGroup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1167
        * @description Add this Drag instance to a group, this should be used for on-the-fly group additions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1168
        * @param {String} g The group to add this Drag Instance to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1169
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1170
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1171
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1172
        addToGroup: function(g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1173
            this._groups[g] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1174
            DDM._activateTargets();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1175
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1176
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1177
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1178
        * @method removeFromGroup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1179
        * @description Remove this Drag instance from a group, this should be used for on-the-fly group removals.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1180
        * @param {String} g The group to remove this Drag Instance from.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1181
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1182
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1183
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1184
        removeFromGroup: function(g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1185
            delete this._groups[g];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1186
            DDM._activateTargets();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1187
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1188
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1189
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1190
        * @property target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1191
        * @description This will be a reference to the Drop instance associated with this drag if the target: true config attribute is set..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1192
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1193
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1194
        target: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1195
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1196
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1197
        * @method _handleTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1198
        * @description Attribute handler for the target config attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1199
        * @param {Boolean/Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1200
        * @return {Boolean/Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1201
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1202
        _handleTarget: function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1203
            if (Y.DD.Drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1204
                if (config === false) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1205
                    if (this.target) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1206
                        DDM._unregTarget(this.target);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1207
                        this.target = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1208
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1209
                    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1210
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1211
                    if (!Y.Lang.isObject(config)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1212
                        config = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1213
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1214
                    config.bubbles = ('bubbles' in config) ? config.bubbles : this.get('bubbles');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1215
                    config.node = this.get(NODE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1216
                    config.groups = config.groups || this.get('groups');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1217
                    this.target = new Y.DD.Drop(config);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1218
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1219
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1220
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1221
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1222
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1223
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1224
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1225
        * @property _groups
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1226
        * @description Storage Array for the groups this drag belongs to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1227
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1228
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1229
        _groups: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1230
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1231
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1232
        * @method _createEvents
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1233
        * @description This method creates all the events for this Event Target and publishes them so we get Event Bubbling.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1234
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1235
        _createEvents: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1236
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1237
            this.publish(EV_MOUSE_DOWN, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1238
                defaultFn: this._defMouseDownFn,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1239
                queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1240
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1241
                bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1242
                prefix: 'drag'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1243
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1244
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1245
            this.publish(EV_ALIGN, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1246
                defaultFn: this._defAlignFn,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1247
                queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1248
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1249
                bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1250
                prefix: 'drag'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1251
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1252
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1253
            this.publish(EV_DRAG, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1254
                defaultFn: this._defDragFn,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1255
                queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1256
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1257
                bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1258
                prefix: 'drag'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1259
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1260
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1261
            this.publish(EV_END, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1262
                preventedFn: this._prevEndFn,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1263
                queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1264
                emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1265
                bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1266
                prefix: 'drag'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1267
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1268
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1269
            var ev = [
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1270
                EV_AFTER_MOUSE_DOWN,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1271
                EV_REMOVE_HANDLE,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1272
                EV_ADD_HANDLE,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1273
                EV_REMOVE_INVALID,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1274
                EV_ADD_INVALID,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1275
                EV_START,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1276
                'drag:drophit',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1277
                'drag:dropmiss',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1278
                'drag:over',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1279
                'drag:enter',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1280
                'drag:exit'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1281
            ];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1282
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1283
            Y.each(ev, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1284
                this.publish(v, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1285
                    type: v,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1286
                    emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1287
                    bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1288
                    preventable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1289
                    queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1290
                    prefix: 'drag'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1291
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1292
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1293
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1294
            if (this.get('bubbles')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1295
                this.addTarget(this.get('bubbles'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1296
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1297
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1298
           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1299
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1300
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1301
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1302
        * @property _ev_md
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1303
        * @description A private reference to the mousedown DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1304
        * @type {Event.Facade}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1305
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1306
        _ev_md: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1307
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1308
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1309
        * @property _startTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1310
        * @description The getTime of the mousedown event. Not used, just here in case someone wants/needs to use it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1311
        * @type Date
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1312
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1313
        _startTime: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1314
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1315
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1316
        * @property _endTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1317
        * @description The getTime of the mouseup event. Not used, just here in case someone wants/needs to use it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1318
        * @type Date
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1319
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1320
        _endTime: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1321
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1322
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1323
        * @property _handles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1324
        * @description A private hash of the valid drag handles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1325
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1326
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1327
        _handles: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1328
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1329
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1330
        * @property _invalids
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1331
        * @description A private hash of the invalid selector strings
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1332
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1333
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1334
        _invalids: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1335
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1336
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1337
        * @property _invalidsDefault
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1338
        * @description A private hash of the default invalid selector strings: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1339
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1340
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1341
        _invalidsDefault: {'textarea': true, 'input': true, 'a': true, 'button': true, 'select': true },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1342
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1343
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1344
        * @property _dragThreshMet
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1345
        * @description Private flag to see if the drag threshhold was met
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1346
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1347
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1348
        _dragThreshMet: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1349
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1350
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1351
        * @property _fromTimeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1352
        * @description Flag to determine if the drag operation came from a timeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1353
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1354
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1355
        _fromTimeout: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1356
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1357
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1358
        * @property _clickTimeout
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1359
        * @description Holder for the setTimeout call
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1360
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1361
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1362
        _clickTimeout: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1363
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1364
        * @property deltaXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1365
        * @description The offset of the mouse position to the element's position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1366
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1367
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1368
        deltaXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1369
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1370
        * @property startXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1371
        * @description The initial mouse position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1372
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1373
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1374
        startXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1375
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1376
        * @property nodeXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1377
        * @description The initial element position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1378
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1379
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1380
        nodeXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1381
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1382
        * @property lastXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1383
        * @description The position of the element as it's moving (for offset calculations)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1384
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1385
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1386
        lastXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1387
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1388
        * @property actXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1389
        * @description The xy that the node will be set to. Changing this will alter the position as it's dragged.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1390
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1391
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1392
        actXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1393
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1394
        * @property realXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1395
        * @description The real xy position of the node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1396
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1397
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1398
        realXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1399
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1400
        * @property mouseXY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1401
        * @description The XY coords of the mousemove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1402
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1403
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1404
        mouseXY: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1405
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1406
        * @property region
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1407
        * @description A region object associated with this drag, used for checking regions while dragging.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1408
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1409
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1410
        region: null,       
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1411
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1412
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1413
        * @method _handleMouseUp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1414
        * @description Handler for the mouseup DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1415
        * @param {Event.Facade}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1416
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1417
        _handleMouseUp: function(ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1418
            this._fixIEMouseUp();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1419
            if (DDM.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1420
                DDM._end();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1421
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1422
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1423
        /** 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1424
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1425
        * @method _fixDragStart
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1426
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1427
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1428
        _fixDragStart: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1429
            e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1430
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1431
        /** 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1432
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1433
        * @method _ieSelectFix
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1434
        * @description The function we use as the onselectstart handler when we start a drag in Internet Explorer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1435
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1436
        _ieSelectFix: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1437
            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1438
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1439
        /** 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1440
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1441
        * @property _ieSelectBack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1442
        * @description We will hold a copy of the current "onselectstart" method on this property, and reset it after we are done using it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1443
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1444
        _ieSelectBack: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1445
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1446
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1447
        * @method _fixIEMouseDown
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1448
        * @description This method copies the onselectstart listner on the document to the _ieSelectFix property
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1449
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1450
        _fixIEMouseDown: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1451
            if (Y.UA.ie) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1452
                this._ieSelectBack = Y.config.doc.body.onselectstart;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1453
                Y.config.doc.body.onselectstart = this._ieSelectFix;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1454
            }           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1455
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1456
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1457
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1458
        * @method _fixIEMouseUp
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1459
        * @description This method copies the _ieSelectFix property back to the onselectstart listner on the document.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1460
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1461
        _fixIEMouseUp: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1462
            if (Y.UA.ie) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1463
                Y.config.doc.body.onselectstart = this._ieSelectBack;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1464
            }           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1465
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1466
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1467
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1468
        * @method _handleMouseDownEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1469
        * @description Handler for the mousedown DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1470
        * @param {Event.Facade}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1471
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1472
        _handleMouseDownEvent: function(ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1473
            this.fire(EV_MOUSE_DOWN, { ev: ev });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1474
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1475
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1476
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1477
        * @method _defMouseDownFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1478
        * @description Handler for the mousedown DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1479
        * @param {Event.Facade}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1480
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1481
        _defMouseDownFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1482
            var ev = e.ev;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1483
            this._dragThreshMet = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1484
            this._ev_md = ev;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1485
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1486
            if (this.get('primaryButtonOnly') && ev.button > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1487
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1488
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1489
            if (this.validClick(ev)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1490
                this._fixIEMouseDown();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1491
                ev.halt();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1492
                this._setStartPosition([ev.pageX, ev.pageY]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1493
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1494
                DDM.activeDrag = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1495
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1496
                this._clickTimeout = Y.later(this.get('clickTimeThresh'), this, this._timeoutCheck);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1497
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1498
            this.fire(EV_AFTER_MOUSE_DOWN, { ev: ev });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1499
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1500
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1501
        * @method validClick
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1502
        * @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.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1503
        * @param {Event.Facade}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1504
        * @return {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1505
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1506
        validClick: function(ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1507
            var r = false, n = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1508
            tar = ev.target,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1509
            hTest = null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1510
            els = null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1511
            set = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1512
            if (this._handles) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1513
                Y.each(this._handles, function(i, n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1514
                    if (Y.Lang.isString(n)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1515
                        //Am I this or am I inside this
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1516
                        if (tar.test(n + ', ' + n + ' *') && !hTest) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1517
                            hTest = n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1518
                            r = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1519
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1520
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1521
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1522
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1523
                n = this.get(NODE)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1524
                if (n.contains(tar) || n.compareTo(tar)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1525
                    r = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1526
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1527
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1528
            if (r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1529
                if (this._invalids) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1530
                    Y.each(this._invalids, function(i, n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1531
                        if (Y.Lang.isString(n)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1532
                            //Am I this or am I inside this
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1533
                            if (tar.test(n + ', ' + n + ' *')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1534
                                r = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1535
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1536
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1537
                    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1538
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1539
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1540
            if (r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1541
                if (hTest) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1542
                    els = ev.currentTarget.queryAll(hTest);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1543
                    set = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1544
                    els.each(function(n, i) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1545
                        if ((n.contains(tar) || n.compareTo(tar)) && !set) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1546
                            set = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1547
                            this.set('activeHandle', n);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1548
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1549
                    }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1550
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1551
                    this.set('activeHandle', this.get(NODE));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1552
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1553
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1554
            return r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1555
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1556
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1557
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1558
        * @method _setStartPosition
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1559
        * @description Sets the current position of the Element and calculates the offset
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1560
        * @param {Array} xy The XY coords to set the position to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1561
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1562
        _setStartPosition: function(xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1563
            this.startXY = xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1564
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1565
            this.nodeXY = this.lastXY = this.realXY = this.get(NODE).getXY();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1566
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1567
            if (this.get('offsetNode')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1568
                this.deltaXY = [(this.startXY[0] - this.nodeXY[0]), (this.startXY[1] - this.nodeXY[1])];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1569
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1570
                this.deltaXY = [0, 0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1571
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1572
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1573
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1574
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1575
        * @method _timeoutCheck
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1576
        * @description The method passed to setTimeout to determine if the clickTimeThreshold was met.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1577
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1578
        _timeoutCheck: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1579
            if (!this.get('lock') && !this._dragThreshMet) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1580
                this._fromTimeout = this._dragThreshMet = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1581
                this.start();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1582
                this._alignNode([this._ev_md.pageX, this._ev_md.pageY], true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1583
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1584
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1585
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1586
        * @method removeHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1587
        * @description Remove a Selector added by addHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1588
        * @param {String} str The selector for the handle to be removed. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1589
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1590
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1591
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1592
        removeHandle: function(str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1593
            if (this._handles[str]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1594
                delete this._handles[str];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1595
                this.fire(EV_REMOVE_HANDLE, { handle: str });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1596
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1597
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1598
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1599
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1600
        * @method addHandle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1601
        * @description Add a handle to a drag element. Drag only initiates when a mousedown happens on this element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1602
        * @param {String} str The selector to test for a valid handle. Must be a child of the element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1603
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1604
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1605
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1606
        addHandle: function(str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1607
            if (!this._handles) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1608
                this._handles = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1609
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1610
            if (Y.Lang.isString(str)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1611
                this._handles[str] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1612
                this.fire(EV_ADD_HANDLE, { handle: str });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1613
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1614
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1615
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1616
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1617
        * @method removeInvalid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1618
        * @description Remove an invalid handle added by addInvalid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1619
        * @param {String} str The invalid handle to remove from the internal list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1620
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1621
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1622
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1623
        removeInvalid: function(str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1624
            if (this._invalids[str]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1625
                this._invalids[str] = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1626
                delete this._invalids[str];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1627
                this.fire(EV_REMOVE_INVALID, { handle: str });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1628
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1629
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1630
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1631
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1632
        * @method addInvalid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1633
        * @description Add a selector string to test the handle against. If the test passes the drag operation will not continue.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1634
        * @param {String} str The selector to test against to determine if this is an invalid drag handle.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1635
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1636
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1637
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1638
        addInvalid: function(str) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1639
            if (Y.Lang.isString(str)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1640
                this._invalids[str] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1641
                this.fire(EV_ADD_INVALID, { handle: str });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1642
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1643
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1644
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1645
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1646
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1647
        * @method initializer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1648
        * @description Internal init handler
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1649
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1650
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1651
            this.get(NODE).dd = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1652
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1653
            if (!this.get(NODE).get('id')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1654
                var id = Y.stamp(this.get(NODE));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1655
                this.get(NODE).set('id', id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1656
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1657
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1658
            this.actXY = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1659
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1660
            this._invalids = Y.clone(this._invalidsDefault, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1661
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1662
            this._createEvents();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1663
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1664
            if (!this.get(DRAG_NODE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1665
                this.set(DRAG_NODE, this.get(NODE));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1666
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1667
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1668
            //Fix for #2528096
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1669
            //Don't prep the DD instance until all plugins are loaded.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1670
            this.on('initializedChange', Y.bind(this._prep, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1671
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1672
            //Shouldn't have to do this..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1673
            this.set('groups', this.get('groups'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1674
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1675
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1676
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1677
        * @method _prep
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1678
        * @description Attach event listners and add classname
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1679
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1680
        _prep: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1681
            this._dragThreshMet = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1682
            var node = this.get(NODE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1683
            node.addClass(DDM.CSS_PREFIX + '-draggable');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1684
            node.on(MOUSE_DOWN, Y.bind(this._handleMouseDownEvent, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1685
            node.on(MOUSE_UP, Y.bind(this._handleMouseUp, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1686
            node.on(DRAG_START, Y.bind(this._fixDragStart, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1687
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1688
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1689
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1690
        * @method _unprep
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1691
        * @description Detach event listeners and remove classname
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1692
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1693
        _unprep: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1694
            var node = this.get(NODE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1695
            node.removeClass(DDM.CSS_PREFIX + '-draggable');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1696
            node.detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1697
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1698
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1699
        * @method start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1700
        * @description Starts the drag operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1701
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1702
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1703
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1704
        start: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1705
            if (!this.get('lock') && !this.get(DRAGGING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1706
                var node = this.get(NODE), ow = node.get(OFFSET_WIDTH), oh = node.get(OFFSET_HEIGHT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1707
                this._startTime = (new Date()).getTime();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1708
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1709
                DDM._start();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1710
                node.addClass(DDM.CSS_PREFIX + '-dragging');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1711
                this.fire(EV_START, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1712
                    pageX: this.nodeXY[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1713
                    pageY: this.nodeXY[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1714
                    startTime: this._startTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1715
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1716
                var xy = this.nodeXY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1717
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1718
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1719
                this.region = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1720
                    '0': xy[0], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1721
                    '1': xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1722
                    area: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1723
                    top: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1724
                    right: xy[0] + ow,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1725
                    bottom: xy[1] + oh,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1726
                    left: xy[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1727
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1728
                this.set(DRAGGING, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1729
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1730
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1731
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1732
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1733
        * @method end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1734
        * @description Ends the drag operation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1735
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1736
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1737
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1738
        end: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1739
            this._endTime = (new Date()).getTime();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1740
            if (this._clickTimeout) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1741
                this._clickTimeout.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1742
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1743
            this._dragThreshMet = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1744
            this._fromTimeout = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1745
            if (!this.get('lock') && this.get(DRAGGING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1746
                this.fire(EV_END, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1747
                    pageX: this.lastXY[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1748
                    pageY: this.lastXY[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1749
                    startTime: this._startTime,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1750
                    endTime: this._endTime
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1751
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1752
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1753
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-dragging');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1754
            this.set(DRAGGING, false);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1755
            this.deltaXY = [0, 0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1756
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1757
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1758
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1759
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1760
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1761
        * @method _prevEndFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1762
        * @description Handler for preventing the drag:end event. It will reset the node back to it's start position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1763
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1764
        _prevEndFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1765
            //Bug #1852577
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1766
            this.get(DRAG_NODE).setXY(this.nodeXY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1767
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1768
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1769
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1770
        * @method _align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1771
        * @description Calculates the offsets and set's the XY that the element will move to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1772
        * @param {Array} xy The xy coords to align with.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1773
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1774
        _align: function(xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1775
            this.fire(EV_ALIGN, {pageX: xy[0], pageY: xy[1] });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1776
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1777
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1778
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1779
        * @method _defAlignFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1780
        * @description Calculates the offsets and set's the XY that the element will move to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1781
        * @param {Event.Facade} e The drag:align event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1782
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1783
        _defAlignFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1784
            this.actXY = [e.pageX - this.deltaXY[0], e.pageY - this.deltaXY[1]];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1785
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1786
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1787
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1788
        * @method _alignNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1789
        * @description This method performs the alignment before the element move.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1790
        * @param {Array} eXY The XY to move the element to, usually comes from the mousemove DOM event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1791
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1792
        _alignNode: function(eXY) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1793
            this._align(eXY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1794
            this._moveNode();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1795
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1796
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1797
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1798
        * @method _moveNode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1799
        * @description This method performs the actual element move.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1800
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1801
        _moveNode: function(scroll) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1802
            //if (!this.get(DRAGGING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1803
            //    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1804
            //}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1805
            var diffXY = [], diffXY2 = [], startXY = this.nodeXY, xy = this.actXY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1806
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1807
            diffXY[0] = (xy[0] - this.lastXY[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1808
            diffXY[1] = (xy[1] - this.lastXY[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1809
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1810
            diffXY2[0] = (xy[0] - this.nodeXY[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1811
            diffXY2[1] = (xy[1] - this.nodeXY[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1812
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1813
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1814
            this.region = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1815
                '0': xy[0], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1816
                '1': xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1817
                area: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1818
                top: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1819
                right: xy[0] + this.get(DRAG_NODE).get(OFFSET_WIDTH),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1820
                bottom: xy[1] + this.get(DRAG_NODE).get(OFFSET_HEIGHT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1821
                left: xy[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1822
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1823
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1824
            this.fire(EV_DRAG, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1825
                pageX: xy[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1826
                pageY: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1827
                scroll: scroll,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1828
                info: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1829
                    start: startXY,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1830
                    xy: xy,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1831
                    delta: diffXY,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1832
                    offset: diffXY2
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1833
                } 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1834
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1835
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1836
            this.lastXY = xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1837
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1838
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1839
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1840
        * @method _defDragFn
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1841
        * @description Default function for drag:drag. Fired from _moveNode.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1842
        * @param {Event.Facade} ev The drag:drag event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1843
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1844
        _defDragFn: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1845
            if (this.get('move')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1846
                if (e.scroll) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1847
                    e.scroll.node.set('scrollTop', e.scroll.top);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1848
                    e.scroll.node.set('scrollLeft', e.scroll.left);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1849
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1850
                this.get(DRAG_NODE).setXY([e.pageX, e.pageY]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1851
                this.realXY = [e.pageX, e.pageY];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1852
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1853
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1854
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1855
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1856
        * @method _move
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1857
        * @description Fired from DragDropMgr (DDM) on mousemove.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1858
        * @param {Event.Facade} ev The mousemove DOM event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1859
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1860
        _move: function(ev) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1861
            if (this.get('lock')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1862
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1863
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1864
                this.mouseXY = [ev.pageX, ev.pageY];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1865
                if (!this._dragThreshMet) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1866
                    var diffX = Math.abs(this.startXY[0] - ev.pageX),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1867
                    diffY = Math.abs(this.startXY[1] - ev.pageY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1868
                    if (diffX > this.get('clickPixelThresh') || diffY > this.get('clickPixelThresh')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1869
                        this._dragThreshMet = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1870
                        this.start();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1871
                        this._alignNode([ev.pageX, ev.pageY]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1872
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1873
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1874
                    if (this._clickTimeout) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1875
                        this._clickTimeout.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1876
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1877
                    this._alignNode([ev.pageX, ev.pageY]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1878
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1879
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1880
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1881
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1882
        * @method stopDrag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1883
        * @description Method will forcefully stop a drag operation. For example calling this from inside an ESC keypress handler will stop this drag.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1884
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1885
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1886
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1887
        stopDrag: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1888
            if (this.get(DRAGGING)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1889
                DDM._end();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1890
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1891
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1892
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1893
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1894
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1895
        * @method destructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1896
        * @description Lifecycle destructor, unreg the drag from the DDM and remove listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1897
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1898
        destructor: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1899
            this._unprep();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1900
            this.detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1901
            if (this.target) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1902
                this.target.destroy();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1903
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1904
            DDM._unregDrag(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1905
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1906
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1907
    Y.namespace('DD');    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1908
    Y.DD.Drag = Drag;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1909
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1910
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1911
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1912
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1913
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1914
}, '3.0.0' ,{requires:['dd-ddm-base'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1915
YUI.add('dd-proxy', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1916
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1917
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1918
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1919
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1920
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1921
     * @submodule dd-proxy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1922
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1923
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1924
     * This plugin for dd-drag is for creating a proxy drag node, instead of dragging the original node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1925
     * @class DDProxy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1926
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1927
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1928
     * @namespace Plugin     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1929
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1930
    var DDM = Y.DD.DDM,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1931
        NODE = 'node',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1932
        DRAG_NODE = 'dragNode',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1933
        HOST = 'host',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1934
        TRUE = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1935
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1936
    var P = function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1937
        P.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1938
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1939
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1940
    P.NAME = 'DDProxy';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1941
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1942
    * @property proxy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1943
    * @description The Proxy instance will be placed on the Drag instance under the proxy namespace.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1944
    * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1945
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1946
    P.NS = 'proxy';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1947
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1948
    P.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1949
        host: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1950
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1951
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1952
        * @attribute moveOnEnd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1953
        * @description Move the original node at the end of the drag. Default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1954
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1955
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1956
        moveOnEnd: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1957
            value: TRUE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1958
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1959
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1960
        * @attribute hideOnEnd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1961
        * @description Hide the drag node at the end of the drag. Default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1962
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1963
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1964
        hideOnEnd: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1965
            value: TRUE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1966
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1967
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1968
        * @attribute resizeFrame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1969
        * @description Make the Proxy node assume the size of the original node. Default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1970
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1971
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1972
        resizeFrame: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1973
            value: TRUE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1974
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1975
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1976
        * @attribute positionProxy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1977
        * @description Make the Proxy node appear in the same place as the original node. Default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1978
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1979
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1980
        positionProxy: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1981
            value: TRUE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1982
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1983
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1984
        * @attribute borderStyle
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1985
        * @description The default border style for the border of the proxy. Default: 1px solid #808080
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1986
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1987
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1988
        borderStyle: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1989
            value: '1px solid #808080'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1990
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1991
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1992
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1993
    var proto = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1994
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1995
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1996
        * @property _hands
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1997
        * @description Holds the event handles for setting the proxy
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1998
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  1999
        _hands: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2000
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2001
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2002
        * @method _init
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2003
        * @description Handler for the proxy config attribute
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2004
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2005
        _init: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2006
            if (!DDM._proxy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2007
                Y.on('domready', Y.bind(this._init, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2008
                return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2009
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2010
            if (!this._hands) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2011
                this._hands = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2012
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2013
            var i, h, h1, host = this.get(HOST), dnode = host.get(DRAG_NODE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2014
            if (dnode.compareTo(host.get(NODE))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2015
                if (DDM._proxy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2016
                    host.set(DRAG_NODE, DDM._proxy);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2017
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2018
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2019
            Y.each(this._hands, function(v) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2020
                v.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2021
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2022
            h = DDM.on('ddm:start', Y.bind(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2023
                if (DDM.activeDrag === host) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2024
                    DDM._setFrame(host);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2025
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2026
            }, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2027
            h1 = DDM.on('ddm:end', Y.bind(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2028
                if (host.get('dragging')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2029
                    if (this.get('moveOnEnd')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2030
                        host.get(NODE).setXY(host.lastXY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2031
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2032
                    if (this.get('hideOnEnd')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2033
                        host.get(DRAG_NODE).setStyle('display', 'none');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2034
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2035
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2036
            }, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2037
            this._hands = [h, h1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2038
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2039
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2040
            this._init();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2041
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2042
        destructor: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2043
            var host = this.get(HOST);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2044
            Y.each(this._hands, function(v) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2045
                v.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2046
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2047
            host.set(DRAG_NODE, host.get(NODE));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2048
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2049
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2050
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2051
    Y.namespace('Plugin');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2052
    Y.extend(P, Y.Base, proto);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2053
    Y.Plugin.DDProxy = P;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2054
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2055
    //Add a couple of methods to the DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2056
    Y.mix(DDM, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2057
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2058
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2059
        * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2060
        * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2061
        * @method _createFrame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2062
        * @description Create the proxy element if it doesn't already exist and set the DD.DDM._proxy value
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2063
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2064
        _createFrame: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2065
            if (!DDM._proxy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2066
                DDM._proxy = TRUE;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2067
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2068
                var p = Y.Node.create('<div></div>'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2069
                b = Y.Node.get('body');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2070
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2071
                p.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2072
                    position: 'absolute',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2073
                    display: 'none',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2074
                    zIndex: '999',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2075
                    top: '-999px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2076
                    left: '-999px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2077
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2078
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2079
                b.insertBefore(p, b.get('firstChild'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2080
                p.set('id', Y.stamp(p));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2081
                p.addClass(DDM.CSS_PREFIX + '-proxy');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2082
                DDM._proxy = p;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2083
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2084
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2085
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2086
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2087
        * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2088
        * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2089
        * @method _setFrame
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2090
        * @description If resizeProxy is set to true (default) it will resize the proxy element to match the size of the Drag Element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2091
        * If positionProxy is set to true (default) it will position the proxy element in the same location as the Drag Element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2092
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2093
        _setFrame: function(drag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2094
            var n = drag.get(NODE), d = drag.get(DRAG_NODE), ah, cur = 'auto';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2095
            if (drag.proxy.get('resizeFrame')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2096
                DDM._proxy.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2097
                    height: n.get('offsetHeight') + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2098
                    width: n.get('offsetWidth') + 'px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2099
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2100
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2101
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2102
            ah = DDM.activeDrag.get('activeHandle');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2103
            if (ah) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2104
                cur = ah.getStyle('cursor');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2105
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2106
            if (cur == 'auto') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2107
                cur = DDM.get('dragCursor');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2108
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2110
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2111
            d.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2112
                visibility: 'hidden',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2113
                display: 'block',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2114
                cursor: cur,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2115
                border: drag.proxy.get('borderStyle')
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2116
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2117
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2118
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2119
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2120
            if (drag.proxy.get('positionProxy')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2121
                d.setXY(drag.nodeXY);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2122
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2123
            d.setStyle('visibility', 'visible');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2124
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2125
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2126
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2127
    //Create the frame when DOM is ready
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2128
    Y.on('domready', Y.bind(DDM._createFrame, DDM));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2129
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2130
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2131
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2132
}, '3.0.0' ,{requires:['dd-ddm', 'dd-drag'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2133
YUI.add('dd-constrain', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2134
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2135
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2136
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2137
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2138
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2139
     * @submodule dd-constrain
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2140
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2141
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2142
     * This is a plugin for the dd-drag module to add the constraining methods to it. It supports constraining to a renodenode or viewport. It anode* supports tick based moves and XY axis constraints.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2143
     * @class DragConstrained
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2144
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2145
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2146
     * @namespace Plugin     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2147
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2148
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2149
    var DRAG_NODE = 'dragNode',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2150
        OFFSET_HEIGHT = 'offsetHeight',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2151
        OFFSET_WIDTH = 'offsetWidth',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2152
        HOST = 'host',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2153
        CON_2_REGION = 'constrain2region',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2154
        CON_2_NODE = 'constrain2node',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2155
        TICK_X_ARRAY = 'tickXArray',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2156
        TICK_Y_ARRAY = 'tickYArray',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2157
        DDM = Y.DD.DDM,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2158
        TOP = 'top',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2159
        RIGHT = 'right',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2160
        BOTTOM = 'bottom',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2161
        LEFT = 'left',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2162
        proto = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2164
    var C = function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2165
        C.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2166
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2167
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2168
    C.NAME = 'DragConstrained';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2169
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2170
    * @property con
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2171
    * @description The Constrained instance will be placed on the Drag instance under the con namespace.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2172
    * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2173
    */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2174
    C.NS = 'con';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2175
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2176
    C.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2177
        host: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2178
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2179
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2180
        * @attribute stickX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2181
        * @description Stick the drag movement to the X-Axis. Default: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2182
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2183
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2184
        stickX: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2185
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2186
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2187
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2188
        * @attribute stickY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2189
        * @description Stick the drag movement to the Y-Axis
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2190
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2191
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2192
        stickY: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2193
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2194
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2195
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2196
        * @attribute tickX
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2197
        * @description The X tick offset the drag node should snap to on each drag move. False for no ticks. Default: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2198
        * @type Number/false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2199
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2200
        tickX: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2201
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2202
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2203
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2204
        * @attribute tickY
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2205
        * @description The Y tick offset the drag node should snap to on each drag move. False for no ticks. Default: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2206
        * @type Number/false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2207
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2208
        tickY: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2209
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2210
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2211
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2212
        * @attribute tickXArray
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2213
        * @description An array of page coordinates to use as X ticks for drag movement.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2214
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2215
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2216
        tickXArray: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2217
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2218
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2219
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2220
        * @attribute tickYArray
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2221
        * @description An array of page coordinates to use as Y ticks for drag movement.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2222
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2223
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2224
        tickYArray: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2225
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2226
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2227
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2228
        * @attribute constrain2region
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2229
        * @description An Object Literal containing a valid region (top, right, bottom, left) of page positions to constrain the drag node to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2230
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2231
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2232
        constrain2region: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2233
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2234
            getter: function(r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2235
                if (Y.Lang.isObject(r)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2236
                    var o = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2237
                    Y.mix(o, r);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2238
                    return o;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2239
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2240
                    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2241
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2242
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2243
            setter: function (r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2244
                if (Y.Lang.isObject(r)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2245
                    if (Y.Lang.isNumber(r[TOP]) && Y.Lang.isNumber(r[RIGHT]) && Y.Lang.isNumber(r[LEFT]) && Y.Lang.isNumber(r[BOTTOM])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2246
                        var o = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2247
                        Y.mix(o, r);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2248
                        return o;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2249
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2250
                        return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2251
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2252
                } else if (r !== false) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2253
                    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2254
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2255
                return r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2256
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2257
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2258
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2259
        * @attribute gutter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2260
        * @description CSS style string for the gutter of a region (supports negative values): '5 0' (sets top and bottom to 5px, left and right to 0px), '1 2 3 4' (top 1px, right 2px, bottom 3px, left 4px)        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2261
        * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2262
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2263
        gutter: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2264
            value: '0',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2265
            setter: function(gutter) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2266
                return Y.DD.DDM.cssSizestoObject(gutter);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2267
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2268
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2269
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2270
        * @attribute constrain2node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2271
        * @description Will attempt to constrain the drag node to the boundaries of this node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2272
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2273
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2274
        constrain2node: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2275
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2276
            setter: function(n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2277
                if (!this.get(CON_2_REGION)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2278
                    var node = Y.Node.get(n);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2279
                    if (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2280
                        return node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2281
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2282
                } else if (this.get(CON_2_REGION) !== false) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2283
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2284
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2285
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2286
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2287
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2288
        * @attribute constrain2view
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2289
        * @description Will attempt to constrain the drag node to the boundaries of the viewport region.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2290
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2291
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2292
        constrain2view: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2293
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2294
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2295
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2296
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2297
    proto = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2298
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2299
            this.get(HOST).on('drag:start', Y.bind(this._handleStart, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2300
            this.get(HOST).after('drag:align', Y.bind(this.align, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2301
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2302
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2303
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2304
        * @method _handleStart
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2305
        * @description Fires on drag:start and clears the _regionCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2306
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2307
        _handleStart: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2308
            this._regionCache = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2309
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2310
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2311
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2312
        * @property _regionCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2313
        * @description Store a cache of the region that we are constraining to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2314
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2315
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2316
        _regionCache: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2317
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2318
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2319
        * @method _cacheRegion
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2320
        * @description Get's the region and caches it, called from window.resize and when the cache is null
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2321
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2322
        _cacheRegion: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2323
            this._regionCache = this.get(CON_2_NODE).get('region');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2324
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2325
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2326
        * @method getRegion
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2327
        * @description Get the active region: viewport, node, custom region
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2328
        * @param {Boolean} inc Include the node's height and width
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2329
        * @return {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2330
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2331
        getRegion: function(inc) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2332
            var r = {}, oh = null, ow = null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2333
                g = this.get('gutter'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2334
                host = this.get(HOST);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2335
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2336
            if (this.get(CON_2_NODE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2337
                if (!this._regionCache) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2338
                    Y.on('resize', Y.bind(this._cacheRegion, this), window);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2339
                    this._cacheRegion();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2340
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2341
                r = Y.clone(this._regionCache);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2342
            } else if (this.get(CON_2_REGION)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2343
                r = this.get(CON_2_REGION);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2344
            } else if (this.get('constrain2view')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2345
                r = host.get(DRAG_NODE).get('viewportRegion');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2346
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2347
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2348
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2349
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2350
            Y.each(g, function(i, n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2351
                if ((n == RIGHT) || (n == BOTTOM)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2352
                    r[n] -= i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2353
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2354
                    r[n] += i;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2355
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2356
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2357
            if (inc) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2358
                oh = host.get(DRAG_NODE).get(OFFSET_HEIGHT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2359
                ow = host.get(DRAG_NODE).get(OFFSET_WIDTH);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2360
                r[RIGHT] = r[RIGHT] - ow;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2361
                r[BOTTOM] = r[BOTTOM] - oh;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2362
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2363
            return r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2364
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2365
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2366
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2367
        * @method _checkRegion
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2368
        * @description Check if xy is inside a given region, if not change to it be inside.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2369
        * @param {Array} _xy The XY to check if it's in the current region, if it isn't inside the region, it will reset the xy array to be inside the region.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2370
        * @return {Array} The new XY that is inside the region
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2371
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2372
        _checkRegion: function(_xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2373
            var oxy = _xy,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2374
                r = this.getRegion(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2375
                host = this.get(HOST),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2376
                oh = host.get(DRAG_NODE).get(OFFSET_HEIGHT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2377
                ow = host.get(DRAG_NODE).get(OFFSET_WIDTH);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2378
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2379
                if (oxy[1] > (r[BOTTOM] - oh)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2380
                    _xy[1] = (r[BOTTOM] - oh);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2381
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2382
                if (r[TOP] > oxy[1]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2383
                    _xy[1] = r[TOP];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2384
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2385
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2386
                if (oxy[0] > (r[RIGHT] - ow)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2387
                    _xy[0] = (r[RIGHT] - ow);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2388
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2389
                if (r[LEFT] > oxy[0]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2390
                    _xy[0] = r[LEFT];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2391
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2392
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2393
            return _xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2394
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2395
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2396
        * @method inRegion
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2397
        * @description Checks if the XY passed or the dragNode is inside the active region.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2398
        * @param {Array} xy Optional XY to check, if not supplied this.get('dragNode').getXY() is used.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2399
        * @return {Boolean} True if the XY is inside the region, false otherwise.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2400
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2401
        inRegion: function(xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2402
            xy = xy || this.get(HOST).get(DRAG_NODE).getXY();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2403
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2404
            var _xy = this._checkRegion([xy[0], xy[1]]),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2405
                inside = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2406
                if ((xy[0] === _xy[0]) && (xy[1] === _xy[1])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2407
                    inside = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2408
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2409
            return inside;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2410
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2411
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2412
        * @method align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2413
        * @description Modifies the Drag.actXY method from the after drag:align event. This is where the constraining happens.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2414
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2415
        align: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2416
            var host = this.get(HOST),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2417
                _xy = host.actXY,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2418
                r = this.getRegion(true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2419
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2420
            if (this.get('stickX')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2421
                _xy[1] = (host.startXY[1] - host.deltaXY[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2422
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2423
            if (this.get('stickY')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2424
                _xy[0] = (host.startXY[0] - host.deltaXY[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2425
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2426
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2427
            if (r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2428
                _xy = this._checkRegion(_xy);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2429
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2430
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2431
            _xy = this._checkTicks(_xy, r);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2432
            host.actXY = _xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2433
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2434
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2435
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2436
        * @method _checkTicks
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2437
        * @description This method delegates the proper helper method for tick calculations
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2438
        * @param {Array} xy The XY coords for the Drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2439
        * @param {Object} r The optional region that we are bound to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2440
        * @return {Array} The calced XY coords
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2441
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2442
        _checkTicks: function(xy, r) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2443
            var host = this.get(HOST),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2444
                lx = (host.startXY[0] - host.deltaXY[0]),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2445
                ly = (host.startXY[1] - host.deltaXY[1]),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2446
                xt = this.get('tickX'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2447
                yt = this.get('tickY');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2448
                if (xt && !this.get(TICK_X_ARRAY)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2449
                    xy[0] = DDM._calcTicks(xy[0], lx, xt, r[LEFT], r[RIGHT]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2450
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2451
                if (yt && !this.get(TICK_Y_ARRAY)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2452
                    xy[1] = DDM._calcTicks(xy[1], ly, yt, r[TOP], r[BOTTOM]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2453
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2454
                if (this.get(TICK_X_ARRAY)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2455
                    xy[0] = DDM._calcTickArray(xy[0], this.get(TICK_X_ARRAY), r[LEFT], r[RIGHT]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2456
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2457
                if (this.get(TICK_Y_ARRAY)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2458
                    xy[1] = DDM._calcTickArray(xy[1], this.get(TICK_Y_ARRAY), r[TOP], r[BOTTOM]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2459
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2460
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2461
            return xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2462
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2463
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2464
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2465
    Y.namespace('Plugin');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2466
    Y.extend(C, Y.Base, proto);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2467
    Y.Plugin.DDConstrained = C;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2468
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2469
    Y.mix(DDM, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2470
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2471
        * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2472
        * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2473
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2474
        * @method _calcTicks
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2475
        * @description Helper method to calculate the tick offsets for a given position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2476
        * @param {Number} pos The current X or Y position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2477
        * @param {Number} start The start X or Y position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2478
        * @param {Number} tick The X or Y tick increment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2479
        * @param {Number} off1 The min offset that we can't pass (region)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2480
        * @param {Number} off2 The max offset that we can't pass (region)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2481
        * @return {Number} The new position based on the tick calculation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2482
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2483
        _calcTicks: function(pos, start, tick, off1, off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2484
            var ix = ((pos - start) / tick),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2485
                min = Math.floor(ix),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2486
                max = Math.ceil(ix);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2487
                if ((min !== 0) || (max !== 0)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2488
                    if ((ix >= min) && (ix <= max)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2489
                        pos = (start + (tick * min));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2490
                        if (off1 && off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2491
                            if (pos < off1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2492
                                pos = (start + (tick * (min + 1)));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2493
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2494
                            if (pos > off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2495
                                pos = (start + (tick * (min - 1)));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2496
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2497
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2498
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2499
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2500
                return pos;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2501
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2502
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2503
        * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2504
        * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2505
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2506
        * @method _calcTickArray
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2507
        * @description This method is used with the tickXArray and tickYArray config options
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2508
        * @param {Number} pos The current X or Y position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2509
        * @param {Number} ticks The array containing our custom tick positions.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2510
        * @param {Number} off1 The min offset that we can't pass (region)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2511
        * @param {Number} off2 The max offset that we can't pass (region)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2512
        * @return The tick position
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2513
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2514
        _calcTickArray: function(pos, ticks, off1, off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2515
            var i = 0, len = ticks.length, next = 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2516
                diff1, diff2, ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2517
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2518
            if (!ticks || (ticks.length === 0)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2519
                return pos;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2520
            } else if (ticks[0] >= pos) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2521
                return ticks[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2522
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2523
                for (i = 0; i < len; i++) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2524
                    next = (i + 1);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2525
                    if (ticks[next] && ticks[next] >= pos) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2526
                        diff1 = pos - ticks[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2527
                        diff2 = ticks[next] - pos;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2528
                        ret = (diff2 > diff1) ? ticks[i] : ticks[next];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2529
                        if (off1 && off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2530
                            if (ret > off2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2531
                                if (ticks[i]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2532
                                    ret = ticks[i];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2533
                                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2534
                                    ret = ticks[len - 1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2535
                                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2536
                            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2537
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2538
                        return ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2539
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2540
                    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2541
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2542
                return ticks[ticks.length - 1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2543
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2544
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2545
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2546
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2547
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2548
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2549
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2550
}, '3.0.0' ,{requires:['dd-drag'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2551
YUI.add('dd-scroll', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2552
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2553
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2554
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2555
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2556
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2557
     * @submodule dd-scroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2558
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2559
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2560
     * This class is the base scroller class used to create the Plugin.DDNodeScroll and Plugin.DDWinScroll.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2561
     * This class should not be called on it's own, it's designed to be a plugin.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2562
     * @class Scroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2563
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2564
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2565
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2566
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2567
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2568
    var S = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2569
        S.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2570
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2571
    },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2572
    HOST = 'host',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2573
    BUFFER = 'buffer',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2574
    PARENT_SCROLL = 'parentScroll',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2575
    WINDOW_SCROLL = 'windowScroll',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2576
    SCROLL_TOP = 'scrollTop',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2577
    SCROLL_LEFT = 'scrollLeft',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2578
    OFFSET_WIDTH = 'offsetWidth',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2579
    OFFSET_HEIGHT = 'offsetHeight';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2580
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2581
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2582
    S.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2583
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2584
        * @attribute parentScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2585
        * @description Internal config option to hold the node that we are scrolling. Should not be set by the developer.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2586
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2587
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2588
        parentScroll: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2589
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2590
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2591
                if (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2592
                    return node;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2593
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2594
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2595
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2596
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2597
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2598
        * @attribute buffer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2599
        * @description The number of pixels from the edge of the screen to turn on scrolling. Default: 30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2600
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2601
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2602
        buffer: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2603
            value: 30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2604
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2605
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2606
        * @attribute scrollDelay
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2607
        * @description The number of milliseconds delay to pass to the auto scroller. Default: 235
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2608
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2609
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2610
        scrollDelay: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2611
            value: 235
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2612
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2613
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2614
        * @attribute host
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2615
        * @description The host we are plugged into.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2616
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2617
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2618
        host: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2619
            value: null
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2620
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2621
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2622
        * @attribute windowScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2623
        * @description Turn on window scroll support, default: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2624
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2625
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2626
        windowScroll: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2627
            value: false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2628
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2629
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2630
        * @attribute vertical
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2631
        * @description Allow vertical scrolling, default: true.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2632
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2633
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2634
        vertical: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2635
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2636
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2637
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2638
        * @attribute horizontal
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2639
        * @description Allow horizontal scrolling, default: true.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2640
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2641
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2642
        horizontal: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2643
            value: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2644
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2645
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2646
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2647
    Y.extend(S, Y.Base, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2648
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2649
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2650
        * @property _scrolling
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2651
        * @description Tells if we are actively scrolling or not.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2652
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2653
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2654
        _scrolling: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2655
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2656
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2657
        * @property _vpRegionCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2658
        * @description Cache of the Viewport dims.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2659
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2660
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2661
        _vpRegionCache: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2662
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2663
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2664
        * @property _dimCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2665
        * @description Cache of the dragNode dims.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2666
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2667
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2668
        _dimCache: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2669
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2670
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2671
        * @property _scrollTimer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2672
        * @description Holder for the Timer object returned from Y.later.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2673
        * @type {Y.later}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2674
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2675
        _scrollTimer: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2676
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2677
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2678
        * @method _getVPRegion
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2679
        * @description Sets the _vpRegionCache property with an Object containing the dims from the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2680
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2681
        _getVPRegion: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2682
            var r = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2683
            //if (!this._vpRegionCache) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2684
                var n = this.get(PARENT_SCROLL),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2685
                b = this.get(BUFFER),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2686
                ws = this.get(WINDOW_SCROLL),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2687
                xy = ((ws) ? [] : n.getXY()),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2688
                w = ((ws) ? 'winWidth' : OFFSET_WIDTH),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2689
                h = ((ws) ? 'winHeight' : OFFSET_HEIGHT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2690
                t = ((ws) ? n.get(SCROLL_TOP) : xy[1]),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2691
                l = ((ws) ? n.get(SCROLL_LEFT) : xy[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2692
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2693
                r = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2694
                    top: t + b,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2695
                    right: (n.get(w) + l) - b,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2696
                    bottom: (n.get(h) + t) - b,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2697
                    left: l + b
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2698
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2699
                this._vpRegionCache = r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2700
            //} else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2701
            //    r = this._vpRegionCache;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2702
            //}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2703
            return r;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2704
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2705
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2706
            var h = this.get(HOST);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2707
            h.after('drag:start', Y.bind(this.start, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2708
            h.after('drag:end', Y.bind(this.end, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2709
            h.on('drag:align', Y.bind(this.align, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2710
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2711
            //TODO - This doesn't work yet??
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2712
            Y.get(window).on('scroll', Y.bind(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2713
                this._vpRegionCache = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2714
            }, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2715
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2716
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2717
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2718
        * @method _checkWinScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2719
        * @description Check to see if we need to fire the scroll timer. If scroll timer is running this will scroll the window.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2720
        * @param {Boolean} move Should we move the window. From Y.later
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2721
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2722
        _checkWinScroll: function(move) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2723
            var r = this._getVPRegion(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2724
                ho = this.get(HOST),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2725
                ws = this.get(WINDOW_SCROLL),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2726
                xy = ho.lastXY,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2727
                scroll = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2728
                b = this.get(BUFFER),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2729
                win = this.get(PARENT_SCROLL),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2730
                sTop = win.get(SCROLL_TOP),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2731
                sLeft = win.get(SCROLL_LEFT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2732
                w = this._dimCache.w,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2733
                h = this._dimCache.h,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2734
                bottom = xy[1] + h,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2735
                top = xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2736
                right = xy[0] + w,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2737
                left = xy[0],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2738
                nt = top,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2739
                nl = left,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2740
                st = sTop,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2741
                sl = sLeft;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2742
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2743
            if (this.get('horizontal')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2744
                if (left <= r.left) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2745
                    scroll = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2746
                    nl = xy[0] - ((ws) ? b : 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2747
                    sl = sLeft - b;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2748
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2749
                if (right >= r.right) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2750
                    scroll = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2751
                    nl = xy[0] + ((ws) ? b : 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2752
                    sl = sLeft + b;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2753
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2754
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2755
            if (this.get('vertical')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2756
                if (bottom >= r.bottom) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2757
                    scroll = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2758
                    nt = xy[1] + ((ws) ? b : 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2759
                    st = sTop + b;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2760
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2761
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2762
                if (top <= r.top) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2763
                    scroll = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2764
                    nt = xy[1] - ((ws) ? b : 0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2765
                    st = sTop - b;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2766
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2767
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2768
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2769
            if (st < 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2770
                st = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2771
                nt = xy[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2772
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2773
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2774
            if (sl < 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2775
                sl = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2776
                nl = xy[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2777
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2778
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2779
            if (nt < 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2780
                nt = xy[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2781
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2782
            if (nl < 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2783
                nl = xy[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2784
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2785
            if (move) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2786
                ho.actXY = [nl, nt];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2787
                ho._moveNode({ node: win, top: st, left: sl});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2788
                if (!st && !sl) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2789
                    this._cancelScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2790
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2791
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2792
                if (scroll) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2793
                    this._initScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2794
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2795
                    this._cancelScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2796
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2797
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2798
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2799
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2800
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2801
        * @method _initScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2802
        * @description Cancel a previous scroll timer and init a new one.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2803
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2804
        _initScroll: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2805
            this._cancelScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2806
            this._scrollTimer = Y.Lang.later(this.get('scrollDelay'), this, this._checkWinScroll, [true], true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2807
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2808
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2809
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2810
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2811
        * @method _cancelScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2812
        * @description Cancel a currently running scroll timer.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2813
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2814
        _cancelScroll: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2815
            this._scrolling = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2816
            if (this._scrollTimer) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2817
                this._scrollTimer.cancel();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2818
                delete this._scrollTimer;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2819
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2820
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2821
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2822
        * @method align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2823
        * @description Called from the drag:align event to determine if we need to scroll.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2824
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2825
        align: function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2826
            if (this._scrolling) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2827
                this._cancelScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2828
                e.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2829
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2830
            if (!this._scrolling) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2831
                this._checkWinScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2832
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2833
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2834
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2835
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2836
        * @method _setDimCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2837
        * @description Set the cache of the dragNode dims.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2838
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2839
        _setDimCache: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2840
            var node = this.get(HOST).get('dragNode');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2841
            this._dimCache = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2842
                h: node.get(OFFSET_HEIGHT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2843
                w: node.get(OFFSET_WIDTH)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2844
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2845
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2846
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2847
        * @method start
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2848
        * @description Called from the drag:start event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2849
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2850
        start: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2851
            this._setDimCache();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2852
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2853
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2854
        * @method end
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2855
        * @description Called from the drag:end event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2856
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2857
        end: function(xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2858
            this._dimCache = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2859
            this._cancelScroll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2860
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2861
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2862
        * @method toString
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2863
        * @description General toString method for logging
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2864
        * @return String name for the object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2865
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2866
        toString: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2867
            return S.NAME + ' #' + this.get('node').get('id');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2868
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2869
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2870
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2871
    Y.namespace('Plugin');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2872
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2873
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2874
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2875
     * Extends the Scroll class to make the window scroll while dragging.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2876
     * @class DDWindowScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2877
     * @extends DD.Scroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2878
     * @namespace Plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2879
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2880
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2881
    var WS = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2882
        WS.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2883
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2884
    WS.ATTRS = Y.merge(S.ATTRS, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2885
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2886
        * @attribute windowScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2887
        * @description Turn on window scroll support, default: true
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2888
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2889
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2890
        windowScroll: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2891
            value: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2892
            setter: function(scroll) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2893
                if (scroll) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2894
                    this.set(PARENT_SCROLL, Y.get(window));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2895
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2896
                return scroll;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2897
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2898
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2899
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2900
    Y.extend(WS, S, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2901
        //Shouldn't have to do this..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2902
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2903
            this.set('windowScroll', this.get('windowScroll'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2904
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2905
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2906
    WS.NAME = WS.NS = 'winscroll';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2907
    Y.Plugin.DDWinScroll = WS;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2908
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2909
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2910
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2911
     * Extends the Scroll class to make a parent node scroll while dragging.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2912
     * @class DDNodeScroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2913
     * @extends DD.Scroll
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2914
     * @namespace Plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2915
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2916
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2917
    var NS = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2918
        NS.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2919
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2920
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2921
    NS.ATTRS = Y.merge(S.ATTRS, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2922
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2923
        * @attribute node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2924
        * @description The node we want to scroll. Used to set the internal parentScroll attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2925
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2926
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2927
        node: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2928
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2929
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2930
                var n = Y.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2931
                if (!n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2932
                    if (node !== false) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2933
                        Y.error('DDNodeScroll: Invalid Node Given: ' + node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2934
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2935
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2936
                    n = n.item(0);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2937
                    this.set(PARENT_SCROLL, n);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2938
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2939
                return n;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2940
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2941
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2942
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2943
    Y.extend(NS, S, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2944
        //Shouldn't have to do this..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2945
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2946
            this.set('node', this.get('node'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2947
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2948
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2949
    NS.NAME = NS.NS = 'nodescroll';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2950
    Y.Plugin.DDNodeScroll = NS;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2951
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2952
    Y.DD.Scroll = S;    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2953
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2954
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2955
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2956
}, '3.0.0' ,{skinnable:false, requires:['dd-drag'], optional:['dd-proxy']});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2957
YUI.add('dd-plugin', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2958
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2959
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2960
       /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2961
        * This is a simple Drag plugin that can be attached to a Node via the plug method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2962
        * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2963
        * @submodule dd-plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2964
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2965
       /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2966
        * This is a simple Drag plugin that can be attached to a Node via the plug method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2967
        * @class Drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2968
        * @extends DD.Drag
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2969
        * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2970
        * @namespace Plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2971
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2972
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2973
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2974
        var Drag = function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2975
            config.node = ((Y.Widget && config.host instanceof Y.Widget) ? config.host.get('boundingBox') : config.host);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2976
            Drag.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2977
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2978
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2979
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2980
        * @property NAME
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2981
        * @description dd-plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2982
        * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2983
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2984
        Drag.NAME = "dd-plugin";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2985
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2986
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2987
        * @property NS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2988
        * @description The Drag instance will be placed on the Node instance under the dd namespace. It can be accessed via Node.dd;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2989
        * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2990
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2991
        Drag.NS = "dd";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2992
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2993
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2994
        Y.extend(Drag, Y.DD.Drag);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2995
        Y.namespace('Plugin');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2996
        Y.Plugin.Drag = Drag;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2997
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2998
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  2999
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3000
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3001
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3002
}, '3.0.0' ,{skinnable:false, requires:['dd-drag'], optional:['dd-constrain', 'dd-proxy']});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3003
YUI.add('dd-drop', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3004
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3005
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3006
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3007
     * The Drag & Drop Utility allows you to create a draggable interface efficiently, buffering you from browser-level abnormalities and enabling you to focus on the interesting logic surrounding your particular implementation. This component enables you to create a variety of standard draggable objects with just a few lines of code and then, using its extensive API, add your own specific implementation logic.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3008
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3009
     * @submodule dd-drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3010
     */     
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3011
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3012
     * This class provides the ability to create a Drop Target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3013
     * @class Drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3014
     * @extends Base
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3015
     * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3016
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3017
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3018
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3019
    var NODE = 'node',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3020
        DDM = Y.DD.DDM,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3021
        OFFSET_HEIGHT = 'offsetHeight',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3022
        OFFSET_WIDTH = 'offsetWidth',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3023
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3024
        * @event drop:over
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3025
        * @description Fires when a drag element is over this target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3026
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3027
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3028
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3029
        EV_DROP_OVER = 'drop:over',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3030
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3031
        * @event drop:enter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3032
        * @description Fires when a drag element enters this target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3033
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3034
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3035
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3036
        EV_DROP_ENTER = 'drop:enter',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3037
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3038
        * @event drop:exit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3039
        * @description Fires when a drag element exits this target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3040
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3041
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3042
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3043
        EV_DROP_EXIT = 'drop:exit',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3044
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3045
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3046
        * @event drop:hit
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3047
        * @description Fires when a draggable node is dropped on this Drop Target. (Fired from dd-ddm-drop)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3048
        * @bubbles DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3049
        * @type {Event.Custom}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3050
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3051
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3052
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3053
    Drop = function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3054
        this._lazyAddAttrs = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3055
        Drop.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3056
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3057
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3058
        //DD init speed up.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3059
        Y.on('domready', Y.bind(function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3060
            Y.later(100, this, this._createShim);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3061
        }, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3062
        DDM._regTarget(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3063
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3064
        /* TODO
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3065
        if (Dom.getStyle(this.el, 'position') == 'fixed') {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3066
            Event.on(window, 'scroll', function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3067
                this.activateShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3068
            }, this, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3069
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3070
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3071
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3072
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3073
    Drop.NAME = 'drop';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3074
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3075
    Drop.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3076
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3077
        * @attribute node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3078
        * @description Y.Node instanace to use as the element to make a Drop Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3079
        * @type Node
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3080
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3081
        node: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3082
            setter: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3083
                var n = Y.Node.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3084
                if (!n) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3085
                    Y.error('DD.Drop: Invalid Node Given: ' + node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3086
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3087
                return n;               
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3088
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3089
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3090
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3091
        * @attribute groups
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3092
        * @description Array of groups to add this drop into.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3093
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3094
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3095
        groups: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3096
            value: ['default'],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3097
            setter: function(g) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3098
                this._groups = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3099
                Y.each(g, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3100
                    this._groups[v] = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3101
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3102
                return g;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3103
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3104
        },   
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3105
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3106
        * @attribute padding
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3107
        * @description CSS style padding to make the Drop Target bigger than the node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3108
        * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3109
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3110
        padding: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3111
            value: '0',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3112
            setter: function(p) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3113
                return DDM.cssSizestoObject(p);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3114
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3115
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3116
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3117
        * @attribute lock
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3118
        * @description Set to lock this drop element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3119
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3120
        */        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3121
        lock: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3122
            value: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3123
            setter: function(lock) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3124
                if (lock) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3125
                    this.get(NODE).addClass(DDM.CSS_PREFIX + '-drop-locked');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3126
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3127
                    this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop-locked');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3128
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3129
                return lock;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3130
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3131
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3132
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3133
        * @attribute bubbles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3134
        * @description Controls the default bubble parent for this Drop instance. Default: Y.DD.DDM. Set to false to disable bubbling.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3135
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3136
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3137
        bubbles: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3138
            writeOnce: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3139
            value: Y.DD.DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3140
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3141
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3142
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3143
    Y.extend(Drop, Y.Base, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3144
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3145
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3146
        * @method _createEvents
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3147
        * @description This method creates all the events for this Event Target and publishes them so we get Event Bubbling.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3148
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3149
        _createEvents: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3150
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3151
            var ev = [
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3152
                EV_DROP_OVER,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3153
                EV_DROP_ENTER,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3154
                EV_DROP_EXIT,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3155
                'drop:hit'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3156
            ];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3157
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3158
            Y.each(ev, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3159
                this.publish(v, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3160
                    type: v,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3161
                    emitFacade: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3162
                    preventable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3163
                    bubbles: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3164
                    queuable: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3165
                    prefix: 'drop'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3166
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3167
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3168
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3169
            if (this.get('bubbles')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3170
                this.addTarget(this.get('bubbles'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3171
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3172
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3173
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3174
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3175
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3176
        * @property _valid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3177
        * @description Flag for determining if the target is valid in this operation.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3178
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3179
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3180
        _valid: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3181
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3182
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3183
        * @property _groups
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3184
        * @description The groups this target belongs to.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3185
        * @type Array
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3186
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3187
        _groups: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3188
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3189
        * @property shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3190
        * @description Node reference to the targets shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3191
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3192
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3193
        shim: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3194
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3195
        * @property region
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3196
        * @description A region object associated with this target, used for checking regions while dragging.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3197
        * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3198
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3199
        region: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3200
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3201
        * @property overTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3202
        * @description This flag is tripped when a drag element is over this target.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3203
        * @type Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3204
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3205
        overTarget: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3206
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3207
        * @method inGroup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3208
        * @description Check if this target is in one of the supplied groups.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3209
        * @param {Array} groups The groups to check against
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3210
        * @return Boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3211
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3212
        inGroup: function(groups) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3213
            this._valid = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3214
            var ret = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3215
            Y.each(groups, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3216
                if (this._groups[v]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3217
                    ret = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3218
                    this._valid = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3219
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3220
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3221
            return ret;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3222
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3223
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3224
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3225
        * @method initializer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3226
        * @description Private lifecycle method
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3227
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3228
        initializer: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3229
            //this._createEvents();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3230
            Y.later(100, this, this._createEvents);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3231
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3232
            var node = this.get(NODE), id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3233
            if (!node.get('id')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3234
                id = Y.stamp(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3235
                node.set('id', id);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3236
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3237
            node.addClass(DDM.CSS_PREFIX + '-drop');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3238
            //Shouldn't have to do this..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3239
            this.set('groups', this.get('groups'));           
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3240
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3241
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3242
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3243
        * @method destructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3244
        * @description Lifecycle destructor, unreg the drag from the DDM and remove listeners
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3245
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3246
        destructor: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3247
            DDM._unregTarget(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3248
            if (this.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3249
                this.shim.detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3250
                this.shim.get('parentNode').removeChild(this.shim);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3251
                this.shim = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3252
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3253
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3254
            this.detachAll();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3255
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3256
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3257
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3258
        * @method _deactivateShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3259
        * @description Removes classes from the target, resets some flags and sets the shims deactive position [-999, -999]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3260
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3261
        _deactivateShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3262
            if (!this.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3263
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3264
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3265
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop-active-valid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3266
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop-active-invalid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3267
            this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3268
            this.shim.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3269
                top: '-999px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3270
                left: '-999px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3271
                zIndex: '1'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3272
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3273
            this.overTarget = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3274
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3275
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3276
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3277
        * @method _activateShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3278
        * @description Activates the shim and adds some interaction CSS classes
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3279
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3280
        _activateShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3281
            if (!DDM.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3282
                return false; //Nothing is dragging, no reason to activate.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3283
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3284
            if (this.get(NODE) === DDM.activeDrag.get(NODE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3285
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3286
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3287
            if (this.get('lock')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3288
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3289
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3290
            var node = this.get(NODE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3291
            //TODO Visibility Check..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3292
            //if (this.inGroup(DDM.activeDrag.get('groups')) && this.get(NODE).isVisible()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3293
            if (this.inGroup(DDM.activeDrag.get('groups'))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3294
                node.removeClass(DDM.CSS_PREFIX + '-drop-active-invalid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3295
                node.addClass(DDM.CSS_PREFIX + '-drop-active-valid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3296
                DDM._addValid(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3297
                this.overTarget = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3298
                this.sizeShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3299
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3300
                DDM._removeValid(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3301
                node.removeClass(DDM.CSS_PREFIX + '-drop-active-valid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3302
                node.addClass(DDM.CSS_PREFIX + '-drop-active-invalid');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3303
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3304
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3305
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3306
        * @method sizeShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3307
        * @description Positions and sizes the shim with the raw data from the node, this can be used to programatically adjust the Targets shim for Animation..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3308
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3309
        sizeShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3310
            if (!DDM.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3311
                return false; //Nothing is dragging, no reason to activate.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3312
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3313
            if (this.get(NODE) === DDM.activeDrag.get(NODE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3314
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3315
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3316
            if (this.get('lock')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3317
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3318
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3319
            if (!this.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3320
                Y.later(100, this, this.sizeShim);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3321
                return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3322
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3323
            var node = this.get(NODE),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3324
                nh = node.get(OFFSET_HEIGHT),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3325
                nw = node.get(OFFSET_WIDTH),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3326
                xy = node.getXY(),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3327
                p = this.get('padding'),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3328
                dd, dH, dW;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3329
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3330
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3331
            //Apply padding
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3332
            nw = nw + p.left + p.right;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3333
            nh = nh + p.top + p.bottom;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3334
            xy[0] = xy[0] - p.left;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3335
            xy[1] = xy[1] - p.top;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3336
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3337
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3338
            if (DDM.activeDrag.get('dragMode') === DDM.INTERSECT) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3339
                //Intersect Mode, make the shim bigger
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3340
                dd = DDM.activeDrag;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3341
                dH = dd.get(NODE).get(OFFSET_HEIGHT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3342
                dW = dd.get(NODE).get(OFFSET_WIDTH);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3343
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3344
                nh = (nh + dH);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3345
                nw = (nw + dW);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3346
                xy[0] = xy[0] - (dW - dd.deltaXY[0]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3347
                xy[1] = xy[1] - (dH - dd.deltaXY[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3348
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3349
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3350
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3351
            //Set the style on the shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3352
            this.shim.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3353
                height: nh + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3354
                width: nw + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3355
                top: xy[1] + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3356
                left: xy[0] + 'px'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3357
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3358
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3359
            //Create the region to be used by intersect when a drag node is over us.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3360
            this.region = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3361
                '0': xy[0], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3362
                '1': xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3363
                area: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3364
                top: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3365
                right: xy[0] + nw,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3366
                bottom: xy[1] + nh,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3367
                left: xy[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3368
            };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3369
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3370
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3371
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3372
        * @method _createShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3373
        * @description Creates the Target shim and adds it to the DDM's playground..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3374
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3375
        _createShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3376
            //No playground, defer
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3377
            if (!DDM._pg) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3378
                Y.later(10, this, this._createShim);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3379
                return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3380
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3381
            //Shim already here, cancel
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3382
            if (this.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3383
                return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3384
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3385
            var s = Y.Node.create('<div id="' + this.get(NODE).get('id') + '_shim"></div>');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3386
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3387
            s.setStyles({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3388
                height: this.get(NODE).get(OFFSET_HEIGHT) + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3389
                width: this.get(NODE).get(OFFSET_WIDTH) + 'px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3390
                backgroundColor: 'yellow',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3391
                opacity: '.5',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3392
                zIndex: '1',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3393
                overflow: 'hidden',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3394
                top: '-900px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3395
                left: '-900px',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3396
                position:  'absolute'
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3397
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3398
            DDM._pg.appendChild(s);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3399
            this.shim = s;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3400
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3401
            s.on('mouseover', Y.bind(this._handleOverEvent, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3402
            s.on('mouseout', Y.bind(this._handleOutEvent, this));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3403
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3404
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3405
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3406
        * @method _handleOverTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3407
        * @description This handles the over target call made from this object or from the DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3408
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3409
        _handleTargetOver: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3410
            if (DDM.isOverTarget(this)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3411
                this.get(NODE).addClass(DDM.CSS_PREFIX + '-drop-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3412
                DDM.activeDrop = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3413
                DDM.otherDrops[this] = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3414
                if (this.overTarget) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3415
                    DDM.activeDrag.fire('drag:over', { drop: this, drag: DDM.activeDrag });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3416
                    this.fire(EV_DROP_OVER, { drop: this, drag: DDM.activeDrag });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3417
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3418
                    this.overTarget = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3419
                    this.fire(EV_DROP_ENTER, { drop: this, drag: DDM.activeDrag });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3420
                    DDM.activeDrag.fire('drag:enter', { drop: this, drag: DDM.activeDrag });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3421
                    DDM.activeDrag.get(NODE).addClass(DDM.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3422
                    //TODO - Is this needed??
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3423
                    //DDM._handleTargetOver();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3424
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3425
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3426
                this._handleOut();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3427
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3428
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3429
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3430
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3431
        * @method _handleOverEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3432
        * @description Handles the mouseover DOM event on the Target Shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3433
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3434
        _handleOverEvent: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3435
            this.shim.setStyle('zIndex', '999');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3436
            DDM._addActiveShim(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3437
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3438
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3439
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3440
        * @method _handleOutEvent
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3441
        * @description Handles the mouseout DOM event on the Target Shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3442
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3443
        _handleOutEvent: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3444
            this.shim.setStyle('zIndex', '1');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3445
            DDM._removeActiveShim(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3446
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3447
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3448
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3449
        * @method _handleOut
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3450
        * @description Handles out of target calls/checks
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3451
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3452
        _handleOut: function(force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3453
            if (!DDM.isOverTarget(this) || force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3454
                if (this.overTarget) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3455
                    this.overTarget = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3456
                    if (!force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3457
                        DDM._removeActiveShim(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3458
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3459
                    if (DDM.activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3460
                        this.get(NODE).removeClass(DDM.CSS_PREFIX + '-drop-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3461
                        DDM.activeDrag.get(NODE).removeClass(DDM.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3462
                        this.fire(EV_DROP_EXIT);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3463
                        DDM.activeDrag.fire('drag:exit', { drop: this });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3464
                        delete DDM.otherDrops[this];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3465
                        //if (DDM.activeDrop === this) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3466
                        //    DDM.activeDrop = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3467
                        //}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3468
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3469
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3470
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3471
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3472
    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3473
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3474
    Y.DD.Drop = Drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3475
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3476
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3477
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3478
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3479
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3480
}, '3.0.0' ,{requires:['dd-ddm-drop', 'dd-drag'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3481
YUI.add('dd-drop-plugin', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3482
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3483
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3484
       /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3485
        * This is a simple Drop plugin that can be attached to a Node via the plug method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3486
        * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3487
        * @submodule dd-drop-plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3488
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3489
       /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3490
        * This is a simple Drop plugin that can be attached to a Node via the plug method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3491
        * @class Drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3492
        * @extends DD.Drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3493
        * @constructor
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3494
        * @namespace Plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3495
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3496
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3497
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3498
        var Drop = function(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3499
            config.node = config.host;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3500
            Drop.superclass.constructor.apply(this, arguments);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3501
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3502
        
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3503
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3504
        * @property NAME
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3505
        * @description dd-drop-plugin
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3506
        * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3507
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3508
        Drop.NAME = "dd-drop-plugin";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3509
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3510
        * @property NS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3511
        * @description The Drop instance will be placed on the Node instance under the drop namespace. It can be accessed via Node.drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3512
        * @type {String}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3513
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3514
        Drop.NS = "drop";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3515
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3516
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3517
        Y.extend(Drop, Y.DD.Drop);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3518
        Y.namespace('Plugin');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3519
        Y.Plugin.Drop = Drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3520
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3521
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3522
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3523
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3524
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3525
}, '3.0.0' ,{requires:['dd-drop'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3526
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3527
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3528
YUI.add('dd', function(Y){}, '3.0.0' ,{use:['dd-ddm-base', 'dd-ddm', 'dd-ddm-drop', 'dd-drag', 'dd-proxy', 'dd-constrain', 'dd-plugin', 'dd-drop', 'dd-drop-plugin', 'dd-scroll'], skinnable:false});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
  3529