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