src/cm/media/js/lib/yui/yui_3.10.3/build/align-plugin/align-plugin-debug.js
changeset 525 89ef5ed3c48b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/cm/media/js/lib/yui/yui_3.10.3/build/align-plugin/align-plugin-debug.js	Tue Jul 16 14:29:46 2013 +0200
@@ -0,0 +1,200 @@
+/*
+YUI 3.10.3 (build 2fb5187)
+Copyright 2013 Yahoo! Inc. All rights reserved.
+Licensed under the BSD License.
+http://yuilibrary.com/license/
+*/
+
+YUI.add('align-plugin', function (Y, NAME) {
+
+    /**
+     * Provides advanced positioning support for Node via a Plugin
+     * for centering and alignment. 
+     * @module align-plugin
+     */
+
+    var OFFSET_WIDTH = 'offsetWidth',
+        OFFSET_HEIGHT = 'offsetHeight',
+        undefined = undefined;
+
+    /**
+     * Node plugin which can be used to align a node with another node,
+     * region, or the viewport.
+     *
+     * @class Plugin.Align
+     * @param {Object} User configuration object
+     */
+    function Align(config) {
+        if (config.host) {
+            this._host = config.host;
+        }
+    }
+        
+    Align.prototype = {
+        /**
+         * Aligns node with a point on another node or region.
+         * Possible alignment points are:
+         * <dl>
+         *      <dt>tl</dt>
+         *      <dd>top left</dd>
+         *      <dt>tr</dt>
+         *      <dd>top right</dd>
+         *      <dt>bl</dt>
+         *      <dd>bottom left</dd>
+         *      <dt>br</dt>
+         *      <dd>bottom right</dd>
+         *      <dt>tc</dt>
+         *      <dd>top center</dd>
+         *      <dt>bc</dt>
+         *      <dd>bottom center</dd>
+         *      <dt>rc</dt>
+         *      <dd>right center</dd>
+         *      <dt>lc</dt>
+         *      <dd>left center</dd>
+         *      <dt>cc</dt>
+         *      <dd>center center</dd>
+         * </dl>
+         * @method to 
+         * @param region {String || Node || HTMLElement || Object} The node or
+         * region to align with. Defaults to the viewport region.
+         * @param regionPoint {String} The point of the region to align with.
+         * @param point {String} The point of the node aligned to the region. 
+         * @param resize {Boolean} Whether or not the node should re-align when
+         * the window is resized. Defaults to false.
+         */
+        to: function(region, regionPoint, point, syncOnResize) {
+            // cache original args for syncing
+            this._syncArgs = Y.Array(arguments);
+
+            if (region.top === undefined) {
+                region = Y.one(region).get('region');
+            }
+
+            if (region) {
+                var xy = [region.left, region.top],
+                    offxy = [region.width, region.height],
+                    points = Align.points,
+                    node = this._host,
+                    NULL = null,
+                    size = node.getAttrs([OFFSET_HEIGHT, OFFSET_WIDTH]),
+                    nodeoff = [0 - size[OFFSET_WIDTH], 0 - size[OFFSET_HEIGHT]], // reverse offsets
+                    regionFn0 = regionPoint ? points[regionPoint.charAt(0)]: NULL,
+                    regionFn1 = (regionPoint && regionPoint !== 'cc') ? points[regionPoint.charAt(1)] : NULL,
+                    nodeFn0 = point ? points[point.charAt(0)] : NULL,
+                    nodeFn1 = (point && point !== 'cc') ? points[point.charAt(1)] : NULL;
+
+                if (regionFn0) {
+                    xy = regionFn0(xy, offxy, regionPoint);
+                }
+                if (regionFn1) {
+                    xy = regionFn1(xy, offxy, regionPoint);
+                }
+
+                if (nodeFn0) {
+                    xy = nodeFn0(xy, nodeoff, point);
+                }
+                if (nodeFn1) {
+                    xy = nodeFn1(xy, nodeoff, point);
+                }
+
+                if (xy && node) {
+                    node.setXY(xy);
+                }
+                
+                this._resize(syncOnResize);
+
+            }
+            return this;
+        },
+
+        sync: function() {
+            this.to.apply(this, this._syncArgs);
+            return this;
+        },
+
+        _resize: function(add) {
+            var handle = this._handle;
+            if (add && !handle) {
+                this._handle = Y.on('resize', this._onresize, window, this);
+            } else if (!add && handle) {
+                handle.detach();
+            }
+
+        },
+
+        _onresize: function() {
+            var self = this;
+            setTimeout(function() { // for performance
+                self.sync();
+            });
+        },
+    
+        /**
+         * Aligns the center of a node to the center of another node or region.
+         * @method center 
+         * @param region {Node || HTMLElement || Object} optional The node or
+         * region to align with. Defaults to the viewport region.
+         * the window is resized. If centering to viewport, this defaults
+         * to true, otherwise default is false.
+         */
+        center: function(region, resize) {
+            this.to(region, 'cc', 'cc', resize); 
+            return this;
+        },
+
+        /**
+         * Removes the resize handler, if any. This is called automatically
+         * when unplugged from the host node.
+         * @method destroy 
+         */
+        destroy: function() {
+            var handle = this._handle;
+            if (handle) {
+                handle.detach();
+            }
+        }
+    };
+
+    Align.points = {
+        't': function(xy, off) {
+            return xy;
+        },
+
+        'r': function(xy, off) {
+            return [xy[0] + off[0], xy[1]];
+        },
+
+        'b': function(xy, off) {
+            return [xy[0], xy[1] + off[1]];
+        },
+
+        'l': function(xy, off) {
+            return xy;
+        },
+
+        'c': function(xy, off, point) {
+            var axis = (point[0] === 't' || point[0] === 'b') ?  0 : 1,
+                ret, val;
+
+            if (point === 'cc') {
+                ret = [xy[0] + off[0] / 2, xy[1] + off[1] / 2];
+            } else {
+                val = xy[axis] + off[axis] / 2;
+                ret = (axis) ? [xy[0], val] : [val, xy[1]];
+            }
+
+             return ret;
+        }
+    };
+
+    Align.NAME = 'Align';
+    Align.NS = 'align';
+
+    Align.prototype.constructor = Align;
+
+    Y.namespace('Plugin');
+    Y.Plugin.Align = Align;
+
+
+
+}, '3.10.3', {"requires": ["node-screen", "node-pluginhost"]});