src/cm/media/js/lib/yui/yui_3.0.0b1/build/widget/widget-position-ext.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('widget-position-ext', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * Provides extended/advanced XY positioning support for Widgets, through an extension.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * It builds on top of the widget-position module, to provide alignmentment and centering support.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 * Future releases aim to add constrained and fixed positioning support.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
 * @module widget-position-ext
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        var L = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
            ALIGN = "align",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
            BINDUI = "bindUI",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
            SYNCUI = "syncUI",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
            OFFSET_WIDTH = "offsetWidth",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
            OFFSET_HEIGHT = "offsetHeight",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
            VIEWPORT_REGION = "viewportRegion",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
            REGION = "region",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
            AlignChange = "alignChange";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
         * Widget extension, which can be used to add extended XY positioning support to the base Widget class,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
         * through the <a href="Base.html#method_build">Base.build</a> method. This extension requires that 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
         * the WidgetPosition extension be added to the Widget (before WidgetPositionExt, if part of the same 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
         * extension list passed to Base.build).
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
         * @class WidgetPositionExt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
         * @param {Object} User configuration object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        function PositionExt(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
            if (!this.hasImpl(Y.WidgetPosition) || !this._posNode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
                Y.error("WidgetPosition needs to be added to the Widget, before WidgetPositionExt is added"); 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
            Y.after(this._syncUIPosExtras, this, SYNCUI);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
            Y.after(this._bindUIPosExtras, this, BINDUI);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
         * Static property used to define the default attribute 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
         * configuration introduced by WidgetPositionExt.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
         * @property WidgetPositionExt.ATTRS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
         * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        PositionExt.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
             * @attribute align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
             * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
             * @default null
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
             * @desciption The align attribute is used to align a reference point on the widget, with the refernce point on another node, or the viewport. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
             * The object which align expects has the following properties:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
             * <dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
             *       <dt>node</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
             *       <dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
             *         The node to which the Widget is to be aligned. If set to null, or not provided, the Widget is aligned to the viewport
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
             *       </dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
             *       <dt>points</dt>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
             *       <dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
             *         <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
             *         A two element array, defining the two points on the Widget and node/viewport which are to be aligned. The first element is the point on the Widget, and the second element is the point on the node/viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
             *         Supported alignment points are defined as static properties on <code>WidgetPositionExt</code>.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
             *         </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
             *         <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
             *         e.g. <code>[WidgetPositionExt.TR, WidgetPositionExt.TL]</code> aligns the Top-Right corner of the Widget with the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
             *         Top-Left corner of the node/viewport, and <code>[WidgetPositionExt.CC, WidgetPositionExt.TC]</code> aligns the Center of the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
             *         Widget with the Top-Center edge of the node/viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
             *         </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
             *       </dd>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
             *   </dl>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
            align: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
                value:null
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
             * @attribute centered
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
             * @type {boolean | node} 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
             * @default false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
             * @description A convenience attribute, which can be used as a shortcut for the align attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
             * If set to true, the Widget is centered in the viewport. If set to a node reference or valid selector string,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
             * the Widget will be centered within the node. If set the false, no center positioning is applied.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
            centered: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                setter: function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                    return this._setAlignCenter(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
                },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
                value:false
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
         * Constant used to specify the top-left corner for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
         * @property WidgetPositionExt.TL
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
         * @value "tl"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        PositionExt.TL = "tl";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
         * Constant used to specify the top-right corner for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
         * @property WidgetPositionExt.TR
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
         * @value "tr"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
        PositionExt.TR = "tr";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
         * Constant used to specify the bottom-left corner for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
         * @property WidgetPositionExt.BL
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
         * @value "bl"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
        PositionExt.BL = "bl";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
         * Constant used to specify the bottom-right corner for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
         * @property WidgetPositionExt.BR
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
         * @value "br"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
        PositionExt.BR = "br";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
         * Constant used to specify the top edge-center point for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
         * @property WidgetPositionExt.TC
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
         * @value "tc"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
        PositionExt.TC = "tc";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
         * Constant used to specify the right edge, center point for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
         * @property WidgetPositionExt.RC
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
         * @value "rc"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
        PositionExt.RC = "rc";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
         * Constant used to specify the bottom edge, center point for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
         * @property WidgetPositionExt.BC
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
         * @value "bc"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        PositionExt.BC = "bc";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
         * Constant used to specify the left edge, center point for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
         * @property WidgetPositionExt.LC
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
         * @value "lc"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
        PositionExt.LC = "lc";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
         * Constant used to specify the center of widget/node/viewport for alignment
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
         * @property WidgetPositionExt.CC
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
         * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
         * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
         * @value "cc"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
        PositionExt.CC = "cc";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
        PositionExt.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
             * Synchronizes the UI to match the Widgets extended positioning state.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
             * This method in invoked after syncUI is invoked for the Widget class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
             * using YUI's aop infrastructure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
             *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
             * @method _syncUIPosExtras
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
            _syncUIPosExtras : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
                var align = this.get(ALIGN);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
                if (align) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
                    this._uiSetAlign(align.node, align.points);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
             * Binds event listeners responsible for updating the UI state in response to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
             * Widget extended positioning related state changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
             * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
             * This method is invoked after bindUI is invoked for the Widget class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
             * using YUI's aop infrastructure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
             * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
             * @method _bindUIStack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
            _bindUIPosExtras : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
                this.after(AlignChange, this._afterAlignChange);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
             * Default setter for center attribute changes. Sets up the appropriate value, and passes 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
             * it through the to the align attribute.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
             *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
             * @method _setAlignCenter
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
             * @param {boolean | node} The attribute value being set. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
             * @return {Number} The attribute value being set.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
            _setAlignCenter : function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
                if (val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
                    this.set(ALIGN, {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
                        node: val === true ? null : val,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
                        points: [PositionExt.CC, PositionExt.CC]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
                    });
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
                return val;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
             * Default attribute change listener for the align attribute, responsible
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
             * for updating the UI, in response to attribute changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
             * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
             * @method _afterAlignChange
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
             * @param {EventFacade} e The event facade for the attribute change
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
            _afterAlignChange : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
                if (e.newVal) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
                    this._uiSetAlign(e.newVal.node, e.newVal.points);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
             * Updates the UI to reflect the align value passed in (see the align attribute documentation, for the object stucture expected)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
             * @method _uiSetAlign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
             * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
             * @param {Node | null} The node to align to, or null to indicate the viewport
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
            _uiSetAlign: function (node, points) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
                if (!L.isArray(points) || points.length != 2) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
                    Y.error("align: Invalid Points Arguments");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
                    return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                var nodeRegion, widgetPoint, nodePoint, xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                if (!node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
                    nodeRegion = this._posNode.get(VIEWPORT_REGION);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
                    node = Y.Node.get(node);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
                    if (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
                        nodeRegion = node.get(REGION);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
                if (nodeRegion) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
                    // TODO: ViewportRegion doesn't have width/height - Workaround until normalized in Node/Dom
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
                    nodeRegion.width = nodeRegion.width || nodeRegion.right - nodeRegion.left;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
                    nodeRegion.height = nodeRegion.height || nodeRegion.bottom - nodeRegion.top;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
                    widgetPoint = points[0];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
                    nodePoint = points[1];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
                    // TODO: Optimize KWeight - Would lookup table help?
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                    switch (nodePoint) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
                        case PositionExt.TL:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
                            xy = [nodeRegion.left, nodeRegion.top];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
                        case PositionExt.TR:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
                            xy = [nodeRegion.right, nodeRegion.top];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
                        case PositionExt.BL:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
                            xy = [nodeRegion.left, nodeRegion.bottom];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
                        case PositionExt.BR:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
                            xy = [nodeRegion.right, nodeRegion.bottom];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
                        case PositionExt.TC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
                            xy = [nodeRegion.left + Math.floor(nodeRegion.width/2), nodeRegion.top];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
                        case PositionExt.BC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
                            xy = [nodeRegion.left + Math.floor(nodeRegion.width/2), nodeRegion.bottom];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
                        case PositionExt.LC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
                            xy = [nodeRegion.left, nodeRegion.top + Math.floor(nodeRegion.height/2)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
                        case PositionExt.RC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
                            xy = [nodeRegion.right, nodeRegion.top + Math.floor(nodeRegion.height/2), widgetPoint];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
                        case PositionExt.CC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
                            xy = [nodeRegion.left + Math.floor(nodeRegion.width/2), nodeRegion.top + Math.floor(nodeRegion.height/2), widgetPoint];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
                        default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
                            break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   313
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   314
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   315
                    if (xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
                        this._doAlign(widgetPoint, xy[0], xy[1]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
             * Helper method, used to align the given point on the widget, with the XY page co-ordinates provided.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
             *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
             * @method _doAlign
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
             * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
             * @param {String} widgetPoint Supported point constant (e.g. WidgetPositionExt.TL)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
             * @param {Number} x X page co-ordinate to align to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
             * @param {Number} y Y page co-ordinate to align to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
            _doAlign : function(widgetPoint, x, y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
                var widgetNode = this._posNode,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
                    xy;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
                switch (widgetPoint) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
                    case PositionExt.TL:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
                        xy = [x, y];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
                    case PositionExt.TR:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
                        xy = [x - widgetNode.get(OFFSET_WIDTH), y];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
                    case PositionExt.BL:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
                        xy = [x, y - widgetNode.get(OFFSET_HEIGHT)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
                    case PositionExt.BR:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
                        xy = [x - widgetNode.get(OFFSET_WIDTH), y - widgetNode.get(OFFSET_HEIGHT)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
                    case PositionExt.TC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
                        xy = [x - (widgetNode.get(OFFSET_WIDTH)/2), y];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
                    case PositionExt.BC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
                        xy = [x - (widgetNode.get(OFFSET_WIDTH)/2), y - widgetNode.get(OFFSET_HEIGHT)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
                    case PositionExt.LC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
                        xy = [x, y - (widgetNode.get(OFFSET_HEIGHT)/2)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
                    case PositionExt.RC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
                        xy = [(x - widgetNode.get(OFFSET_WIDTH)), y - (widgetNode.get(OFFSET_HEIGHT)/2)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
                    case PositionExt.CC:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
                        xy = [x - (widgetNode.get(OFFSET_WIDTH)/2), y - (widgetNode.get(OFFSET_HEIGHT)/2)];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                    default:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                        break;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                if (xy) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
                    this.move(xy);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   368
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   369
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   370
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   371
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   372
             * Aligns the Widget to the provided node (or viewport) using the provided
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
             * points. The method can be invoked directly, however it will result in 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
             * the align attribute being out of sync with current position of the of Widget.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   375
             * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   376
             * @method align
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
             * @param {Node | String | null} node A reference (or selector string) for the Node which with the Widget is to be aligned.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
             * If null is passed in, the Widget will be aligned with the viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
             * @param {Array[2]} points A two element array, specifying the points on the Widget and node/viewport which need to be aligned. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
             * The first entry is the point on the Widget, and the second entry is the point on the node/viewport which need to align.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
             * Valid point references are defined as static constants on the WidgetPositionExt class. 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
             * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
             * e.g. [WidgetPositionExt.TL, WidgetPositionExt.TR] will align the top-left corner of the Widget with the top-right corner of the node/viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
            align: function (node, points) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
                this.set(ALIGN, {node: node, points:points});
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   387
            },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   388
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   389
            /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
             * Centers the container in the viewport, or if a node is passed in,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
             * the node.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
             *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
             * @method centered
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
             * @param {Node | String} node Optional. A node reference or selector string defining the node 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
             * inside which the Widget is to be centered. If not passed in, the Widget will be centered in the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
             * viewport.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
             */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
            centered: function (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
                this.align(node, [PositionExt.CC, PositionExt.CC]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   400
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   401
        };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   402
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   403
        Y.WidgetPositionExt = PositionExt;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   404
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   405
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   406
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   407
}, '3.0.0b1' ,{requires:['widget', 'widget-position']});