src/cm/media/js/lib/yui/yui_3.10.3/build/dd-constrain/dd-constrain.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('dd-constrain', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
     * The Drag & Drop Utility allows you to create a draggable interface efficiently,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
     * buffering you from browser-level abnormalities and enabling you to focus on the interesting
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
     * logic surrounding your particular implementation. This component enables you to create a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
     * variety of standard draggable objects with just a few lines of code and then,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
     * using its extensive API, add your own specific implementation logic.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
     * @module dd
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
     * @main dd
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
     * @submodule dd-constrain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
     * Plugin for the dd-drag module to add the constraining methods to it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
     * It supports constraining to a node or viewport. It supports tick based moves and XY axis constraints.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
     * @class DDConstrained
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
     * @extends Base
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
     * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
     * @namespace Plugin
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
    var DRAG_NODE = 'dragNode',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
        OFFSET_HEIGHT = 'offsetHeight',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        OFFSET_WIDTH = 'offsetWidth',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
        HOST = 'host',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
        TICK_X_ARRAY = 'tickXArray',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        TICK_Y_ARRAY = 'tickYArray',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
        DDM = Y.DD.DDM,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
        TOP = 'top',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
        RIGHT = 'right',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
        BOTTOM = 'bottom',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        LEFT = 'left',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
        VIEW = 'view',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
        proto = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
        * Fires when this node is aligned with the tickX value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
        * @event drag:tickAlignX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
        * @param {EventFacade} event An Event Facade object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
        * @type {CustomEvent}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
        EV_TICK_ALIGN_X = 'drag:tickAlignX',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
        * Fires when this node is aligned with the tickY value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
        * @event drag:tickAlignY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
        * @param {EventFacade} event An Event Facade object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
        * @type {CustomEvent}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
        EV_TICK_ALIGN_Y = 'drag:tickAlignY',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
        C = function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
            this._lazyAddAttrs = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
            C.superclass.constructor.apply(this, arguments);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    C.NAME = 'ddConstrained';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    * The Constrained instance will be placed on the Drag instance under the con namespace.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    * @property NS
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    * @default con
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    * @readonly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    * @static
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    * @type {String}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    C.NS = 'con';
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    C.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
        host: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
        * Stick the drag movement to the X-Axis. Default: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
        * @attribute stickX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
        stickX: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
        * Stick the drag movement to the Y-Axis
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
        * @attribute stickY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        stickY: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
        * The X tick offset the drag node should snap to on each drag move. False for no ticks. Default: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
        * @type Number/false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
        * @attribute tickX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
        tickX: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        * The Y tick offset the drag node should snap to on each drag move. False for no ticks. Default: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
        * @type Number/false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
        * @attribute tickY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
        tickY: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
        * An array of page coordinates to use as X ticks for drag movement.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
        * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        * @attribute tickXArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
        tickXArray: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
        * An array of page coordinates to use as Y ticks for drag movement.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
        * @type Array
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
        * @attribute tickYArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
        tickYArray: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            value: false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
        * CSS style string for the gutter of a region (supports negative values): '5 0'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
        * (sets top and bottom to 5px, left and right to 0px), '1 2 3 4' (top 1px, right 2px, bottom 3px, left 4px)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
        * @attribute gutter
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
        * @type String
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
        gutter: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
            value: '0',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
            setter: function(gutter) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
                return Y.DD.DDM.cssSizestoObject(gutter);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
        * Will attempt to constrain the drag node to the boundaries. Arguments:<br>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
        * 'view': Contrain to Viewport<br>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
        * '#selector_string': Constrain to this node<br>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        * '{Region Object}': An Object Literal containing a valid region (top, right, bottom, left) of page positions
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        * @attribute constrain
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
        * @type {String/Object/Node}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        constrain: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            value: VIEW,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
            setter: function(con) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
                var node = Y.one(con);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                if (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
                    con = node;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
                return con;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
        * An Object Literal containing a valid region (top, right, bottom, left) of page positions to constrain the drag node to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
        * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        * @attribute constrain2region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
        * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        constrain2region: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            setter: function(r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
                return this.set('constrain', r);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
        * Will attempt to constrain the drag node to the boundaries of this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
        * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
        * @attribute constrain2node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
        * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
        constrain2node: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
            setter: function(n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
                return this.set('constrain', Y.one(n));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        * Will attempt to constrain the drag node to the boundaries of the viewport region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        * @deprecated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        * @attribute constrain2view
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
        constrain2view: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
            setter: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
                return this.set('constrain', VIEW);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        * Should the region be cached for performace. Default: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
        * @attribute cacheRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        cacheRegion: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            value: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
    proto = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        _lastTickXFired: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
        _lastTickYFired: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
        initializer: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
            this._createEvents();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            this._eventHandles = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
                this.get(HOST).on('drag:end', Y.bind(this._handleEnd, this)),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                this.get(HOST).on('drag:start', Y.bind(this._handleStart, this)),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
                this.get(HOST).after('drag:align', Y.bind(this.align, this)),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
                this.get(HOST).after('drag:drag', Y.bind(this.drag, this))
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
            ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
        destructor: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            Y.Array.each(
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
                this._eventHandles,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
                function(handle) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
                    handle.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
            );
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
            this._eventHandles.length = 0;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        * This method creates all the events for this Event Target and publishes them so we get Event Bubbling.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
        * @method _createEvents
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
        _createEvents: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            var ev = [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
                EV_TICK_ALIGN_X,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
                EV_TICK_ALIGN_Y
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
            ];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            Y.Array.each(ev, function(v) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
                this.publish(v, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
                    type: v,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
                    emitFacade: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
                    bubbles: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
                    queuable: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
                    prefix: 'drag'
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
                });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
        * Fires on drag:end
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
        * @method _handleEnd
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
        _handleEnd: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
            this._lastTickYFired = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
            this._lastTickXFired = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        * Fires on drag:start and clears the _regionCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
        * @method _handleStart
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        _handleStart: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            this.resetCache();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        * Store a cache of the region that we are constraining to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
        * @property _regionCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
        * @type Object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
        _regionCache: null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
        * Get's the region and caches it, called from window.resize and when the cache is null
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        * @method _cacheRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        _cacheRegion: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
            this._regionCache = this.get('constrain').get('region');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
        * Reset the internal region cache.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
        * @method resetCache
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
        resetCache: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
            this._regionCache = null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
        * Standardizes the 'constraint' attribute
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        * @method _getConstraint
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        _getConstraint: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            var con = this.get('constrain'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
                g = this.get('gutter'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
                region;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
            if (con) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
                if (con instanceof Y.Node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
                    if (!this._regionCache) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
                        this._eventHandles.push(Y.on('resize', Y.bind(this._cacheRegion, this), Y.config.win));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
                        this._cacheRegion();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
                    region = Y.clone(this._regionCache);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
                    if (!this.get('cacheRegion')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
                        this.resetCache();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
                } else if (Y.Lang.isObject(con)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
                    region = Y.clone(con);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
            if (!con || !region) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
                con = VIEW;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
            if (con === VIEW) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
                region = this.get(HOST).get(DRAG_NODE).get('viewportRegion');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
            Y.Object.each(g, function(i, n) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
                if ((n === RIGHT) || (n === BOTTOM)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                    region[n] -= i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
                } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
                    region[n] += i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
            return region;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
        * Get the active region: viewport, node, custom region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
        * @method getRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
        * @param {Boolean} inc Include the node's height and width
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
        * @return {Object} The active region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
        getRegion: function(inc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
            var r = {}, oh = null, ow = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
                host = this.get(HOST);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
            r = this._getConstraint();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
            if (inc) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
                oh = host.get(DRAG_NODE).get(OFFSET_HEIGHT);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
                ow = host.get(DRAG_NODE).get(OFFSET_WIDTH);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
                r[RIGHT] = r[RIGHT] - ow;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
                r[BOTTOM] = r[BOTTOM] - oh;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
            return r;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
        * Check if xy is inside a given region, if not change to it be inside.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
        * @method _checkRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        * @param {Array} _xy The XY to check if it's in the current region, if it isn't
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
        * inside the region, it will reset the xy array to be inside the region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
        * @return {Array} The new XY that is inside the region
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
        _checkRegion: function(_xy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
            var oxy = _xy,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
                r = this.getRegion(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
                host = this.get(HOST),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
                oh = host.get(DRAG_NODE).get(OFFSET_HEIGHT),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
                ow = host.get(DRAG_NODE).get(OFFSET_WIDTH);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
                if (oxy[1] > (r[BOTTOM] - oh)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
                    _xy[1] = (r[BOTTOM] - oh);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
                if (r[TOP] > oxy[1]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
                    _xy[1] = r[TOP];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
                if (oxy[0] > (r[RIGHT] - ow)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
                    _xy[0] = (r[RIGHT] - ow);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
                if (r[LEFT] > oxy[0]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
                    _xy[0] = r[LEFT];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
            return _xy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
        * Checks if the XY passed or the dragNode is inside the active region.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        * @method inRegion
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        * @param {Array} xy Optional XY to check, if not supplied this.get('dragNode').getXY() is used.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
        * @return {Boolean} True if the XY is inside the region, false otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
        inRegion: function(xy) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            xy = xy || this.get(HOST).get(DRAG_NODE).getXY();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
            var _xy = this._checkRegion([xy[0], xy[1]]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
                inside = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
                if ((xy[0] === _xy[0]) && (xy[1] === _xy[1])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
                    inside = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
            return inside;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
        * Modifies the Drag.actXY method from the after drag:align event. This is where the constraining happens.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
        * @method align
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
        align: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
            var host = this.get(HOST),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
                _xy = [host.actXY[0], host.actXY[1]],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                r = this.getRegion(true);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
            if (this.get('stickX')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
                _xy[1] = (host.startXY[1] - host.deltaXY[1]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
            if (this.get('stickY')) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
                _xy[0] = (host.startXY[0] - host.deltaXY[0]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
            if (r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
                _xy = this._checkRegion(_xy);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
            _xy = this._checkTicks(_xy, r);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
            host.actXY = _xy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
        * Fires after drag:drag. Handle the tickX and tickX align events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
        * @method drag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
        drag: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
            var host = this.get(HOST),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
                xt = this.get('tickX'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
                yt = this.get('tickY'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
                _xy = [host.actXY[0], host.actXY[1]];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
            if ((Y.Lang.isNumber(xt) || this.get(TICK_X_ARRAY)) && (this._lastTickXFired !== _xy[0])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
                this._tickAlignX();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
                this._lastTickXFired = _xy[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
            if ((Y.Lang.isNumber(yt) || this.get(TICK_Y_ARRAY)) && (this._lastTickYFired !== _xy[1])) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
                this._tickAlignY();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
                this._lastTickYFired = _xy[1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
        * This method delegates the proper helper method for tick calculations
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
        * @method _checkTicks
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
        * @param {Array} xy The XY coords for the Drag
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
        * @param {Object} r The optional region that we are bound to.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
        * @return {Array} The calced XY coords
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
        _checkTicks: function(xy, r) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
            var host = this.get(HOST),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
                lx = (host.startXY[0] - host.deltaXY[0]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
                ly = (host.startXY[1] - host.deltaXY[1]),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
                xt = this.get('tickX'),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
                yt = this.get('tickY');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
                if (xt && !this.get(TICK_X_ARRAY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
                    xy[0] = DDM._calcTicks(xy[0], lx, xt, r[LEFT], r[RIGHT]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
                if (yt && !this.get(TICK_Y_ARRAY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
                    xy[1] = DDM._calcTicks(xy[1], ly, yt, r[TOP], r[BOTTOM]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
                if (this.get(TICK_X_ARRAY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
                    xy[0] = DDM._calcTickArray(xy[0], this.get(TICK_X_ARRAY), r[LEFT], r[RIGHT]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
                if (this.get(TICK_Y_ARRAY)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
                    xy[1] = DDM._calcTickArray(xy[1], this.get(TICK_Y_ARRAY), r[TOP], r[BOTTOM]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
            return xy;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        * Fires when the actXY[0] reach a new value respecting the tickX gap.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        * @method _tickAlignX
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
        _tickAlignX: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
            this.fire(EV_TICK_ALIGN_X);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
        * Fires when the actXY[1] reach a new value respecting the tickY gap.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
        * @method _tickAlignY
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
        _tickAlignY: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
            this.fire(EV_TICK_ALIGN_Y);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
    };
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
    Y.namespace('Plugin');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
    Y.extend(C, Y.Base, proto);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
    Y.Plugin.DDConstrained = C;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
    Y.mix(DDM, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
        * Helper method to calculate the tick offsets for a given position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
        * @for DDM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
        * @namespace DD
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
        * @method _calcTicks
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
        * @param {Number} pos The current X or Y position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
        * @param {Number} start The start X or Y position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
        * @param {Number} tick The X or Y tick increment
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        * @param {Number} off1 The min offset that we can't pass (region)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
        * @param {Number} off2 The max offset that we can't pass (region)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
        * @return {Number} The new position based on the tick calculation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
        _calcTicks: function(pos, start, tick, off1, off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
            var ix = ((pos - start) / tick),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
                min = Math.floor(ix),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
                max = Math.ceil(ix);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
                if ((min !== 0) || (max !== 0)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
                    if ((ix >= min) && (ix <= max)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
                        pos = (start + (tick * min));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
                        if (off1 && off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
                            if (pos < off1) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
                                pos = (start + (tick * (min + 1)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
                            if (pos > off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
                                pos = (start + (tick * (min - 1)));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
                return pos;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
        },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
        * This method is used with the tickXArray and tickYArray config options
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
        * @for DDM
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
        * @namespace DD
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
        * @private
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
        * @method _calcTickArray
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        * @param {Number} pos The current X or Y position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
        * @param {Number} ticks The array containing our custom tick positions.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
        * @param {Number} off1 The min offset that we can't pass (region)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
        * @param {Number} off2 The max offset that we can't pass (region)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
        * @return The tick position
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
        */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
        _calcTickArray: function(pos, ticks, off1, off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
            var i = 0, len = ticks.length, next = 0,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
                diff1, diff2, ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
            if (!ticks || (ticks.length === 0)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
                return pos;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
            if (ticks[0] >= pos) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
                return ticks[0];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
            for (i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
                next = (i + 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
                if (ticks[next] && ticks[next] >= pos) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
                    diff1 = pos - ticks[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
                    diff2 = ticks[next] - pos;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
                    ret = (diff2 > diff1) ? ticks[i] : ticks[next];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
                    if (off1 && off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
                        if (ret > off2) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
                            if (ticks[i]) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
                                ret = ticks[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
                            } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
                                ret = ticks[len - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
                            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
                        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
                    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
                    return ret;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
            return ticks[ticks.length - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
}, '3.10.3', {"requires": ["dd-drag"]});