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