src/cm/media/js/lib/yui/yui_3.0.0b1/build/dd/dd-ddm-drop.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-drop', 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
     * 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
    13
     * @module dd
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
     * @submodule dd-ddm-drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
     * @for DDM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
     * @namespace DD
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
    //TODO CSS class name for the bestMatch..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
    Y.mix(Y.DD.DDM, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
        * @property _noShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
        * @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
    25
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        _noShim: false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        * @property _activeShims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        * @description Placeholder for all active shims on the page
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
        _activeShims: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        * @method _hasActiveShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
        * @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
    39
        * @return {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        _hasActiveShim: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
            if (this._noShim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
                return true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            return this._activeShims.length;
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
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        * @method _addActiveShim 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        * @description Adds a Drop Target to the list of active shims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        * @param {Object} d The Drop instance to add to the list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
        _addActiveShim: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
            this._activeShims[this._activeShims.length] = d;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        * @method _removeActiveShim 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
        * @description Removes a Drop Target to the list of active shims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        * @param {Object} d The Drop instance to remove from the list.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        _removeActiveShim: function(d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
            var s = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
            Y.each(this._activeShims, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
                if (v._yuid !== d._yuid) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
                    s[s.length] = v;
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
            this._activeShims = s;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
        * @method syncActiveShims
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
        * @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
    75
        * @param {Boolean} force Resize/sync all Targets.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
        syncActiveShims: function(force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
            Y.later(0, this, function(force) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
                var drops = ((force) ? this.targets : this._lookup());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
                Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                    v.sizeShim.call(v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
            }, force);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        * @property mode
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        * @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
    89
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
        mode: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        * @property POINT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
        * @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
    96
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
        POINT: 0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        * @property INTERSECT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
        * @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
   103
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
        INTERSECT: 1,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
        * @property STRICT
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        * @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
   110
        * @type Number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
        STRICT: 2,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
        * @property useHash
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
        * @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
   116
        * @type {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
        useHash: true,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        * @property activeDrop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
        * @description A reference to the active Drop Target
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
        activeDrop: null,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
        * @property validDrops
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
        * @description An array of the valid Drop Targets for this interaction.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        //TODO Change array/object literals to be in sync..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
        validDrops: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
        * @property otherDrops
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
        * @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
   135
        * @type {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
        otherDrops: {},
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        * @property targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
        * @description All of the Targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
        * @type {Array}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
        targets: [],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
        * @private 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
        * @method _addValid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
        * @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
   148
        * @param {Object} drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
        _addValid: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
            this.validDrops[this.validDrops.length] = drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        * @private 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
        * @method _removeValid
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
        * @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
   160
        * @param {Object} drop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
        * @return {Self}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
        * @chainable
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
        _removeValid: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
            var drops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
                if (v !== drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
                    drops[drops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
            this.validDrops = drops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
            return this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
        * @method isOverTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
        * @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
   178
        * @param {Object} drop The drop to check against
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
        * @return {Boolean}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
        isOverTarget: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
            if (this.activeDrag && drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
                var xy = this.activeDrag.mouseXY;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
                if (xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
                    if (this.activeDrag.get('dragMode') == this.STRICT) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
                        return this.activeDrag.get('dragNode').inRegion(drop.region, true, this.activeDrag.region);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
                        if (drop && drop.shim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
                            return drop.shim.intersect({
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
                                top: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
                                bottom: xy[1],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
                                left: xy[0], 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
                                right: xy[0]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
                            }, drop.region).inRegion;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
                            return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
                    return false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
                return false;
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
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
        * @method clearCache
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
        * @description Clears the cache data used for this interaction.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
        clearCache: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
            this.validDrops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
            this.otherDrops = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
            this._activeShims = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
        * @method _activateTargets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
        * @description Clear the cache and activate the shims of all the targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
        _activateTargets: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
            this.clearCache();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
                v._activateShim.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            this._handleTargetOver();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
        * @method getBestMatch
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
        * @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
   231
        * @param {Array} drops An Array of drops to scan for the best match.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
        * @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
   233
        * @return {Object or Array} 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
        getBestMatch: function(drops, all) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
            var biggest = null, area = 0, out;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
            Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
                var inter = this.activeDrag.get('dragNode').intersect(v.get('node'));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
                v.region.area = inter.area;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
                if (inter.inRegion) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
                    if (inter.area > area) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
                        area = inter.area;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
                        biggest = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            if (all) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
                out = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
                //TODO Sort the others in numeric order by area covered..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
                Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
                    if (v !== biggest) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
                        out[out.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
                }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
                return [biggest, out];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
                return biggest;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
        * @method _deactivateTargets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
        * @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
   266
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
        _deactivateTargets: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
            var other = [], tmp,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
                activeDrag = this.activeDrag,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
                activeDrop = this.activeDrop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
            //TODO why is this check so hard??
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
            if (activeDrag && activeDrop && this.otherDrops[activeDrop]) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
                if (!activeDrag.get('dragMode')) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
                    //TODO otherDrops -- private..
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
                    other = this.otherDrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
                    delete other[activeDrop];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                    tmp = this.getBestMatch(this.otherDrops, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
                    activeDrop = tmp[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
                    other = tmp[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                activeDrag.get('node').removeClass(this.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
                if (activeDrop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
                    activeDrop.fire('drop:hit', { drag: activeDrag, drop: activeDrop, others: other });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
                    activeDrag.fire('drag:drophit', { drag: activeDrag,  drop: activeDrop, others: other });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
            } else if (activeDrag) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
                activeDrag.get('node').removeClass(this.CSS_PREFIX + '-drag-over');
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
                activeDrag.fire('drag:dropmiss', { pageX: activeDrag.lastXY[0], pageY: activeDrag.lastXY[1] });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
            
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
            this.activeDrop = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
                v._deactivateShim.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        },
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
        * @method _dropMove
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
        * @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
   304
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
        _dropMove: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
            if (this._hasActiveShim()) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
                this._handleTargetOver();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
                Y.each(this.otherDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
                    v._handleOut.apply(v, []);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
            }
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
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
        * @method _lookup
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
        * @description Filters the list of Drops down to those in the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
        * @return {Array} The valid Drop Targets that are in the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
        _lookup: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
            if (!this.useHash || this._noShim) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
                return this.validDrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
            var drops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
            //Only scan drop shims that are in the Viewport
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
                if (v.shim && v.shim.inViewportRegion(false, v.region)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
                    drops[drops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
            return drops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
                
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
        * @method _handleTargetOver
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
        * @description This method execs _handleTargetOver on all valid Drop Targets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
        _handleTargetOver: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
            var drops = this._lookup();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
            Y.each(drops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
                v._handleTargetOver.call(v);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
        * @method _regTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
        * @description Add the passed in Target to the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
        * @param {Object} t The Target to add to the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
        _regTarget: function(t) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
            this.targets[this.targets.length] = t;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
        * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
        * @method _unregTarget
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
        * @description Remove the passed in Target from the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
        * @param {Object} drop The Target to remove from the targets collection
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
        _unregTarget: function(drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
            var targets = [], vdrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
            Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                if (v != drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
                    targets[targets.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
            }, this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            this.targets = targets;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
            vdrops = [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
            Y.each(this.validDrops, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
                if (v !== drop) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
                    vdrops[vdrops.length] = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
            });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
            this.validDrops = vdrops;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
        * @method getDrop
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
        * @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
   381
        * @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
   382
        * @return {Object}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
        */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
        getDrop: function(node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
            var drop = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
                n = Y.Node.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
            if (n instanceof Y.Node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
                Y.each(this.targets, function(v, k) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
                    if (n.compareTo(v.get('node'))) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
                        drop = v;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
                });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
            return drop;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
    }, true);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
    
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
}, '3.0.0b1' ,{requires:['dd-ddm'], skinnable:false});