src/cm/media/js/lib/yui/yui3-3.15.0/build/dd-plugin/dd-plugin.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-plugin', 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
       /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
        * Simple Drag plugin that can be attached to a Node or Widget via the plug method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
        * @module dd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
        * @submodule dd-plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
       /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
        * Simple Drag plugin that can be attached to a Node or Widget via the plug method.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
        * @class Drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
        * @extends DD.Drag
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
        * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
        * @namespace Plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
        var Drag = function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
                if (Y.Widget && config.host instanceof Y.Widget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
                        config.node = config.host.get('boundingBox');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
                        config.widget = config.host;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
                } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
                        config.node = config.host;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
                        config.widget = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
                Drag.superclass.constructor.call(this, config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
        EV_START = 'drag:start',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
        EV_DRAG = 'drag:drag',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
        EV_DRAG_END = 'drag:end';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
        * dd-plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
        * @property NAME
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
        * @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
        Drag.NAME = "dd-plugin";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
        * The Drag instance will be placed on the Node instance under the dd namespace. It can be accessed via Node.dd;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
        * @property NS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
        * @type {String}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
        */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
        Drag.NS = "dd";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
        Y.extend(Drag, Y.DD.Drag, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
                _widgetHandles: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
                * refers to a Y.Widget if its the host, otherwise = false.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
                * @attribute _widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
                _widget: undefined,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
                * refers to the [x,y] coordinate where the drag was stopped last
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
                * @attribute _stoppedPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
                _stoppedPosition: undefined,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                * Returns true if widget uses widgetPosition, otherwise returns false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                * @method _usesWidgetPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                _usesWidgetPosition: function(widget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
                        var r = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
                        if (widget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
                                r = (widget.hasImpl && widget.hasImpl(Y.WidgetPosition)) ? true : false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
                        return r;
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
                * Attached to the `drag:start` event, it checks if this plugin needs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
                * to attach or detach listeners for widgets. If `dd-proxy` is plugged
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                * the default widget positioning should be ignored.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
                * @method _checkEvents
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                _checkEvents: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                    if (this._widget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                        //It's a widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                        if (this.proxy) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
                            //It's a proxy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                            if (this._widgetHandles.length > 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
                                //Remove Listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                                this._removeWidgetListeners();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
                        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
                            if (this._widgetHandles.length === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
                                this._attachWidgetListeners();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
                            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
                    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
                * Remove the attached widget listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
                * @method _removeWidgetListeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
                _removeWidgetListeners: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
                    Y.Array.each(this._widgetHandles, function(handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
                        handle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
                    });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
                    this._widgetHandles = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
                * If this is a Widget, then attach the positioning listeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
                * @method _attachWidgetListeners
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
                _attachWidgetListeners: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                        //if this thing is a widget, and it uses widgetposition...
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
                        if (this._usesWidgetPosition(this._widget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
                               //set the x,y on the widget's ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
                               this._widgetHandles.push(this.on(EV_DRAG, this._setWidgetCoords));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
                               //store the new position that the widget ends up on
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
                               this._widgetHandles.push(this.on(EV_DRAG_END, this._updateStopPosition));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
                        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
                * Sets up event listeners on drag events if interacting with a widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
                * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
                * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
                initializer: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
                        this._widgetHandles = [];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
                        this._widget = config.widget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
                        this.on(EV_START, this._checkEvents); //Always run, don't check
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
                        this._attachWidgetListeners();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
                * Updates x,y or xy attributes on widget based on where the widget is dragged
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
                * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
                * @param {EventFacade} e Event Facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
                _setWidgetCoords: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
                        //get the last position where the widget was, or get the starting point
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
                        var nodeXY = this._stoppedPosition || e.target.nodeXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
                         realXY = e.target.realXY,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
                         //amount moved = [(x2 - x1) , (y2 - y1)]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
                         movedXY = [realXY[0] - nodeXY[0], realXY[1] - nodeXY[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
                         //if both have changed..
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
                         if (movedXY[0] !== 0 && movedXY[1] !== 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
                                 this._widget.set('xy', realXY);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
                         }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
                         //if only x is 0, set the Y
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
                         else if (movedXY[0] === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
                                 this._widget.set('y',realXY[1]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                         }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                         //otherwise, y is 0, so set X
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
                         else if (movedXY[1] === 0){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
                                 this._widget.set('x', realXY[0]);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
                         }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
                },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
                /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
                * Updates the last position where the widget was stopped.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
                *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
                * @method _updateStopPosition
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
                * @param {EventFacade} e Event Facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
                * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
                */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
                _updateStopPosition: function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
                        this._stoppedPosition = e.target.realXY;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
                }
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
        Y.namespace('Plugin');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
        Y.Plugin.Drag = Drag;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
}, '@VERSION@', {"optional": ["dd-constrain", "dd-proxy"], "requires": ["dd-drag"]});