src/cm/media/js/lib/yui/yui_3.10.3/build/tree-node/tree-node-debug.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 525 89ef5ed3c48b
permissions -rw-r--r--
add link to "privacy policy" in the header test
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('tree-node', 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
/*jshint expr:true, onevar:false */
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
/**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
Provides the `Tree.Node` class, which represents a tree node contained in a
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
`Tree` data structure.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
@module tree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
@submodule tree-node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
**/
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
Represents a tree node in a `Tree` data structure.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
@class Tree.Node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
@param {Tree} tree `Tree` instance with which this node should be associated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
@param {Object} [config] Configuration hash for this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    @param {Boolean} [config.canHaveChildren=false] Whether or not this node can
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        contain child nodes. Will be automatically set to `true` if not
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
        specified and `config.children` contains one or more children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
    @param {Tree.Node[]} [config.children] Array of `Tree.Node` instances
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
        for child nodes of this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
    @param {Object} [config.data] Implementation-specific data related to this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
        node. You may add arbitrary properties to this hash for your own use.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
    @param {String} [config.id] Unique id for this node. This id must be unique
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
        among all tree nodes on the entire page, and will also be used as this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
        node's DOM id when it's rendered by a TreeView. A unique id will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
        automatically generated unless you specify a custom value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
    @param {Object} [config.state] State hash for this node. You may add
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
        arbitrary state properties to this hash for your own use. See the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
        docs for `Tree.Node`'s `state` property for details on state values used
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
        internally by `Tree.Node`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    46
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    47
@constructor
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
**/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
function TreeNode(tree, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
    config || (config = {});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
    this.id   = this._yuid = config.id || this.id || Y.guid('treeNode-');
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
    this.tree = tree;
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.children = config.children || [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
    this.data     = config.data || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
    this.state    = config.state || {};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
    if (config.canHaveChildren) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
        this.canHaveChildren = config.canHaveChildren;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
    } else if (this.children.length) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
        this.canHaveChildren = true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
    // Mix in arbitrary properties on the config object, but don't overwrite any
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
    // existing properties of this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
    Y.mix(this, config);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    70
    // If this node has children, loop through them and ensure their parent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    71
    // references are all set to this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
    for (var i = 0, len = this.children.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
        this.children[i].parent = this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    75
}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    76
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    77
TreeNode.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
    // -- Public Properties ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
    Whether or not this node can contain child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
    This value is falsy by default unless child nodes are added at instantiation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
    time, in which case it will be automatically set to `true`. You can also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
    manually set it to `true` to indicate that a node can have children even
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
    though it might not currently have any children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
    Note that regardless of the value of this property, appending, prepending,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
    or inserting a node into this node will cause `canHaveChildren` to be set to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
    true automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
    @property {Boolean} canHaveChildren
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
    Child nodes contained within this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
    @property {Tree.Node[]} children
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    @default []
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
    @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
    Arbitrary serializable data related to this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    Use this property to store any data that should accompany this node when it
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
    is serialized to JSON.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
    @property {Object} data
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
    @default {}
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
    Unique id for this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
    @property {String} id
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
    @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
    Parent node of this node, or `undefined` if this is an unattached node or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
    the root node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
    @property {Tree.Node} parent
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
    @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
    Current state of this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
    Use this property to store state-specific info -- such as whether this node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
    is "open", "selected", or any other arbitrary state -- that should accompany
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
    this node when it is serialized to JSON.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
    @property {Object} state
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
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    The Tree instance with which this node is associated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
    @property {Tree} tree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
    @readOnly
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    // -- Protected Properties -------------------------------------------------
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
    Mapping of child node ids to indices.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
    @property {Object} _indexMap
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
    Flag indicating whether the `_indexMap` is stale and needs to be rebuilt.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
    @property {Boolean} _isIndexStale
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
    @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
    _isIndexStale: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
    Simple way to type-check that this is an instance of Tree.Node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
    @property {Boolean} _isYUITreeNode
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
    @default true
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
    _isYUITreeNode: true,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
    Array of property names on this node that should be serialized to JSON when
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
    `toJSON()` is called.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
    Note that the `children` property is a special case that is managed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
    separately.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
    @property {String[]} _serializable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
    @protected
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
    _serializable: ['canHaveChildren', 'data', 'id', 'state'],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
    // -- Public Methods -------------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
    Appends the given tree node or array of nodes to the end of this node's
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
    children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
    @method append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
    @param {Object|Object[]|Tree.Node|Tree.Node[]} node Child node, node config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
        object, array of child nodes, or array of node config objects to append
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
        to the given parent. Node config objects will automatically be converted
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
        into node instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
        @param {Boolean} [options.silent=false] If `true`, the `add` event will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
            be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
    @return {Tree.Node|Tree.Node[]} Node or array of nodes that were appended.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
    append: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
        return this.tree.appendNode(this, node, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    Removes all children from this node. The removed children will still be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
    reusable unless the `destroy` option is truthy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
    @method empty
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
        @param {Boolean} [options.destroy=false] If `true`, the children will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
            also be destroyed, which makes them available for garbage collection
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
            and means they can't be reused.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
        @param {Boolean} [options.silent=false] If `true`, `remove` events will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
            be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
    @return {Tree.Node[]} Array of removed child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
    empty: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
        return this.tree.emptyNode(this, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
    },
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
    Performs a depth-first traversal of this node, passing it and each of its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
    descendants to the specified _callback_, and returning the first node for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
    which the callback returns a truthy value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
    Traversal will stop as soon as a truthy value is returned from the callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
    See `Tree#traverseNode()` for more details on how depth-first traversal
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
    works.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
    @method find
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
        @param {Number} [options.depth] Depth limit. If specified, descendants
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
            will only be traversed to this depth before backtracking and moving
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
            on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
    @param {Function} callback Callback function to call with the traversed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
        node and each of its descendants. If this function returns a truthy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
        value, traversal will be stopped and the current node will be returned.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
        @param {Tree.Node} callback.node Node being traversed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
    @param {Object} [thisObj] `this` object to use when executing _callback_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
    @return {Tree.Node|null} Returns the first node for which the _callback_
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        returns a truthy value, or `null` if the callback never returns a truthy
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
        value.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
    find: function (options, callback, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
        return this.tree.findNode(this, options, callback, thisObj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
    Returns `true` if this node has one or more child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
    @method hasChildren
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
    @return {Boolean} `true` if this node has one or more child nodes, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
        otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
    hasChildren: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
        return !!this.children.length;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
    Returns the numerical index of this node within its parent node, or `-1` if
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
    this node doesn't have a parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
    @method index
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
    @return {Number} Index of this node within its parent node, or `-1` if this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
        node doesn't have a parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
    index: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   275
        return this.parent ? this.parent.indexOf(this) : -1;
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
    Returns the numerical index of the given child node, or `-1` if the node is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
    not a child of this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
    @method indexOf
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
    @param {Tree.Node} node Child node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
    @return {Number} Index of the child, or `-1` if the node is not a child of
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
        this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
    indexOf: function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
        var index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
        if (this._isIndexStale) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
            this._reindex();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
        index = this._indexMap[node.id];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   296
        return typeof index === 'undefined' ? -1 : index;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   297
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   298
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
    Inserts a node or array of nodes at the specified index under this node, or
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
    appends them to this node if no index is specified.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
    If a node being inserted is from another tree, it and all its children will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
    be removed from that tree and moved to this one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    @method insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
    @param {Object|Object[]|Tree.Node|Tree.Node[]} node Child node, node config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
        object, array of child nodes, or array of node config objects to insert
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
        under the given parent. Node config objects will automatically be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
        converted into node instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
        @param {Number} [options.index] Index at which to insert the child node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
            If not specified, the node will be appended as the last child of the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
            parent.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
        @param {Boolean} [options.silent=false] If `true`, the `add` event will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
            be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
        @param {String} [options.src='insert'] Source of the change, to be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
            passed along to the event facade of the resulting event. This can be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
            used to distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    @return {Tree.Node[]} Node or array of nodes that were inserted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
    insert: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
        return this.tree.insertNode(this, node, options);
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
    Returns `true` if this node has been inserted into a tree, `false` if it is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
    merely associated with a tree and has not yet been inserted.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
    @method isInTree
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
    @return {Boolean} `true` if this node has been inserted into a tree, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
        otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
    isInTree: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
        if (this.tree.rootNode === this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
            return true;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
        return !!(this.parent && this.parent.isInTree());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
    Returns `true` if this node is the root of the tree.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
    @method isRoot
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
    @return {Boolean} `true` if this node is the root of the tree, `false`
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
        otherwise.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   351
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   352
    isRoot: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   353
        return this.tree.rootNode === this;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
    Returns this node's next sibling, or `undefined` if this node is the last
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
    child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
    @method next
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
    @return {Tree.Node} This node's next sibling, or `undefined` if this node is
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
        the last 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
    next: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
        if (this.parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
            return this.parent.children[this.index() + 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
        }
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
    Prepends a node or array of nodes at the beginning of this node's children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
    If a node being prepended is from another tree, it and all its children will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
    be removed from that tree and moved to this one.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
    @method prepend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
    @param {Object|Object[]|Tree.Node|Tree.Node[]} node Child node, node config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
        object, array of child nodes, or array of node config objects to prepend
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
        to this node. Node config objects will automatically be converted into
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
        node instances.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
        @param {Boolean} [options.silent=false] If `true`, the `add` event will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
            be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
    @return {Tree.Node|Tree.Node[]} Node or array of nodes that were prepended.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
    prepend: function (node, options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
        return this.tree.prependNode(this, node, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
    Returns this node's previous sibling, or `undefined` if this node is the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
    first child
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
    @method previous
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
    @return {Tree.Node} This node's previous sibling, or `undefined` if this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
        node is the first child.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
    previous: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
        if (this.parent) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
            return this.parent.children[this.index() - 1];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   401
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   402
    },
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
    Removes this node from its parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
    @method remove
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
        @param {Boolean} [options.destroy=false] If `true`, this node and all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
            its children will also be destroyed, which makes them available for
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
            garbage collection and means they can't be reused.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   412
        @param {Boolean} [options.silent=false] If `true`, the `remove` event
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   413
            will be suppressed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   414
        @param {String} [options.src] Source of the change, to be passed along
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
            to the event facade of the resulting event. This can be used to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
            distinguish between changes triggered by a user and changes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
            triggered programmatically, for example.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
    @chainable
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
    remove: function (options) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
        return this.tree.removeNode(this, options);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   423
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   424
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   425
    Returns the total number of nodes contained within this node, including all
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
    descendants of this node's children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
    @method size
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
    @return {Number} Total number of nodes contained within this node, including
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
        all descendants.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
    size: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
        var children = this.children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
            len      = children.length,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
            total    = len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
        for (var i = 0; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
            total += children[i].size();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
        return total;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
    Serializes this node to an object suitable for use in JSON.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
    @method toJSON
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
    @return {Object} Serialized node object.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
    toJSON: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
        var obj   = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
            state = this.state,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
            i, key, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
        // Do nothing if this node is marked as destroyed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
        if (state.destroyed) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
            return null;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
        // Serialize properties explicitly marked as serializable.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
        for (i = 0, len = this._serializable.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
            key = this._serializable[i];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
            if (key in this) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
                obj[key] = this[key];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
        // Serialize child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
        if (this.canHaveChildren) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
            obj.children = [];
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
            for (i = 0, len = this.children.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
                obj.children.push(this.children[i].toJSON());
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        return obj;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
    /**
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
    Performs a depth-first traversal of this node, passing it and each of its
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
    descendants to the specified _callback_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
    If the callback function returns `Tree.STOP_TRAVERSAL`, traversal will be
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
    stopped immediately. Otherwise, it will continue until the deepest
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
    descendant of _node_ has been traversed, or until each branch has been
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
    traversed to the optional maximum depth limit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
    Since traversal is depth-first, that means nodes are traversed like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
                1
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
              / | \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
             2  8  9
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
            / \     \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
           3   7    10
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
         / | \      / \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
        4  5  6    11 12
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
    @method traverse
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
    @param {Object} [options] Options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
        @param {Number} [options.depth] Depth limit. If specified, descendants
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
            will only be traversed to this depth before backtracking and moving
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
            on.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
    @param {Function} callback Callback function to call with the traversed
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
        node and each of its descendants.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
        @param {Tree.Node} callback.node Node being traversed.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
    @param {Object} [thisObj] `this` object to use when executing _callback_.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
    @return {Mixed} Returns `Tree.STOP_TRAVERSAL` if traversal was stopped;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
        otherwise returns `undefined`.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
    **/
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
    traverse: function (options, callback, thisObj) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
        return this.tree.traverseNode(this, options, callback, thisObj);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
    // -- Protected Methods ----------------------------------------------------
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
    _reindex: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
        var children = this.children,
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
            indexMap = {},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
            i, len;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
        for (i = 0, len = children.length; i < len; i++) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
            indexMap[children[i].id] = i;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
        }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
        this._indexMap     = indexMap;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
        this._isIndexStale = false;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   531
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   532
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   533
Y.namespace('Tree').Node = TreeNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
}, '3.10.3');