src/cm/media/js/lib/yui/yui3-3.15.0/build/align-plugin/align-plugin-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 602 e16a97fb364a
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('align-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
     * Provides advanced positioning support for Node via a Plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
     * for centering and alignment.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
     * @module align-plugin
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
    var OFFSET_WIDTH = 'offsetWidth',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
        OFFSET_HEIGHT = 'offsetHeight',
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
        undefined = undefined;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
     * Node plugin which can be used to align a node with another node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
     * region, or the viewport.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
     * @class Plugin.Align
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
     * @param {Object} User configuration object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
    function Align(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
        if (config.host) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
            this._host = config.host;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    Align.prototype = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
         * Aligns node with a point on another node or region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
         * Possible alignment points are:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
         * <dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
         *      <dt>tl</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
         *      <dd>top left</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
         *      <dt>tr</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
         *      <dd>top right</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
         *      <dt>bl</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
         *      <dd>bottom left</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
         *      <dt>br</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
         *      <dd>bottom right</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
         *      <dt>tc</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
         *      <dd>top center</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
         *      <dt>bc</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
         *      <dd>bottom center</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
         *      <dt>rc</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
         *      <dd>right center</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
         *      <dt>lc</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
         *      <dd>left center</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
         *      <dt>cc</dt>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
         *      <dd>center center</dd>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
         * </dl>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
         * @method to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
         * @param region {String|Node|HTMLElement|Object} The node or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
         * region to align with. Defaults to the viewport region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
         * @param regionPoint {String} The point of the region to align with.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
         * @param point {String} The point of the node aligned to the region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
         * @param resize {Boolean} Whether or not the node should re-align when
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
         * the window is resized. Defaults to false.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
        to: function(region, regionPoint, point, syncOnResize) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
            // cache original args for syncing
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
            this._syncArgs = Y.Array(arguments);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
            if (region.top === undefined) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
                region = Y.one(region).get('region');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
            if (region) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
                var xy = [region.left, region.top],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
                    offxy = [region.width, region.height],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
                    points = Align.points,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
                    node = this._host,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
                    NULL = null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
                    size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
                    nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
                    regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
                    regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
                    nodeFn0 = point ? points[point.charAt(0)] : NULL,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
                    nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
                if (regionFn0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
                    xy = regionFn0(xy, offxy, regionPoint);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
                if (regionFn1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
                    xy = regionFn1(xy, offxy, regionPoint);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
                if (nodeFn0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
                    xy = nodeFn0(xy, nodeoff, point);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
                if (nodeFn1) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
                    xy = nodeFn1(xy, nodeoff, point);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
                if (xy && node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
                    node.setXY(xy);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
                }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
                this._resize(syncOnResize);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
            return this;
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
        sync: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
            this.to.apply(this, this._syncArgs);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
        _resize: function(add) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
            var handle = this._handle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
            if (add && !handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
                this._handle = Y.on('resize', this._onresize, window, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
            } else if (!add && handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
                handle.detach();
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
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
        _onresize: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
            var self = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
            setTimeout(function() { // for performance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
                self.sync();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
         * Aligns the center of a node to the center of another node or region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
         * @method center
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
         * @param region {Node|HTMLElement|Object} optional The node or
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
         * region to align with. Defaults to the viewport region.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
         * the window is resized. If centering to viewport, this defaults
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
         * to true, otherwise default is false.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
        center: function(region, resize) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
            this.to(region, 'cc', 'cc', resize);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
            return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
         * Removes the resize handler, if any. This is called automatically
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
         * when unplugged from the host node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
         * @method destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
        destroy: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
            var handle = this._handle;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
            if (handle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
                handle.detach();
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
    Align.points = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
        't': function(xy, off) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
            return xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
        'r': function(xy, off) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
            return [xy[0] + off[0], xy[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
        'b': function(xy, off) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
            return [xy[0], xy[1] + off[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
        'l': function(xy, off) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
            return xy;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
        },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
        'c': function(xy, off, point) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
            var axis = (point[0] === 't' || point[0] === 'b') ?  0 : 1,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
                ret, val;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
            if (point === 'cc') {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
                ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
                val = xy[axis] + off[axis] / 2;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
                ret = (axis) ? [xy[0], val] : [val, xy[1]];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
             return ret;
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
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
    Align.NAME = 'Align';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
    Align.NS = 'align';
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    Align.prototype.constructor = Align;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
    Y.namespace('Plugin');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
    Y.Plugin.Align = Align;
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
}, '@VERSION@', {"requires": ["node-screen", "node-pluginhost"]});