src/cm/media/js/lib/yui/yui_3.0.0b1/build/widget/widget-stack.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-stack', 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 stackable (z-index) 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
 * @module widget-stack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
    var L = Y.Lang,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
        UA = Y.UA,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
        Node = Y.Node,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
        Widget = Y.Widget,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
        ZINDEX = "zIndex",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
        SHIM = "shim",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
        VISIBLE = "visible",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
        BOUNDING_BOX = "boundingBox",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
        RENDER_UI = "renderUI",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
        BIND_UI = "bindUI",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
        SYNC_UI = "syncUI",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
        OFFSET_WIDTH = "offsetWidth",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
        OFFSET_HEIGHT = "offsetHeight",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
        PARENT_NODE = "parentNode",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
        FIRST_CHILD = "firstChild",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
        WIDTH = "width",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
        HEIGHT = "height",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
        PX = "px",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
        // HANDLE KEYS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
        SHIM_DEFERRED = "shimdeferred",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
        SHIM_RESIZE = "shimresize",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
        // Events
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
        VisibleChange = "visibleChange",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
        WidthChange = "widthChange",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        HeightChange = "heightChange",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
        ShimChange = "shimChange",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        ZIndexChange = "zIndexChange",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        ContentUpdate = "contentUpdate",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        // CSS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        STACKED = "stacked";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
     * Widget extension, which can be used to add stackable (z-index) support to the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
     * base Widget class along with a shimming solution, through the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
     * <a href="Base.html#method_build">Base.build</a> method.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
     * @class WidgetStack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
     * @param {Object} User configuration object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
    function Stack(config) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        this._stackNode = this.get(BOUNDING_BOX);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        this._stackHandles = {};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        // WIDGET METHOD OVERLAP
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        Y.after(this._renderUIStack, this, RENDER_UI);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
        Y.after(this._syncUIStack, this, SYNC_UI);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        Y.after(this._bindUIStack, this, BIND_UI);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
    // Static Properties
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
     * Static property used to define the default attribute 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
     * configuration introduced by WidgetStack.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
     * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
     * @property WidgetStack.ATTRS
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
     * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
    Stack.ATTRS = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
         * @attribute shim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
         * @type boolean
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
         * @default false, for all browsers other than IE6, for which a shim is enabled by default.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
         * @description Boolean flag to indicate whether or not a shim should be added to the Widgets
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
         * boundingBox, to protect it from select box bleedthrough.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
        shim: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
            value: (UA.ie == 6)
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
         * @attribute zIndex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
         * @type number
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
         * @default 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
         * @description The z-index to apply to the Widgets boundingBox. Non-numerical values for 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
         * zIndex will be converted to 0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        zIndex: {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
            value:0,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
            setter: function(val) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
                return this._setZIndex(val);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
     * The HTML parsing rules for the WidgetStack class.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
     * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
     * @property WidgetStack.HTML_PARSER
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
     * @type Object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
    Stack.HTML_PARSER = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
        zIndex: function(contentBox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
            return contentBox.getStyle(ZINDEX);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
     * Default class used to mark the shim element
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
     * @property WidgetStack.SHIM_CLASS_NAME
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
     * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
     * @default "yui-widget-shim"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
    Stack.SHIM_CLASS_NAME = Widget.getClassName(SHIM);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
     * Default class used to mark the boundingBox of a stacked widget.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
     * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
     * @property WidgetStack.STACKED_CLASS_NAME
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
     * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
     * @default "yui-widget-stacked"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
    Stack.STACKED_CLASS_NAME = Widget.getClassName(STACKED);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
     * Default markup template used to generate the shim element.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
     * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
     * @property WidgetStack.SHIM_TEMPLATE
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
     * @type String
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
     * @static
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
    Stack.SHIM_TEMPLATE = '<iframe class="' + Stack.SHIM_CLASS_NAME + '" frameborder="0" title="Widget Stacking Shim" src="javascript:false" tabindex="-1" role="presentation"></iframe>';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
    Stack.prototype = {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
         * Synchronizes the UI to match the Widgets stack state. This method in 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
         * invoked after syncUI is invoked for the Widget class using YUI's aop infrastructure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
         * @method _syncUIStack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
        _syncUIStack: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
            this._uiSetShim(this.get(SHIM));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
            this._uiSetZIndex(this.get(ZINDEX));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
         * Binds event listeners responsible for updating the UI state in response to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
         * Widget stack related state changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
         * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
         * This method is invoked after bindUI is invoked for the Widget class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
         * using YUI's aop infrastructure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
         * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
         * @method _bindUIStack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
        _bindUIStack: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
            this.after(ShimChange, this._afterShimChange);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
            this.after(ZIndexChange, this._afterZIndexChange);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
         * Creates/Initializes the DOM to support stackability.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
         * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
         * This method in invoked after renderUI is invoked for the Widget class
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
         * using YUI's aop infrastructure.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
         * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
         * @method _renderUIStack
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
        _renderUIStack: function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
            this._stackNode.addClass(Stack.STACKED_CLASS_NAME);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
         * Default setter for zIndex attribute changes. Normalizes zIndex values to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
         * numbers, converting non-numerical values to 0.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
         * @method _setZIndex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
         * @param {String | Number} zIndex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
         * @return {Number} Normalized zIndex
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
        _setZIndex: function(zIndex) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
            if (L.isString(zIndex)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
                zIndex = parseInt(zIndex, 10);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
            if (!L.isNumber(zIndex)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
                zIndex = 0;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
            return zIndex;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
         * Default attribute change listener for the shim attribute, responsible
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
         * for updating the UI, in response to attribute changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
         * @method _afterShimChange
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
         * @param {EventFacade} e The event facade for the attribute change
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
        _afterShimChange : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
            this._uiSetShim(e.newVal);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
         * Default attribute change listener for the zIndex attribute, responsible
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
         * for updating the UI, in response to attribute changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
         * @method _afterZIndexChange
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
         * @protected
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
         * @param {EventFacade} e The event facade for the attribute change
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
        _afterZIndexChange : function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
            this._uiSetZIndex(e.newVal);
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
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
         * Updates the UI to reflect the zIndex value passed in.
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 _uiSetZIndex
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 {number} zIndex The zindex to be reflected in the UI
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
        _uiSetZIndex: function (zIndex) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
            this._stackNode.setStyle(ZINDEX, zIndex);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
        },
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
         * Updates the UI to enable/disable the shim. If the widget is not currently visible,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
         * creation of the shim is deferred until it is made visible, for performance reasons.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
         * @method _uiSetShim
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 {boolean} enable If true, creates/renders the shim, if false, removes it.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
        _uiSetShim: function (enable) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
            if (enable) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
                // Lazy creation
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
                if (this.get(VISIBLE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
                    this._renderShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
                    this._renderShimDeferred();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
            } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
                this._destroyShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
         * Sets up change handlers for the visible attribute, to defer shim creation/rendering 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
         * until the Widget is made visible.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
         * 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
         * @method _renderShimDeferred
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
        _renderShimDeferred : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
            this._stackHandles[SHIM_DEFERRED] = this._stackHandles[SHIM_DEFERRED] || [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
            var handles = this._stackHandles[SHIM_DEFERRED],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
                createBeforeVisible = function(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
                    if (e.newVal) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
                        this._renderShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
                };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
            handles.push(this.on(VisibleChange, createBeforeVisible));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
         * Sets up event listeners to resize the shim when the size of the Widget changes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
         * <p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
         * NOTE: This method is only used for IE6 currently, since IE6 doesn't support a way to
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
         * resize the shim purely through CSS, when the Widget does not have an explicit width/height 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
         * set.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
         * </p>
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
         * @method _addShimResizeHandlers
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
        _addShimResizeHandlers : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
            this._stackHandles[SHIM_RESIZE] = this._stackHandles[SHIM_RESIZE] || [];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
            var sizeShim = this.sizeShim,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
                handles = this._stackHandles[SHIM_RESIZE];
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   306
            this.sizeShim();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   307
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   308
            handles.push(this.after(VisibleChange, sizeShim));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   309
            handles.push(this.after(WidthChange, sizeShim));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   310
            handles.push(this.after(HeightChange, sizeShim));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   311
            handles.push(this.after(ContentUpdate, sizeShim));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   312
        },
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
         * Detaches any handles stored for the provided key
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   316
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   317
         * @method _detachStackHandles
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   318
         * @param String handleKey The key defining the group of handles which should be detached
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   319
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   320
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   321
        _detachStackHandles : function(handleKey) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   322
            var handles = this._stackHandles[handleKey],
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   323
                handle;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   324
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   325
            if (handles && handles.length > 0) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   326
                while((handle = handles.pop())) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   327
                    handle.detach();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   328
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   329
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   330
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   331
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   332
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   333
         * Creates the shim element and adds it to the DOM
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   334
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   335
         * @method _renderShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   336
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   337
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   338
        _renderShim : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   339
            var shimEl = this._shimNode,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   340
                stackEl = this._stackNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   341
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   342
            if (!shimEl) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   343
                shimEl = this._shimNode = this._getShimTemplate();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   344
                stackEl.insertBefore(shimEl, stackEl.get(FIRST_CHILD));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   345
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   346
                if (UA.ie == 6) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   347
                    this._addShimResizeHandlers();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   348
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   349
                this._detachStackHandles(SHIM_DEFERRED);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   350
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   351
        },
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   352
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   353
        /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   354
         * Removes the shim from the DOM, and detaches any related event
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   355
         * listeners.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   356
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   357
         * @method _destroyShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   358
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   359
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   360
        _destroyShim : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   361
            if (this._shimNode) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   362
                this._shimNode.get(PARENT_NODE).removeChild(this._shimNode);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   363
                this._shimNode = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   364
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   365
                this._detachStackHandles(SHIM_DEFERRED);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   366
                this._detachStackHandles(SHIM_RESIZE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   367
            }
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
         * For IE6, synchronizes the size and position of iframe shim to that of 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   373
         * Widget bounding box which it is protecting. For all other browsers,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   374
         * this method does not do anything.
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 sizeShim
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   377
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   378
        sizeShim: function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   379
            var shim = this._shimNode,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   380
                node = this._stackNode;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   381
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   382
            if (shim && UA.ie === 6 && this.get(VISIBLE)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   383
                shim.setStyle(WIDTH, node.get(OFFSET_WIDTH) + PX);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   384
                shim.setStyle(HEIGHT, node.get(OFFSET_HEIGHT) + PX);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   385
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   386
        },
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
         * Creates a cloned shim node, using the SHIM_TEMPLATE html template, for use on a new instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   390
         *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   391
         * @method _getShimTemplate
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   392
         * @private
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   393
         * @return {Node} node A new shim Node instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   394
         */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   395
        _getShimTemplate : function() {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   396
            if (!Stack._SHIM_TEMPLATE) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   397
                Stack._SHIM_TEMPLATE = Node.create(Stack.SHIM_TEMPLATE);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   398
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   399
            return Stack._SHIM_TEMPLATE.cloneNode(true);
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.WidgetStack = Stack;
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']});