src/cm/media/js/lib/yui/yui3-3.15.0/build/widget-base/widget-base.js
author gibus
Mon, 10 Mar 2014 15:19:48 +0100
changeset 602 e16a97fb364a
permissions -rw-r--r--
Use YUI 3.15
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
602
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     1
YUI.add('widget-base', function (Y, NAME) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     2
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     3
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     4
 * Provides the base Widget class, with HTML Parser support
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     5
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     6
 * @module widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     7
 * @main widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     8
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
     9
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    10
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    11
 * Provides the base Widget class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    12
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    13
 * @module widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    14
 * @submodule widget-base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    15
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    16
var L = Y.Lang,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    17
    Node = Y.Node,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    18
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    19
    ClassNameManager = Y.ClassNameManager,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    20
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    21
    _getClassName = ClassNameManager.getClassName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    22
    _getWidgetClassName,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    23
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    24
    _toInitialCap = Y.cached(function(str) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    25
        return str.substring(0, 1).toUpperCase() + str.substring(1);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    26
    }),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    27
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    28
    // K-Weight, IE GC optimizations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    29
    CONTENT = "content",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    30
    VISIBLE = "visible",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    31
    HIDDEN = "hidden",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    32
    DISABLED = "disabled",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    33
    FOCUSED = "focused",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    34
    WIDTH = "width",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    35
    HEIGHT = "height",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    36
    BOUNDING_BOX = "boundingBox",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    37
    CONTENT_BOX = "contentBox",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    38
    PARENT_NODE = "parentNode",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    39
    OWNER_DOCUMENT = "ownerDocument",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    40
    AUTO = "auto",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    41
    SRC_NODE = "srcNode",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    42
    BODY = "body",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    43
    TAB_INDEX = "tabIndex",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    44
    ID = "id",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    45
    RENDER = "render",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    46
    RENDERED = "rendered",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    47
    DESTROYED = "destroyed",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    48
    STRINGS = "strings",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    49
    DIV = "<div></div>",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    50
    CHANGE = "Change",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    51
    LOADING = "loading",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    52
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    53
    _UISET = "_uiSet",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    54
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    55
    EMPTY_STR = "",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    56
    EMPTY_FN = function() {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    57
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    58
    TRUE = true,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    59
    FALSE = false,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    60
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    61
    UI,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    62
    ATTRS = {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    63
    UI_ATTRS = [VISIBLE, DISABLED, HEIGHT, WIDTH, FOCUSED, TAB_INDEX],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    64
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    65
    WEBKIT = Y.UA.webkit,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    66
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    67
    // Widget nodeid-to-instance map.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    68
    _instances = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    69
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    70
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    71
 * A base class for widgets, providing:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    72
 * <ul>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    73
 *    <li>The render lifecycle method, in addition to the init and destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    74
 *        lifecycle methods provide by Base</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    75
 *    <li>Abstract methods to support consistent MVC structure across
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    76
 *        widgets: renderer, renderUI, bindUI, syncUI</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    77
 *    <li>Support for common widget attributes, such as boundingBox, contentBox, visible,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    78
 *        disabled, focused, strings</li>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    79
 * </ul>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    80
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    81
 * @param config {Object} Object literal specifying widget configuration properties.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    82
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    83
 * @class Widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    84
 * @constructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    85
 * @extends Base
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    86
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    87
function Widget(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    88
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    89
    // kweight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    90
    var widget = this,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    91
        parentNode,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    92
        render,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    93
        constructor = widget.constructor;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    94
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    95
    widget._strs = {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    96
    widget._cssPrefix = constructor.CSS_PREFIX || _getClassName(constructor.NAME.toLowerCase());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    97
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    98
    // We need a config for HTML_PARSER to work.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
    99
    config = config || {};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   100
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   101
    Widget.superclass.constructor.call(widget, config);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   102
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   103
    render = widget.get(RENDER);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   104
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   105
    if (render) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   106
        // Render could be a node or boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   107
        if (render !== TRUE) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   108
            parentNode = render;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   109
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   110
        widget.render(parentNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   111
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   112
}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   113
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   114
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   115
 * Static property provides a string to identify the class.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   116
 * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   117
 * Currently used to apply class identifiers to the bounding box
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   118
 * and to classify events fired by the widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   119
 * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   120
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   121
 * @property NAME
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   122
 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   123
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   124
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   125
Widget.NAME = "widget";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   126
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   127
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   128
 * Constant used to identify state changes originating from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   129
 * the DOM (as opposed to the JavaScript model).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   130
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   131
 * @property UI_SRC
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   132
 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   133
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   134
 * @final
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   135
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   136
UI = Widget.UI_SRC = "ui";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   137
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   138
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   139
 * Static property used to define the default attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   140
 * configuration for the Widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   141
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   142
 * @property ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   143
 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   144
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   145
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   146
Widget.ATTRS = ATTRS;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   148
// Trying to optimize kweight by setting up attrs this way saves about 0.4K min'd
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   149
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   150
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   151
 * @attribute id
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   152
 * @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   153
 * @default Generated using guid()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   154
 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   155
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   156
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   157
ATTRS[ID] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   158
    valueFn: "_guid",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   159
    writeOnce: TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   160
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   161
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   162
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   163
 * Flag indicating whether or not this Widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   164
 * has been through the render lifecycle phase.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   165
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   166
 * @attribute rendered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   167
 * @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   168
 * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   169
 * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   170
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   171
ATTRS[RENDERED] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   172
    value:FALSE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   173
    readOnly: TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   174
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   175
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   176
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   177
 * @attribute boundingBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   178
 * @description The outermost DOM node for the Widget, used for sizing and positioning
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   179
 * of a Widget as well as a containing element for any decorator elements used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   180
 * for skinning.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   181
 * @type String | Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   182
 * @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   183
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   184
ATTRS[BOUNDING_BOX] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   185
    valueFn:"_defaultBB",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   186
    setter: "_setBB",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   187
    writeOnce: TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   188
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   189
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   190
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   191
 * @attribute contentBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   192
 * @description A DOM node that is a direct descendant of a Widget's bounding box that
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   193
 * houses its content.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   194
 * @type String | Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   195
 * @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   196
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   197
ATTRS[CONTENT_BOX] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   198
    valueFn:"_defaultCB",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   199
    setter: "_setCB",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   200
    writeOnce: TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   201
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   202
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   203
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   204
 * @attribute tabIndex
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   205
 * @description Number (between -32767 to 32767) indicating the widget's
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   206
 * position in the default tab flow.  The value is used to set the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   207
 * "tabIndex" attribute on the widget's bounding box.  Negative values allow
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   208
 * the widget to receive DOM focus programmatically (by calling the focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   209
 * method), while being removed from the default tab flow.  A value of
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   210
 * null removes the "tabIndex" attribute from the widget's bounding box.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   211
 * @type Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   212
 * @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   213
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   214
ATTRS[TAB_INDEX] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   215
    value: null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   216
    validator: "_validTabIndex"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   217
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   218
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   219
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   220
 * @attribute focused
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   221
 * @description Boolean indicating if the Widget, or one of its descendants,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   222
 * has focus.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   223
 * @readOnly
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   224
 * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   225
 * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   226
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   227
ATTRS[FOCUSED] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   228
    value: FALSE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   229
    readOnly:TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   230
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   231
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   232
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   233
 * @attribute disabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   234
 * @description Boolean indicating if the Widget should be disabled. The disabled implementation
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   235
 * is left to the specific classes extending widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   236
 * @default false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   237
 * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   238
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   239
ATTRS[DISABLED] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   240
    value: FALSE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   241
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   242
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   243
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   244
 * @attribute visible
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   245
 * @description Boolean indicating whether or not the Widget is visible.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   246
 * @default TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   247
 * @type boolean
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   248
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   249
ATTRS[VISIBLE] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   250
    value: TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   251
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   252
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   253
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   254
 * @attribute height
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   255
 * @description String with units, or number, representing the height of the Widget. If a number is provided,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   256
 * the default unit, defined by the Widgets DEF_UNIT, property is used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   257
 * @default EMPTY_STR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   258
 * @type {String | Number}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   259
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   260
ATTRS[HEIGHT] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   261
    value: EMPTY_STR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   262
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   263
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   264
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   265
 * @attribute width
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   266
 * @description String with units, or number, representing the width of the Widget. If a number is provided,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   267
 * the default unit, defined by the Widgets DEF_UNIT, property is used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   268
 * @default EMPTY_STR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   269
 * @type {String | Number}
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   270
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   271
ATTRS[WIDTH] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   272
    value: EMPTY_STR
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   273
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   275
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   276
 * @attribute strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   277
 * @description Collection of strings used to label elements of the Widget's UI.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   278
 * @default null
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   279
 * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   280
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   281
ATTRS[STRINGS] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   282
    value: {},
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   283
    setter: "_strSetter",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   284
    getter: "_strGetter"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   285
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   286
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   287
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   288
 * Whether or not to render the widget automatically after init, and optionally, to which parent node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   289
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   290
 * @attribute render
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   291
 * @type boolean | Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   292
 * @writeOnce
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   293
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   294
ATTRS[RENDER] = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   295
    value:FALSE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   296
    writeOnce:TRUE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   297
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   298
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   299
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   300
 * The css prefix which the static Widget.getClassName method should use when constructing class names
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   301
 *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   302
 * @property CSS_PREFIX
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   303
 * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   304
 * @default Widget.NAME.toLowerCase()
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   305
 * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   306
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   307
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   308
Widget.CSS_PREFIX = _getClassName(Widget.NAME.toLowerCase());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   309
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   310
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   311
 * Generate a standard prefixed classname for the Widget, prefixed by the default prefix defined
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   312
 * by the <code>Y.config.classNamePrefix</code> attribute used by <code>ClassNameManager</code> and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   313
 * <code>Widget.NAME.toLowerCase()</code> (e.g. "yui-widget-xxxxx-yyyyy", based on default values for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   314
 * the prefix and widget class name).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   315
 * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   316
 * The instance based version of this method can be used to generate standard prefixed classnames,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   317
 * based on the instances NAME, as opposed to Widget.NAME. This method should be used when you
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   318
 * need to use a constant class name across different types instances.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   319
 * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   320
 * @method getClassName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   321
 * @param {String*} args* 0..n strings which should be concatenated, using the default separator defined by ClassNameManager, to create the class name
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   322
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   323
Widget.getClassName = function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   324
    // arguments needs to be array'fied to concat
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   325
    return _getClassName.apply(ClassNameManager, [Widget.CSS_PREFIX].concat(Y.Array(arguments), true));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   326
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   327
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   328
_getWidgetClassName = Widget.getClassName;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   329
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   330
/**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   331
 * Returns the widget instance whose bounding box contains, or is, the given node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   332
 * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   333
 * In the case of nested widgets, the nearest bounding box ancestor is used to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   334
 * return the widget instance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   335
 * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   336
 * @method getByNode
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   337
 * @static
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   338
 * @param node {Node | String} The node for which to return a Widget instance. If a selector
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   339
 * string is passed in, which selects more than one node, the first node found is used.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   340
 * @return {Widget} Widget instance, or null if not found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   341
 */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   342
Widget.getByNode = function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   343
    var widget,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   344
        widgetMarker = _getWidgetClassName();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   345
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   346
    node = Node.one(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   347
    if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   348
        node = node.ancestor("." + widgetMarker, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   349
        if (node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   350
            widget = _instances[Y.stamp(node, true)];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   351
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   352
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   353
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   354
    return widget || null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   355
};
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   356
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   357
Y.extend(Widget, Y.Base, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   358
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   359
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   360
     * Returns a class name prefixed with the the value of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   361
     * <code>YUI.config.classNamePrefix</code> attribute + the instances <code>NAME</code> property.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   362
     * Uses <code>YUI.config.classNameDelimiter</code> attribute to delimit the provided strings.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   363
     * e.g.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   364
     * <code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   365
     * <pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   366
     *    // returns "yui-slider-foo-bar", for a slider instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   367
     *    var scn = slider.getClassName('foo','bar');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   368
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   369
     *    // returns "yui-overlay-foo-bar", for an overlay instance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   370
     *    var ocn = overlay.getClassName('foo','bar');
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   371
     * </pre>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   372
     * </code>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   373
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   374
     * @method getClassName
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   375
     * @param {String} [classnames*] One or more classname bits to be joined and prefixed
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   376
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   377
    getClassName: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   378
        return _getClassName.apply(ClassNameManager, [this._cssPrefix].concat(Y.Array(arguments), true));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   379
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   380
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   381
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   382
     * Initializer lifecycle implementation for the Widget class. Registers the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   383
     * widget instance, and runs through the Widget's HTML_PARSER definition.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   384
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   385
     * @method initializer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   386
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   387
     * @param  config {Object} Configuration object literal for the widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   388
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   389
    initializer: function(config) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   390
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   391
        var bb = this.get(BOUNDING_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   392
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   393
        if (bb instanceof Node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   394
            this._mapInstance(Y.stamp(bb));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   395
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   396
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   397
        /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   398
         * Notification event, which widget implementations can fire, when
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   399
         * they change the content of the widget. This event has no default
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   400
         * behavior and cannot be prevented, so the "on" or "after"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   401
         * moments are effectively equivalent (with on listeners being invoked before
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   402
         * after listeners).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   403
         *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   404
         * @event widget:contentUpdate
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   405
         * @preventable false
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   406
         * @param {EventFacade} e The Event Facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   407
         */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   408
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   409
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   410
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   411
     * Utility method used to add an entry to the boundingBox id to instance map.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   412
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   413
     * This method can be used to populate the instance with lazily created boundingBox Node references.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   414
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   415
     * @method _mapInstance
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   416
     * @param {String} The boundingBox id
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   417
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   418
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   419
    _mapInstance : function(id) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   420
        _instances[id] = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   421
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   422
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   423
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   424
     * Destructor lifecycle implementation for the Widget class. Purges events attached
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   425
     * to the bounding box and content box, removes them from the DOM and removes
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   426
     * the Widget from the list of registered widgets.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   427
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   428
     * @method destructor
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   429
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   430
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   431
    destructor: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   432
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   433
        var boundingBox = this.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   434
            bbGuid;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   435
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   436
        if (boundingBox instanceof Node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   437
            bbGuid = Y.stamp(boundingBox,true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   438
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   439
            if (bbGuid in _instances) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   440
                delete _instances[bbGuid];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   441
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   442
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   443
            this._destroyBox();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   444
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   445
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   446
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   447
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   448
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   449
     * Destroy lifecycle method. Fires the destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   450
     * event, prior to invoking destructors for the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   451
     * class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   452
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   453
     * Overrides Base's implementation, to support arguments to destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   454
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   455
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   456
     * Subscribers to the destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   457
     * event can invoke preventDefault on the event object, to prevent destruction
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   458
     * from proceeding.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   459
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   460
     * @method destroy
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   461
     * @param destroyAllNodes {Boolean} If true, all nodes contained within the Widget are
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   462
     * removed and destroyed. Defaults to false due to potentially high run-time cost.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   463
     * @return {Widget} A reference to this object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   464
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   465
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   466
    destroy: function(destroyAllNodes) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   467
        this._destroyAllNodes = destroyAllNodes;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   468
        return Widget.superclass.destroy.apply(this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   469
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   470
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   471
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   472
     * Removes and destroys the widgets rendered boundingBox, contentBox,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   473
     * and detaches bound UI events.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   474
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   475
     * @method _destroyBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   476
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   477
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   478
    _destroyBox : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   479
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   480
        var boundingBox = this.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   481
            contentBox = this.get(CONTENT_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   482
            deep = this._destroyAllNodes,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   483
            same;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   484
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   485
        same = boundingBox && boundingBox.compareTo(contentBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   486
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   487
        if (this.UI_EVENTS) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   488
            this._destroyUIEvents();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   489
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   490
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   491
        this._unbindUI(boundingBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   492
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   493
        if (contentBox) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   494
            if (deep) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   495
                contentBox.empty();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   496
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   497
            contentBox.remove(TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   498
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   499
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   500
        if (!same) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   501
            if (deep) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   502
                boundingBox.empty();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   503
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   504
            boundingBox.remove(TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   505
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   506
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   507
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   508
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   509
     * Establishes the initial DOM for the widget. Invoking this
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   510
     * method will lead to the creating of all DOM elements for
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   511
     * the widget (or the manipulation of existing DOM elements
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   512
     * for the progressive enhancement use case).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   513
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   514
     * This method should only be invoked once for an initialized
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   515
     * widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   516
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   517
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   518
     * It delegates to the widget specific renderer method to do
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   519
     * the actual work.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   520
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   521
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   522
     * @method render
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   523
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   524
     * @final
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   525
     * @param  parentNode {Object | String} Optional. The Node under which the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   526
     * Widget is to be rendered. This can be a Node instance or a CSS selector string.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   527
     * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   528
     * If the selector string returns more than one Node, the first node will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   529
     * as the parentNode. NOTE: This argument is required if both the boundingBox and contentBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   530
     * are not currently in the document. If it's not provided, the Widget will be rendered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   531
     * to the body of the current document in this case.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   532
     * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   533
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   534
    render: function(parentNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   535
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   536
        if (!this.get(DESTROYED) && !this.get(RENDERED)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   537
             /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   538
              * Lifecycle event for the render phase, fired prior to rendering the UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   539
              * for the widget (prior to invoking the widget's renderer method).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   540
              * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   541
              * Subscribers to the "on" moment of this event, will be notified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   542
              * before the widget is rendered.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   543
              * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   544
              * <p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   545
              * Subscribers to the "after" moment of this event, will be notified
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   546
              * after rendering is complete.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   547
              * </p>
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   548
              *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   549
              * @event render
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   550
              * @preventable _defRenderFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   551
              * @param {EventFacade} e The Event Facade
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   552
              */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   553
            this.publish(RENDER, {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   554
                queuable:FALSE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   555
                fireOnce:TRUE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   556
                defaultTargetOnly:TRUE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   557
                defaultFn: this._defRenderFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   558
            });
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   559
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   560
            this.fire(RENDER, {parentNode: (parentNode) ? Node.one(parentNode) : null});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   561
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   562
        return this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   563
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   564
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   565
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   566
     * Default render handler
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   567
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   568
     * @method _defRenderFn
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   569
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   570
     * @param {EventFacade} e The Event object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   571
     * @param {Node} parentNode The parent node to render to, if passed in to the <code>render</code> method
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   572
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   573
    _defRenderFn : function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   574
        this._parentNode = e.parentNode;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   575
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   576
        this.renderer();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   577
        this._set(RENDERED, TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   578
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   579
        this._removeLoadingClassNames();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   580
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   581
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   582
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   583
     * Creates DOM (or manipulates DOM for progressive enhancement)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   584
     * This method is invoked by render() and is not chained
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   585
     * automatically for the class hierarchy (unlike initializer, destructor)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   586
     * so it should be chained manually for subclasses if required.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   587
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   588
     * @method renderer
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   589
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   590
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   591
    renderer: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   592
        // kweight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   593
        var widget = this;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   594
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   595
        widget._renderUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   596
        widget.renderUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   597
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   598
        widget._bindUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   599
        widget.bindUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   600
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   601
        widget._syncUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   602
        widget.syncUI();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   603
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   604
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   605
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   606
     * Configures/Sets up listeners to bind Widget State to UI/DOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   607
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   608
     * This method is not called by framework and is not chained
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   609
     * automatically for the class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   610
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   611
     * @method bindUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   612
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   613
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   614
    bindUI: EMPTY_FN,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   615
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   616
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   617
     * Adds nodes to the DOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   618
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   619
     * This method is not called by framework and is not chained
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   620
     * automatically for the class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   621
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   622
     * @method renderUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   623
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   624
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   625
    renderUI: EMPTY_FN,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   626
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   627
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   628
     * Refreshes the rendered UI, based on Widget State
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   629
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   630
     * This method is not called by framework and is not chained
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   631
     * automatically for the class hierarchy.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   632
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   633
     * @method syncUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   634
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   635
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   636
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   637
    syncUI: EMPTY_FN,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   638
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   639
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   640
     * @method hide
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   641
     * @description Hides the Widget by setting the "visible" attribute to "false".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   642
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   643
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   644
    hide: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   645
        return this.set(VISIBLE, FALSE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   646
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   647
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   648
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   649
     * @method show
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   650
     * @description Shows the Widget by setting the "visible" attribute to "true".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   651
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   652
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   653
    show: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   654
        return this.set(VISIBLE, TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   655
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   656
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   657
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   658
     * @method focus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   659
     * @description Causes the Widget to receive the focus by setting the "focused"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   660
     * attribute to "true".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   661
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   662
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   663
    focus: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   664
        return this._set(FOCUSED, TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   665
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   666
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   667
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   668
     * @method blur
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   669
     * @description Causes the Widget to lose focus by setting the "focused" attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   670
     * to "false"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   671
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   672
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   673
    blur: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   674
        return this._set(FOCUSED, FALSE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   675
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   676
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   677
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   678
     * @method enable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   679
     * @description Set the Widget's "disabled" attribute to "false".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   680
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   681
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   682
    enable: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   683
        return this.set(DISABLED, FALSE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   684
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   685
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   686
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   687
     * @method disable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   688
     * @description Set the Widget's "disabled" attribute to "true".
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   689
     * @chainable
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   690
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   691
    disable: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   692
        return this.set(DISABLED, TRUE);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   693
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   694
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   695
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   696
     * @method _uiSizeCB
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   697
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   698
     * @param {boolean} expand
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   699
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   700
    _uiSizeCB : function(expand) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   701
        this.get(CONTENT_BOX).toggleClass(_getWidgetClassName(CONTENT, "expanded"), expand);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   702
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   703
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   704
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   705
     * Helper method to collect the boundingBox and contentBox and append to the provided parentNode, if not
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   706
     * already a child. The owner document of the boundingBox, or the owner document of the contentBox will be used
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   707
     * as the document into which the Widget is rendered if a parentNode is node is not provided. If both the boundingBox and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   708
     * the contentBox are not currently in the document, and no parentNode is provided, the widget will be rendered
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   709
     * to the current document's body.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   710
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   711
     * @method _renderBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   712
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   713
     * @param {Node} parentNode The parentNode to render the widget to. If not provided, and both the boundingBox and
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   714
     * the contentBox are not currently in the document, the widget will be rendered to the current document's body.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   715
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   716
    _renderBox: function(parentNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   717
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   718
        // TODO: Performance Optimization [ More effective algo to reduce Node refs, compares, replaces? ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   719
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   720
        var widget = this, // kweight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   721
            contentBox = widget.get(CONTENT_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   722
            boundingBox = widget.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   723
            srcNode = widget.get(SRC_NODE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   724
            defParentNode = widget.DEF_PARENT_NODE,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   725
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   726
            doc = (srcNode && srcNode.get(OWNER_DOCUMENT)) || boundingBox.get(OWNER_DOCUMENT) || contentBox.get(OWNER_DOCUMENT);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   727
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   728
        // If srcNode (assume it's always in doc), have contentBox take its place (widget render responsible for re-use of srcNode contents)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   729
        if (srcNode && !srcNode.compareTo(contentBox) && !contentBox.inDoc(doc)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   730
            srcNode.replace(contentBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   731
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   732
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   733
        if (!boundingBox.compareTo(contentBox.get(PARENT_NODE)) && !boundingBox.compareTo(contentBox)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   734
            // If contentBox box is already in the document, have boundingBox box take it's place
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   735
            if (contentBox.inDoc(doc)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   736
                contentBox.replace(boundingBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   737
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   738
            boundingBox.appendChild(contentBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   739
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   740
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   741
        parentNode = parentNode || (defParentNode && Node.one(defParentNode));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   742
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   743
        if (parentNode) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   744
            parentNode.appendChild(boundingBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   745
        } else if (!boundingBox.inDoc(doc)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   746
            Node.one(BODY).insert(boundingBox, 0);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   747
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   748
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   749
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   750
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   751
     * Setter for the boundingBox attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   752
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   753
     * @method _setBB
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   754
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   755
     * @param {Node|String} node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   756
     * @return Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   757
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   758
    _setBB: function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   759
        return this._setBox(this.get(ID), node, this.BOUNDING_TEMPLATE, true);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   760
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   761
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   762
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   763
     * Setter for the contentBox attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   764
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   765
     * @method _setCB
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   766
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   767
     * @param {Node|String} node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   768
     * @return Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   769
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   770
    _setCB: function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   771
        return (this.CONTENT_TEMPLATE === null) ? this.get(BOUNDING_BOX) : this._setBox(null, node, this.CONTENT_TEMPLATE, false);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   772
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   773
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   774
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   775
     * Returns the default value for the boundingBox attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   776
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   777
     * For the Widget class, this will most commonly be null (resulting in a new
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   778
     * boundingBox node instance being created), unless a srcNode was provided
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   779
     * and CONTENT_TEMPLATE is null, in which case it will be srcNode.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   780
     * This behavior was introduced in @VERSION@ to accomodate single-box widgets
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   781
     * whose BB & CB both point to srcNode (e.g. Y.Button).
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   782
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   783
     * @method _defaultBB
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   784
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   785
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   786
    _defaultBB : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   787
        var node = this.get(SRC_NODE),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   788
            nullCT = (this.CONTENT_TEMPLATE === null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   789
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   790
        return ((node && nullCT) ? node : null);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   791
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   792
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   793
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   794
     * Returns the default value for the contentBox attribute.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   795
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   796
     * For the Widget class, this will be the srcNode if provided, otherwise null (resulting in
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   797
     * a new contentBox node instance being created)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   798
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   799
     * @method _defaultCB
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   800
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   801
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   802
    _defaultCB : function(node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   803
        return this.get(SRC_NODE) || null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   804
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   805
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   806
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   807
     * Helper method to set the bounding/content box, or create it from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   808
     * the provided template if not found.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   809
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   810
     * @method _setBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   811
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   812
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   813
     * @param {String} id The node's id attribute
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   814
     * @param {Node|String} node The node reference
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   815
     * @param {String} template HTML string template for the node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   816
     * @param {boolean} isBounding true if this is the boundingBox, false if it's the contentBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   817
     * @return {Node} The node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   818
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   819
    _setBox : function(id, node, template, isBounding) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   820
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   821
        node = Node.one(node);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   822
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   823
        if (!node) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   824
            node = Node.create(template);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   825
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   826
            if (isBounding) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   827
                this._bbFromTemplate = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   828
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   829
                this._cbFromTemplate = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   830
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   831
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   832
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   833
        if (!node.get(ID)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   834
            node.set(ID, id || Y.guid());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   835
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   836
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   837
        return node;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   838
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   839
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   840
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   841
     * Initializes the UI state for the Widget's bounding/content boxes.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   842
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   843
     * @method _renderUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   844
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   845
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   846
    _renderUI: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   847
        this._renderBoxClassNames();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   848
        this._renderBox(this._parentNode);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   849
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   850
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   851
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   852
     * Applies standard class names to the boundingBox and contentBox
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   853
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   854
     * @method _renderBoxClassNames
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   855
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   856
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   857
    _renderBoxClassNames : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   858
        var classes = this._getClasses(),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   859
            cl,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   860
            boundingBox = this.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   861
            i;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   862
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   863
        boundingBox.addClass(_getWidgetClassName());
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   864
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   865
        // Start from Widget Sub Class
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   866
        for (i = classes.length-3; i >= 0; i--) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   867
            cl = classes[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   868
            boundingBox.addClass(cl.CSS_PREFIX || _getClassName(cl.NAME.toLowerCase()));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   869
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   870
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   871
        // Use instance based name for content box
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   872
        this.get(CONTENT_BOX).addClass(this.getClassName(CONTENT));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   873
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   874
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   875
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   876
     * Removes class names representative of the widget's loading state from
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   877
     * the boundingBox.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   878
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   879
     * @method _removeLoadingClassNames
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   880
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   881
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   882
    _removeLoadingClassNames: function () {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   883
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   884
        var boundingBox = this.get(BOUNDING_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   885
            contentBox = this.get(CONTENT_BOX),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   886
            instClass = this.getClassName(LOADING),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   887
            widgetClass = _getWidgetClassName(LOADING);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   888
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   889
        boundingBox.removeClass(widgetClass)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   890
                   .removeClass(instClass);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   891
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   892
        contentBox.removeClass(widgetClass)
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   893
                  .removeClass(instClass);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   894
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   895
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   896
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   897
     * Sets up DOM and CustomEvent listeners for the widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   898
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   899
     * @method _bindUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   900
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   901
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   902
    _bindUI: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   903
        this._bindAttrUI(this._UI_ATTRS.BIND);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   904
        this._bindDOM();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   905
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   906
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   907
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   908
     * @method _unbindUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   909
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   910
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   911
    _unbindUI : function(boundingBox) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   912
        this._unbindDOM(boundingBox);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   913
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   914
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   915
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   916
     * Sets up DOM listeners, on elements rendered by the widget.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   917
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   918
     * @method _bindDOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   919
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   920
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   921
    _bindDOM : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   922
        var oDocument = this.get(BOUNDING_BOX).get(OWNER_DOCUMENT),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   923
            focusHandle = Widget._hDocFocus;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   924
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   925
        // Shared listener across all Widgets.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   926
        if (!focusHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   927
            focusHandle = Widget._hDocFocus = oDocument.on("focus", this._onDocFocus, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   928
            focusHandle.listeners = {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   929
                count: 0
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   930
            };
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   931
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   932
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   933
        focusHandle.listeners[Y.stamp(this, true)] = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   934
        focusHandle.listeners.count++;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   935
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   936
        //	Fix for Webkit:
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   937
        //	Document doesn't receive focus in Webkit when the user mouses
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   938
        //	down on it, so the "focused" attribute won't get set to the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   939
        //	correct value. Keeping this instance based for now, potential better performance.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   940
        //  Otherwise we'll end up looking up widgets from the DOM on every mousedown.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   941
        if (WEBKIT){
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   942
            this._hDocMouseDown = oDocument.on("mousedown", this._onDocMouseDown, this);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   943
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   944
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   945
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   946
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   947
     * @method _unbindDOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   948
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   949
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   950
    _unbindDOM : function(boundingBox) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   951
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   952
        var focusHandle = Widget._hDocFocus,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   953
            yuid = Y.stamp(this, true),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   954
            focusListeners,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   955
            mouseHandle = this._hDocMouseDown;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   956
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   957
        if (focusHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   958
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   959
            focusListeners = focusHandle.listeners;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   960
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   961
            if (focusListeners[yuid]) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   962
                delete focusListeners[yuid];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   963
                focusListeners.count--;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   964
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   965
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   966
            if (focusListeners.count === 0) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   967
                focusHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   968
                Widget._hDocFocus = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   969
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   970
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   971
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   972
        if (WEBKIT && mouseHandle) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   973
            mouseHandle.detach();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   974
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   975
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   976
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   977
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   978
     * Updates the widget UI to reflect the attribute state.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   979
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   980
     * @method _syncUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   981
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   982
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   983
    _syncUI: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   984
        this._syncAttrUI(this._UI_ATTRS.SYNC);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   985
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   986
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   987
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   988
     * Sets the height on the widget's bounding box element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   989
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   990
     * @method _uiSetHeight
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   991
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   992
     * @param {String | Number} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   993
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   994
    _uiSetHeight: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   995
        this._uiSetDim(HEIGHT, val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   996
        this._uiSizeCB((val !== EMPTY_STR && val !== AUTO));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   997
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   998
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
   999
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1000
     * Sets the width on the widget's bounding box element
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1001
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1002
     * @method _uiSetWidth
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1003
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1004
     * @param {String | Number} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1005
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1006
    _uiSetWidth: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1007
        this._uiSetDim(WIDTH, val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1008
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1009
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1010
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1011
     * @method _uiSetDim
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1012
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1013
     * @param {String} dim The dimension - "width" or "height"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1014
     * @param {Number | String} val The value to set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1015
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1016
    _uiSetDim: function(dimension, val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1017
        this.get(BOUNDING_BOX).setStyle(dimension, L.isNumber(val) ? val + this.DEF_UNIT : val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1018
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1019
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1020
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1021
     * Sets the visible state for the UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1022
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1023
     * @method _uiSetVisible
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1024
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1025
     * @param {boolean} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1026
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1027
    _uiSetVisible: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1028
        this.get(BOUNDING_BOX).toggleClass(this.getClassName(HIDDEN), !val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1029
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1030
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1031
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1032
     * Sets the disabled state for the UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1033
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1034
     * @method _uiSetDisabled
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1035
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1036
     * @param {boolean} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1037
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1038
    _uiSetDisabled: function(val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1039
        this.get(BOUNDING_BOX).toggleClass(this.getClassName(DISABLED), val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1040
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1041
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1042
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1043
     * Sets the focused state for the UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1044
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1045
     * @method _uiSetFocused
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1046
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1047
     * @param {boolean} val
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1048
     * @param {string} src String representing the source that triggered an update to
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1049
     * the UI.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1050
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1051
    _uiSetFocused: function(val, src) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1052
         var boundingBox = this.get(BOUNDING_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1053
         boundingBox.toggleClass(this.getClassName(FOCUSED), val);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1054
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1055
         if (src !== UI) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1056
            if (val) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1057
                boundingBox.focus();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1058
            } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1059
                boundingBox.blur();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1060
            }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1061
         }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1062
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1063
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1064
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1065
     * Set the tabIndex on the widget's rendered UI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1066
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1067
     * @method _uiSetTabIndex
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1068
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1069
     * @param Number
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1070
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1071
    _uiSetTabIndex: function(index) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1072
        var boundingBox = this.get(BOUNDING_BOX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1073
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1074
        if (L.isNumber(index)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1075
            boundingBox.set(TAB_INDEX, index);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1076
        } else {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1077
            boundingBox.removeAttribute(TAB_INDEX);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1078
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1079
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1080
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1081
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1082
     * @method _onDocMouseDown
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1083
     * @description "mousedown" event handler for the owner document of the
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1084
     * widget's bounding box.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1085
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1086
     * @param {EventFacade} evt The event facade for the DOM focus event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1087
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1088
    _onDocMouseDown: function (evt) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1089
        if (this._domFocus) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1090
            this._onDocFocus(evt);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1091
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1092
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1093
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1094
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1095
     * DOM focus event handler, used to sync the state of the Widget with the DOM
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1096
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1097
     * @method _onDocFocus
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1098
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1099
     * @param {EventFacade} evt The event facade for the DOM focus event
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1100
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1101
    _onDocFocus: function (evt) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1102
        var widget = Widget.getByNode(evt.target),
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1103
            activeWidget = Widget._active;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1104
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1105
        if (activeWidget && (activeWidget !== widget)) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1106
            activeWidget._domFocus = false;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1107
            activeWidget._set(FOCUSED, false, {src:UI});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1108
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1109
            Widget._active = null;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1110
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1111
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1112
        if (widget) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1113
            widget._domFocus = true;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1114
            widget._set(FOCUSED, true, {src:UI});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1115
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1116
            Widget._active = widget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1117
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1118
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1119
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1120
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1121
     * Generic toString implementation for all widgets.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1122
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1123
     * @method toString
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1124
     * @return {String} The default string value for the widget [ displays the NAME of the instance, and the unique id ]
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1125
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1126
    toString: function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1127
        // Using deprecated name prop for kweight squeeze.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1128
        return this.name + "[" + this.get(ID) + "]";
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1129
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1130
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1131
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1132
     * Default unit to use for dimension values
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1133
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1134
     * @property DEF_UNIT
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1135
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1136
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1137
    DEF_UNIT : "px",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1138
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1139
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1140
     * Default node to render the bounding box to. If not set,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1141
     * will default to the current document body.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1142
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1143
     * @property DEF_PARENT_NODE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1144
     * @type String | Node
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1145
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1146
    DEF_PARENT_NODE : null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1147
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1148
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1149
     * Property defining the markup template for content box. If your Widget doesn't
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1150
     * need the dual boundingBox/contentBox structure, set CONTENT_TEMPLATE to null,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1151
     * and contentBox and boundingBox will both point to the same Node.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1152
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1153
     * @property CONTENT_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1154
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1155
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1156
    CONTENT_TEMPLATE : DIV,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1157
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1158
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1159
     * Property defining the markup template for bounding box.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1160
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1161
     * @property BOUNDING_TEMPLATE
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1162
     * @type String
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1163
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1164
    BOUNDING_TEMPLATE : DIV,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1165
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1166
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1167
     * @method _guid
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1168
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1169
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1170
    _guid : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1171
        return Y.guid();
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1172
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1173
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1174
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1175
     * @method _validTabIndex
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1176
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1177
     * @param {Number} tabIndex
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1178
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1179
    _validTabIndex : function (tabIndex) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1180
        return (L.isNumber(tabIndex) || L.isNull(tabIndex));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1181
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1182
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1183
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1184
     * Binds after listeners for the list of attributes provided
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1185
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1186
     * @method _bindAttrUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1187
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1188
     * @param {Array} attrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1189
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1190
    _bindAttrUI : function(attrs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1191
        var i,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1192
            l = attrs.length;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1193
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1194
        for (i = 0; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1195
            this.after(attrs[i] + CHANGE, this._setAttrUI);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1196
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1197
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1198
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1199
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1200
     * Invokes the _uiSet&#61;ATTR NAME&#62; method for the list of attributes provided
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1201
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1202
     * @method _syncAttrUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1203
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1204
     * @param {Array} attrs
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1205
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1206
    _syncAttrUI : function(attrs) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1207
        var i, l = attrs.length, attr;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1208
        for (i = 0; i < l; i++) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1209
            attr = attrs[i];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1210
            this[_UISET + _toInitialCap(attr)](this.get(attr));
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1211
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1212
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1213
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1214
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1215
     * @method _setAttrUI
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1216
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1217
     * @param {EventFacade} e
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1218
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1219
    _setAttrUI : function(e) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1220
        if (e.target === this) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1221
            this[_UISET + _toInitialCap(e.attrName)](e.newVal, e.src);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1222
        }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1223
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1224
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1225
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1226
     * The default setter for the strings attribute. Merges partial sets
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1227
     * into the full string set, to allow users to partial sets of strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1228
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1229
     * @method _strSetter
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1230
     * @protected
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1231
     * @param {Object} strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1232
     * @return {String} The full set of strings to set
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1233
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1234
    _strSetter : function(strings) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1235
        return Y.merge(this.get(STRINGS), strings);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1236
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1237
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1238
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1239
     * Helper method to get a specific string value
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1240
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1241
     * @deprecated Used by deprecated WidgetLocale implementations.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1242
     * @method getString
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1243
     * @param {String} key
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1244
     * @return {String} The string
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1245
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1246
    getString : function(key) {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1247
        return this.get(STRINGS)[key];
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1248
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1249
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1250
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1251
     * Helper method to get the complete set of strings for the widget
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1252
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1253
     * @deprecated  Used by deprecated WidgetLocale implementations.
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1254
     * @method getStrings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1255
     * @param {String} key
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1256
     * @return {String} The strings
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1257
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1258
    getStrings : function() {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1259
        return this.get(STRINGS);
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1260
    },
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1261
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1262
    /**
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1263
     * The lists of UI attributes to bind and sync for widget's _bindUI and _syncUI implementations
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1264
     *
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1265
     * @property _UI_ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1266
     * @type Object
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1267
     * @private
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1268
     */
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1269
    _UI_ATTRS : {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1270
        BIND: UI_ATTRS,
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1271
        SYNC: UI_ATTRS
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1272
    }
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1273
});
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1274
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1275
Y.Widget = Widget;
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1276
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1277
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1278
}, '@VERSION@', {
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1279
    "requires": [
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1280
        "attribute",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1281
        "base-base",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1282
        "base-pluginhost",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1283
        "classnamemanager",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1284
        "event-focus",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1285
        "node-base",
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1286
        "node-style"
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1287
    ],
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1288
    "skinnable": true
e16a97fb364a Use YUI 3.15
gibus
parents:
diff changeset
  1289
});