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