src/cm/media/js/lib/yui/yui_3.10.3/build/widget-parent/widget-parent-debug.js
author gibus
Tue, 16 Jul 2013 14:29:46 +0200
changeset 525 89ef5ed3c48b
permissions -rw-r--r--
Upgrades to yui 3.10.3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
525
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     1
/*
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
YUI 3.10.3 (build 2fb5187)
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
Copyright 2013 Yahoo! Inc. All rights reserved.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
Licensed under the BSD License.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
http://yuilibrary.com/license/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
*/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
YUI.add('widget-parent', function (Y, NAME) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
 * Extension enabling a Widget to be a parent of another Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
 * @module widget-parent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
var Lang = Y.Lang,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
    RENDERED = "rendered",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
    BOUNDING_BOX = "boundingBox";
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
 * Widget extension providing functionality enabling a Widget to be a 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
 * parent of another Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
 *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
 * <p>In addition to the set of attributes supported by WidgetParent, the constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
 * configuration object can also contain a <code>children</code> which can be used
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
 * to add child widgets to the parent during construction. The <code>children</code>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
 * property is an array of either child widget instances or child widget configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
 * objects, and is sugar for the <a href="#method_add">add</a> method. See the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
 * <a href="#method_add">add</a> for details on the structure of the child widget 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
 * configuration object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
 * @class WidgetParent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
 * @constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
 * @uses ArrayList
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
 * @param {Object} config User configuration object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
 */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
function Parent(config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
    * Fires when a Widget is add as a child.  The event object will have a 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
    * 'child' property that returns a reference to the child Widget, as well 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
    * as an 'index' property that returns a reference to the index specified 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    * when the add() method was called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
    * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
    * Subscribers to the "on" moment of this event, will be notified 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
    * before a child is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
    * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
    * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
    * Subscribers to the "after" moment of this event, will be notified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
    * after a child is added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
    * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
    * @event addChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    * @preventable _defAddChildFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    * @param {EventFacade} e The Event Facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
    this.publish("addChild", { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
        defaultTargetOnly: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
        defaultFn: this._defAddChildFn 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
    * Fires when a child Widget is removed.  The event object will have a 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    * 'child' property that returns a reference to the child Widget, as well 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    * as an 'index' property that returns a reference child's ordinal position.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    * Subscribers to the "on" moment of this event, will be notified 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    * before a child is removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
    * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    * Subscribers to the "after" moment of this event, will be notified
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    * after a child is removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
    * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
    * @event removeChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
    * @preventable _defRemoveChildFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
    * @param {EventFacade} e The Event Facade
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
    this.publish("removeChild", { 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
        defaultTargetOnly: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
        defaultFn: this._defRemoveChildFn 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
    });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    this._items = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    var children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
        handle;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    if (config && config.children) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
        children = config.children;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
        handle = this.after("initializedChange", function (e) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
            this._add(children);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
            handle.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    //  Widget method overlap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    Y.after(this._renderChildren, this, "renderUI");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
    Y.after(this._bindUIParent, this, "bindUI");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    this.after("selectionChange", this._afterSelectionChange);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
    this.after("selectedChange", this._afterParentSelectedChange);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    this.after("activeDescendantChange", this._afterActiveDescendantChange);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
    this._hDestroyChild = this.after("*:destroy", this._afterDestroyChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    this.after("*:focusedChange", this._updateActiveDescendant);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
Parent.ATTRS = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
     * @attribute defaultChildType
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
     * @type {String|Object}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
     * @description String representing the default type of the children 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
     * managed by this Widget.  Can also supply default type as a constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
     * reference.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
    defaultChildType: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
        setter: function (val) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
            var returnVal = Y.Attribute.INVALID_VALUE,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
                FnConstructor = Lang.isString(val) ? Y[val] : val;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
            if (Lang.isFunction(FnConstructor)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
                returnVal = FnConstructor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
            return returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
     * @attribute activeDescendant
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
     * @type Widget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
     * @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
     * @description Returns the Widget's currently focused descendant Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
    activeDescendant: {    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
        readOnly: true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
     * @attribute multiple
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
     * @type Boolean
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
     * @default false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
     * @writeOnce 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
     * @description Boolean indicating if multiple children can be selected at 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
     * once.  Whether or not multiple selection is enabled is always delegated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
     * to the value of the <code>multiple</code> attribute of the root widget
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
     * in the object hierarchy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    multiple: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
        value: false,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
        validator: Lang.isBoolean,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
        writeOnce: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
        getter: function (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
            var root = this.get("root");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            return (root && root != this) ? root.get("multiple") : value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
     * @attribute selection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
     * @type {ArrayList|Widget}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
     * @readOnly  
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
     * @description Returns the currently selected child Widget.  If the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
     * <code>mulitple</code> attribte is set to <code>true</code> will 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
     * return an Y.ArrayList instance containing the currently selected 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
     * children.  If no children are selected, will return null.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    selection: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
        readOnly: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
        setter: "_setSelection",
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
        getter: function (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
            var selection = Lang.isArray(value) ? 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
                    (new Y.ArrayList(value)) : value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
            return selection;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    selected: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
        setter: function (value) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
            //  Enforces selection behavior on for parent Widgets.  Parent's 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
            //  selected attribute can be set to the following:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
            //  0 - Not selected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
            //  1 - Fully selected (all children are selected).  In order for 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            //  all children to be selected, multiple selection must be 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
            //  enabled.  Therefore, you cannot set the "selected" attribute 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            //  on a parent Widget to 1 unless multiple selection is enabled.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
            //  2 - Partially selected, meaning one ore more (but not all) 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
            //  children are selected.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
            var returnVal = value;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
            if (value === 1 && !this.get("multiple")) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
                Y.log('The selected attribute can only be set to 1 if the "multiple" attribute is set to true.', "error", "widget");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
                returnVal = Y.Attribute.INVALID_VALUE;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
            return returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
Parent.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
     * The destructor implementation for Parent widgets. Destroys all children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
     * @method destructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
    destructor: function() {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
        this._destroyChildren();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
     * Destroy event listener for each child Widget, responsible for removing 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
     * the destroyed child Widget from the parent's internal array of children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
     * (_items property).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
     * @method _afterDestroyChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    _afterDestroyChild: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
        var child = event.target;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
        if (child.get("parent") == this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
            child.remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        }        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
     * Attribute change listener for the <code>selection</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
     * attribute, responsible for setting the value of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
     * parent's <code>selected</code> attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
     * @method _afterSelectionChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
    _afterSelectionChange: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
        if (event.target == this && event.src != this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
            var selection = event.newVal,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
                selectedVal = 0;    //  Not selected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            if (selection) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
                selectedVal = 2;    //  Assume partially selected, confirm otherwise
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
                if (Y.instanceOf(selection, Y.ArrayList) && 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
                    (selection.size() === this.size())) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
                    selectedVal = 1;    //  Fully selected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
            this.set("selected", selectedVal, { src: this });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   276
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   277
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   278
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
     * Attribute change listener for the <code>activeDescendant</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
     * attribute, responsible for setting the value of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
     * parent's <code>activeDescendant</code> attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
     * @method _afterActiveDescendantChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
    _afterActiveDescendantChange: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        var parent = this.get("parent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        if (parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
            parent._set("activeDescendant", event.newVal);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
     * Attribute change listener for the <code>selected</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
     * attribute, responsible for syncing the selected state of all children to 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
     * match that of their parent Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
     * 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
     * @method _afterParentSelectedChange
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    _afterParentSelectedChange: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
        var value = event.newVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
        if (this == event.target && event.src != this && 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
            (value === 0 || value === 1)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
            this.each(function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
                //  Specify the source of this change as the parent so that 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
                //  value of the parent's "selection" attribute isn't 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
                //  recalculated
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
                child.set("selected", value, { src: this });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
     * Default setter for <code>selection</code> attribute changes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
     * @method _setSelection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
     * @param child {Widget|Array} Widget or Array of Widget instances.     
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
     * @return {Widget|Array} Widget or Array of Widget instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    _setSelection: function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
        var selection = null,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
            selected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        if (this.get("multiple") && !this.isEmpty()) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
            selected = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
            this.each(function (v) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
               if (v.get("selected") > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
                   selected.push(v);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
               }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
            });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
            if (selected.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
                selection = selected;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
        else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
            if (child.get("selected") > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
                selection = child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        return selection;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   368
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   369
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   370
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
     * Attribute change listener for the <code>selected</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
     * attribute of child Widgets, responsible for setting the value of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
     * parent's <code>selection</code> attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
     * @method _updateSelection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
    _updateSelection: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
        var child = event.target,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
            selection;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
        if (child.get("parent") == this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
            if (event.src != "_updateSelection") {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
                selection = this.get("selection");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
                if (!this.get("multiple") && selection && event.newVal > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
                    //  Deselect the previously selected child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
                    //  Set src equal to the current context to prevent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
                    //  unnecessary re-calculation of the selection.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
                    selection.set("selected", 0, { src: "_updateSelection" });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
                this._set("selection", child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   403
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
            if (event.src == this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
                this._set("selection", child, { src: this });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
     * Attribute change listener for the <code>focused</code> 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
     * attribute of child Widgets, responsible for setting the value of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
     * parent's <code>activeDescendant</code> attribute.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
     * @method _updateActiveDescendant
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
     * @param {EventFacade} event The event facade for the attribute change.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
    _updateActiveDescendant: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
        var activeDescendant = (event.newVal === true) ? event.target : null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
        this._set("activeDescendant", activeDescendant);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
     * Creates an instance of a child Widget using the specified configuration.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
     * By default Widget instances will be created of the type specified 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
     * by the <code>defaultChildType</code> attribute.  Types can be explicitly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
     * defined via the <code>childType</code> property of the configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
     * literal. The use of the <code>type</code> property has been deprecated, but 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
     * will still be used as a fallback, if <code>childType</code> is not defined,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
     * for backwards compatibility. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
     * @method _createChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
     * @param config {Object} Object literal representing the configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
     * used to create an instance of a Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
    _createChild: function (config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
        var defaultType = this.get("defaultChildType"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
            altType = config.childType || config.type,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
            child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
            Fn,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
            FnConstructor;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
        if (altType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
            Fn = Lang.isString(altType) ? Y[altType] : altType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
        if (Lang.isFunction(Fn)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
            FnConstructor = Fn;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        } else if (defaultType) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
            // defaultType is normalized to a function in it's setter 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
            FnConstructor = defaultType;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
        if (FnConstructor) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
            child = new FnConstructor(config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
            Y.error("Could not create a child instance because its constructor is either undefined or invalid.");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        return child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
     * Default addChild handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
     * @method _defAddChildFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
     * @param event {EventFacade} The Event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
     * @param child {Widget} The Widget instance, or configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
     * object for the Widget to be added as a child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
     * @param index {Number} Number representing the position at 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
     * which the child will be inserted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
    _defAddChildFn: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
        var child = event.child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
            index = event.index,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
            children = this._items;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
        if (child.get("parent")) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
            child.remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
        if (Lang.isNumber(index)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
            children.splice(index, 0, child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
        else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
            children.push(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
        child._set("parent", this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
        child.addTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
        // Update index in case it got normalized after addition
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
        // (e.g. user passed in 10, and there are only 3 items, the actual index would be 3. We don't want to pass 10 around in the event facade).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
        event.index = child.get("index");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
        //  TO DO: Remove in favor of using event bubbling
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
        child.after("selectedChange", Y.bind(this._updateSelection, this));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
     * Default removeChild handler
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
     * @method _defRemoveChildFn
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
     * @param event {EventFacade} The Event object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
     * @param child {Widget} The Widget instance to be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
     * @param index {Number} Number representing the index of the Widget to 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
     * be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
     */    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
    _defRemoveChildFn: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
        var child = event.child,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
            index = event.index,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
            children = this._items;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        if (child.get("focused")) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
            child.blur(); // focused is readOnly, so use the public i/f to unset it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
        if (child.get("selected")) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
            child.set("selected", 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
        children.splice(index, 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
        child.removeTarget(this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
        child._oldParent = child.get("parent");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
        child._set("parent", null);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
    * @method _add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
    * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
    * @param child {Widget|Object} The Widget instance, or configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
    * object for the Widget to be added as a child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
    * @param child {Array} Array of Widget instances, or configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
    * objects for the Widgets to be added as a children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    * @param index {Number} (Optional.)  Number representing the position at 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    * which the child should be inserted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
    * @description Adds a Widget as a child.  If the specified Widget already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    * has a parent it will be removed from its current parent before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
    * being added as a child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
    * @return {Widget|Array} Successfully added Widget or Array containing the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
    * successfully added Widget instance(s). If no children where added, will 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
    * will return undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
    _add: function (child, index) {   
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
        var children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
            oChild,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
            returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
        if (Lang.isArray(child)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
            children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
            Y.each(child, function (v, k) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
                oChild = this._add(v, (index + k));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
                if (oChild) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
                    children.push(oChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
                }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
            }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
            
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
            if (children.length > 0) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
                returnVal = children;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
        else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
            if (Y.instanceOf(child, Y.Widget)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
                oChild = child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
            else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
                oChild = this._createChild(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
            if (oChild && this.fire("addChild", { child: oChild, index: index })) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
                returnVal = oChild;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
        return returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
    * @method add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
    * @param child {Widget|Object} The Widget instance, or configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
    * object for the Widget to be added as a child. The configuration object
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
    * for the child can include a <code>childType</code> property, which is either
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
    * a constructor function or a string which names a constructor function on the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
    * Y instance (e.g. "Tab" would refer to Y.Tab) (<code>childType</code> used to be 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    * named <code>type</code>, support for which has been deprecated, but is still
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
    * maintained for backward compatibility. <code>childType</code> takes precedence
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
    * over <code>type</code> if both are defined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
    * @param child {Array} Array of Widget instances, or configuration 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
    * objects for the Widgets to be added as a children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
    * @param index {Number} (Optional.)  Number representing the position at 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
    * which the child should be inserted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
    * @description Adds a Widget as a child.  If the specified Widget already
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
    * has a parent it will be removed from its current parent before
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
    * being added as a child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
    * @return {ArrayList} Y.ArrayList containing the successfully added 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
    * Widget instance(s).  If no children where added, will return an empty 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
    * Y.ArrayList instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
    add: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
        var added = this._add.apply(this, arguments),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
            children = added ? (Lang.isArray(added) ? added : [added]) : [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
        return (new Y.ArrayList(children));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
    * @method remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
    * @param index {Number} (Optional.)  Number representing the index of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
    * child to be removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
    * @description Removes the Widget from its parent.  Optionally, can remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
    * a child by specifying its index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
    * @return {Widget} Widget instance that was successfully removed, otherwise
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
    * undefined.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
    remove: function (index) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
        var child = this._items[index],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
            returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
        if (child && this.fire("removeChild", { child: child, index: index })) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
            returnVal = child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
        return returnVal;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
    * @method removeAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
    * @description Removes all of the children from the Widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
    * @return {ArrayList} Y.ArrayList instance containing Widgets that were 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
    * successfully removed.  If no children where removed, will return an empty 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
    * Y.ArrayList instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    removeAll: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
        var removed = [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
            child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
        Y.each(this._items.concat(), function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
            child = this.remove(0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
            if (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
                removed.push(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
        }, this);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
        return (new Y.ArrayList(removed));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   682
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   683
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   684
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
     * Selects the child at the given index (zero-based).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
     * @method selectChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
     * @param {Number} i the index of the child to be selected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
    selectChild: function(i) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
        this.item(i).set('selected', 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   694
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   695
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   696
     * Selects all children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
     * @method selectAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
    selectAll: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
        this.set("selected", 1);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
     * Deselects all children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
     * @method deselectAll
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
    deselectAll: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
        this.set("selected", 0);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
     * Updates the UI in response to a child being added.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
     * @method _uiAddChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
     * @param child {Widget} The child Widget instance to render.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
     * @param parentNode {Object} The Node under which the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
     * child Widget is to be rendered.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
     */    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
    _uiAddChild: function (child, parentNode) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
        child.render(parentNode);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
        // TODO: Ideally this should be in Child's render UI. 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
        var childBB = child.get("boundingBox"),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
            siblingBB,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
            nextSibling = child.next(false),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
            prevSibling;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
        // Insert or Append to last child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
        // Avoiding index, and using the current sibling 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
        // state (which should be accurate), means we don't have 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
        // to worry about decorator elements which may be added 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
        // to the _childContainer node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
        if (nextSibling && nextSibling.get(RENDERED)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
            siblingBB = nextSibling.get(BOUNDING_BOX);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
            siblingBB.insert(childBB, "before");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
        } else {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
            prevSibling = child.previous(false);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
            if (prevSibling && prevSibling.get(RENDERED)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
                siblingBB = prevSibling.get(BOUNDING_BOX);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
                siblingBB.insert(childBB, "after");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
            } else if (!parentNode.contains(childBB)) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
                // Based on pull request from andreas-karlsson
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
                // https://github.com/yui/yui3/pull/25#issuecomment-2103536
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
                // Account for case where a child was rendered independently of the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
                // parent-child framework, to a node outside of the parentNode,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
                // and there are no siblings.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
                parentNode.appendChild(childBB);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   768
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   769
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   770
     * Updates the UI in response to a child being removed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
     * @method _uiRemoveChild
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
     * @param child {Widget} The child Widget instance to render.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
     */        
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
    _uiRemoveChild: function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
        child.get("boundingBox").remove();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
    _afterAddChild: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
        var child = event.child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
        if (child.get("parent") == this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
            this._uiAddChild(child, this._childrenContainer);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
    _afterRemoveChild: function (event) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
        var child = event.child;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
        if (child._oldParent == this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
            this._uiRemoveChild(child);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
     * Sets up DOM and CustomEvent listeners for the parent widget.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
     * This method in invoked after bindUI is invoked for the Widget class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
     * using YUI's aop infrastructure.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
     *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
     * @method _bindUIParent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
    _bindUIParent: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
        this.after("addChild", this._afterAddChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
        this.after("removeChild", this._afterRemoveChild);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
     * Renders all child Widgets for the parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
     * This method in invoked after renderUI is invoked for the Widget class
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
     * using YUI's aop infrastructure.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
     * @method _renderChildren
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
    _renderChildren: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
        /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
         * <p>By default WidgetParent will render it's children to the parent's content box.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
         * <p>If the children need to be rendered somewhere else, the _childrenContainer property
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
         * can be set to the Node which the children should be rendered to. This property should be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
         * set before the _renderChildren method is invoked, ideally in your renderUI method, 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
         * as soon as you create the element to be rendered to.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
         *
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
         * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
         * @property _childrenContainer
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
         * @value The content box
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
         * @type Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
         */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
        var renderTo = this._childrenContainer || this.get("contentBox");
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
        this._childrenContainer = renderTo;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
        this.each(function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
            child.render(renderTo);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
     * Destroys all child Widgets for the parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
     * <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
     * This method is invoked before the destructor is invoked for the Widget 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
     * class using YUI's aop infrastructure.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
     * </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
     * @method _destroyChildren
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
     * @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
     */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
    _destroyChildren: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
        //  Detach the handler responsible for removing children in 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
        //  response to destroying them since:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
        //  1)  It is unnecessary/inefficient at this point since we are doing 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
        //      a batch destroy of all children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
        //  2)  Removing each child will affect our ability to iterate the 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
        //      children since the size of _items will be changing as we 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
        //      iterate.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
        this._hDestroyChild.detach();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
        //  Need to clone the _items array since 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
        this.each(function (child) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
            child.destroy();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   867
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   868
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   869
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
Y.augment(Parent, Y.ArrayList);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
Y.WidgetParent = Parent;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
}, '3.10.3', {"requires": ["arraylist", "base-build", "widget"]});