src/cm/media/js/lib/yui/yui_3.10.3/docs/tree/index.html
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
<!DOCTYPE html>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     2
<html lang="en">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     3
<head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     4
    <meta charset="utf-8">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     5
    <title>Tree</title>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     6
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     7
    <link rel="stylesheet" href="../../build/cssgrids/cssgrids-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     8
    <link rel="stylesheet" href="../assets/css/main.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
     9
    <link rel="stylesheet" href="../assets/vendor/prettify/prettify-min.css">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    10
    <link rel="shortcut icon" type="image/png" href="../assets/favicon.png">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    11
    <script src="../../build/yui/yui-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    12
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    13
</head>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    14
<body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    15
<!--
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    16
<a href="https://github.com/yui/yui3"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    17
-->
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    18
<div id="doc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    19
    <div id="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    20
        <h1><img src="http://yuilibrary.com/img/yui-logo.png"></h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    21
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    22
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    23
        <a href="#toc" class="jump">Jump to Table of Contents</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    24
    
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    25
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    26
            <h1>Tree</h1>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    27
    <div class="yui3-g">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    28
        <div class="yui3-u-3-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    29
            <div id="main">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    30
                <div class="content"><div class="intro">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    31
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    32
The Tree component provides a generic tree data structure, which is good for efficiently representing hierarchical data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    33
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    34
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    35
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    36
A tree has a root node, which may contain any number of child nodes, which may themselves contain child nodes, <i>ad infinitum</i>. Child nodes are lightweight function instances which delegate to the tree for all significant functionality, so trees remain performant and memory-efficient even when they contain thousands and thousands of nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    37
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    38
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    39
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    40
The Tree component itself is purely a data structure and doesn't expose any UI, but it works well as a base class for a <a href="../view/index.html">View</a> or a <a href="../widget/index.html">Widget</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    41
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    42
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    43
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    44
<h2 id="getting-started">Getting Started</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    45
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
To include the source files for Tree and its dependencies, first load
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    48
the YUI seed file if you haven't already loaded it.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    49
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    50
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    51
<pre class="code prettyprint">&lt;script src=&quot;http:&#x2F;&#x2F;yui.yahooapis.com&#x2F;3.10.3&#x2F;build&#x2F;yui&#x2F;yui-min.js&quot;&gt;&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    52
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    53
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    54
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    55
Next, create a new YUI instance for your application and populate it with the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    56
modules you need by specifying them as arguments to the <code>YUI().use()</code> method.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    57
YUI will automatically load any dependencies required by the modules you
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    58
specify.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    59
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    60
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    61
<pre class="code prettyprint">&lt;script&gt;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    62
&#x2F;&#x2F; Create a new YUI instance and populate it with the required modules.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    63
YUI().use(&#x27;tree&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    64
    &#x2F;&#x2F; Tree is available and ready for use. Add implementation
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    65
    &#x2F;&#x2F; code here.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    66
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    67
&lt;&#x2F;script&gt;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    68
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    69
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
For more information on creating YUI instances and on the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    72
<a href="http://yuilibrary.com/yui/docs/api/classes/YUI.html#method_use"><code>use()</code> method</a>, see the
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    73
documentation for the <a href="../yui/index.html">YUI Global Object</a>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    74
</p>
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
<h2 id="using-tree">Using Tree</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    78
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    79
<h3 id="creating-a-tree">Creating a Tree</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    80
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    81
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    82
Create an empty Tree by instantiating <code>Y.Tree</code> without any options.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    83
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    84
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    85
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new empty Tree.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    86
var tree = new Y.Tree();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    87
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    88
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    89
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    90
Trees always have a single root node, so an "empty" tree is really just a tree without any child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    91
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    92
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    93
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    94
To populate a tree with an initial set of nodes at instantiation time, pass an array of node configuration objects to Tree's constructor.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    95
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    96
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    97
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new tree with some child nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    98
var tree = new Y.Tree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
    99
    nodes: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   100
        {id: &#x27;node 1&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   101
        {id: &#x27;node 2&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   102
            {id: &#x27;node 2.1&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   103
            {id: &#x27;node 2.2&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   104
        ]},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   105
        {id: &#x27;node 3&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   106
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   107
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   108
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   109
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   110
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   111
This creates a tree structure that looks like this:
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   112
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   113
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   114
<pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   115
        root node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   116
       /    |    \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   117
  node 1  node 2  node 3
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   118
           /  \
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   119
    node 2.1  node 2.2
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   120
</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   121
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   122
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   123
The <code>id</code> property of node objects is optional. If not specified, a unique node id will be generated automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   124
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   125
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   126
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Use empty objects to create child nodes with auto-generated ids.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   127
var tree = new Y.Tree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   128
    nodes: [{}, {children: [{}, {}]}, {}]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   129
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   130
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   131
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   132
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   133
If you do choose to provide custom node ids, be sure that they're unique. No two nodes in a tree may share the same id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   134
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   135
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   136
<h3 id="tree-properties">Tree Properties</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   137
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   138
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   139
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   140
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   141
            <th>Property</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   142
            <th>Type</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   143
            <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   144
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   145
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   146
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   147
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   148
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   149
            <td><code>children</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   150
            <td>Array</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   151
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   152
                Reference to the <code>children</code> property of the Tree's <code>rootNode</code>. This is a convenience property to allow you to type <code>tree.children</code> instead of <code>tree.rootNode.children</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   153
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   154
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   155
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   156
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   157
            <td><code>nodeClass</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   158
            <td>String / Tree.Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   159
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   160
                The <code>Y.Tree.Node</code> class or subclass that should be used for nodes created by the tree. You may specify an actual class reference or a string that resolves to a class reference at runtime. By default this is a reference to <code>Y.Tree.Node</code>.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   161
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   162
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   163
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   164
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   165
            <td><code>nodeExtensions</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   166
            <td>Array</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   167
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   168
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   169
                Optional array containing one or more extension classes that should be mixed into the <code>nodeClass</code> when the Tree is instantiated. The resulting composed node class will be unique to the Tree instance and will not affect any other instances, nor will it modify the defined <code>nodeClass</code> itself.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   170
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   171
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   172
                <p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   173
                This provides a late-binding extension mechanism for nodes that doesn't require them to extend <code>Y.Base</code>, which would incur a significant performance hit.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   174
                </p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   175
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   176
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   177
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   178
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   179
            <td><code>rootNode</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   180
            <td>Tree.Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   181
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   182
                The root node of the tree.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   183
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   184
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   185
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   186
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   187
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   188
<h3 id="working-with-tree-nodes">Working with Tree Nodes</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   189
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   190
<h4 id="tree-node-properties">Tree Node Properties</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   191
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   192
<p>Tree nodes use properties exclusively rather than using attributes as many YUI classes do. This ensures that <code>Y.Tree.Node</code> instances are lightweight and extremely fast to create. Using attributes would require extending <a href="../attribute/index.html"><code>Y.Attribute</code></a>, which incurs significant instantiation and memory cost.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   193
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   194
<p>All nodes have the following built-in properties:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   195
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   196
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   197
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   198
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   199
            <th>Property</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   200
            <th>Type</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   201
            <th>Description</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   202
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   203
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   204
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   205
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   206
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   207
            <td>canHaveChildren</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   208
            <td>Boolean</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   209
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   210
                <p>Whether or not the node can contain child nodes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   211
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   212
                <p>This value is falsy by default unless child nodes are added at instantiation time, in which case it will be automatically set to <code>true</code>. You can also manually set it to <code>true</code> to indicate that a node <i>can</i> have children even though it might not currently have any children.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   213
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   214
                <p>Note that regardless of the value of this property, appending, prepending, or inserting a node into this node will cause <code>canHaveChildren</code> to be set to true automatically.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   215
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   216
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   217
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   218
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   219
            <td>children</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   220
            <td>Array</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   221
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   222
                Child nodes contained within this node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   223
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   224
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   225
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   226
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   227
            <td>data</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   228
            <td>Object</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   229
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   230
                Arbitrary serializable data related to the node. Use this property to store any data that should accompany a node when that node is serialized to JSON.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   231
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   232
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   233
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   234
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   235
            <td>id</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   236
            <td>String</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   237
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   238
                Unique id for the node. If you don't specify a custom id when creating a node, one will be generated automatically.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   239
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   240
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   241
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   242
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   243
            <td>parent</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   244
            <td>Tree.Node</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   245
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   246
                Parent node of the node, or <code>undefined</code> for an unattached node or the root node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   247
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   248
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   249
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   250
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   251
            <td>state</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   252
            <td>Object</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   253
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   254
                Arbitrary serializable state information related to the node. Use this property to store state-specific info &mdash; such as whether a node is "open", "selected", or any other arbitrary state &mdash; that should accompany a node when that node is serialized to JSON.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   255
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   256
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   257
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   258
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   259
            <td>tree</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   260
            <td>Tree</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   261
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   262
                Reference to the Tree instance with which the node is associated.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   263
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   264
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   265
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   266
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   267
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   268
<p>When creating a node, any properties you specify in the node's config object will be applied to the created <code>Y.Tree.Node</code> instance. These can be built-in <code>Y.Tree.Node</code> properties or arbitrary properties for your own use.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   269
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   270
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a tree with some nodes containing arbitrary properties.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   271
var tree = new Y.Tree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   272
    nodes: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   273
        {foo: &#x27;bar&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   274
        {baz: &#x27;quux&#x27;}
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
console.log(tree.children[0].foo); &#x2F;&#x2F; =&gt; &#x27;bar&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   279
console.log(tree.children[1].baz); &#x2F;&#x2F; =&gt; &#x27;quux&#x27;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   280
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   281
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   282
<p>Note that arbitrary properties placed on the node itself won't be serialized if you call the node's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_toJSON"><code>toJSON()</code></a> method or pass it to <code>JSON.stringify()</code>. If you want to store serializable data on a node, store it in the node's <code>data</code> property.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   283
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   284
<h4 id="creating-unattached-nodes">Creating Unattached Nodes</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   285
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   286
<p>An unattached node is a node that has been created, but hasn't yet been added to a tree. Unattached nodes can be created using a tree's <code>createNode()</code> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   287
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   288
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create an unattached node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   289
var node = tree.createNode();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   290
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   291
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   292
<p>A node created using <code>createNode()</code> is associated with the tree that created it, so the node's <code>tree</code> property is a reference to that tree, but since it isn't yet a child of a node in that tree, its <code>parent</code> property will be <code>undefined</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   293
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   294
<pre class="code prettyprint lang-js">console.log(node.tree);   &#x2F;&#x2F; =&gt; the Y.Tree instance that created the node
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   295
console.log(node.parent); &#x2F;&#x2F; =&gt; undefined</pre>
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
<p>An unattached node may have children. Children of an unattached node have a <code>parent</code>, but are still considered unattached because the top-most parent node is not the <code>rootNode</code> of a tree.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   299
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   300
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create an unattached node with children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   301
var node = tree.createNode({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   302
    children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   303
        {id: &#x27;unattached child 1&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   304
        {id: &#x27;unattached child 2&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   305
        {id: &#x27;unattached child 3&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   306
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   307
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   308
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   309
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   310
<p>To test whether a node is attached, call the node's <code>isInTree()</code> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   311
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   312
<pre class="code prettyprint lang-js">var node = tree.createNode();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   313
console.log(node.isInTree()); &#x2F;&#x2F; =&gt; false
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   314
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   315
tree.rootNode.append(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   316
console.log(node.isInTree()); &#x2F;&#x2F; =&gt; true</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   317
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   318
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   319
<p>An unattached node that was created in one tree can be moved to another tree by passing it to the second tree's <code>createNode()</code> method. The node and all its children will lose their association to the original tree and become associated with the second tree, but will remain unattached.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   320
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   321
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create two trees.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   322
var treeA = new Y.Tree(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   323
    treeB = new Y.Tree();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   324
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   325
&#x2F;&#x2F; Create an unattached node in Tree A.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   326
var node = treeA.createNode();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   327
console.log(node.tree); &#x2F;&#x2F; =&gt; treeA
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   328
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   329
&#x2F;&#x2F; Move the node to Tree B.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   330
treeB.createNode(node);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   331
console.log(node.tree); &#x2F;&#x2F; =&gt; treeB</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   332
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   333
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   334
<h4 id="adding-nodes-to-a-tree">Adding Nodes To a Tree</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   335
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   336
<p>Use <code>Y.Tree.Node</code>'s <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_append"><code>append()</code></a>, <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_insert"><code>insert()</code></a>, and <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_prepend"><code>prepend()</code></a> methods to add nodes to other nodes as children. Each method accepts a <code>Y.Tree.Node</code> instance, a node config object, or an array of Node instances or config objects.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   337
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   338
<p>After adding the node, each method returns the node that was added.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   339
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   340
<pre class="code prettyprint lang-js">var tree   = new Y.Tree(),
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   341
    parent = tree.rootNode;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   342
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   343
&#x2F;&#x2F; Append a node (it becomes the parent&#x27;s last child).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   344
parent.append({id: &#x27;appended&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   345
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   346
&#x2F;&#x2F; Prepend a node (it becomes the parent&#x27;s first child).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   347
parent.prepend({id: &#x27;prepended&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   348
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   349
&#x2F;&#x2F; Insert a node at a specific zero-based index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   350
parent.insert({id: &#x27;inserted&#x27;}, {index: 1});</pre>
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
<p>You may also pass a <code>Y.Tree.Node</code> instance instead of a config object.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   354
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   355
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Append a previously created Tree.Node instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   356
var node = tree.createNode();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   357
parent.append(node);</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   358
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   359
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   360
<p>To add multiple nodes at once, pass an array of nodes or config objects.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   361
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   362
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Append multiple nodes at once.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   363
parent.append([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   364
    {id: &#x27;zero&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   365
    {id: &#x27;one&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   366
    {id: &#x27;two&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   367
]);</pre>
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
<p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   371
If you add an existing node that's already a child of another node, the node will be removed from its current parent and moved under the new parent. Similarly, if you add a node that's associated with another tree, the node will be removed from that tree and associated with the new tree.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   372
</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   373
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   374
<h4 id="getting-nodes-from-a-tree">Getting Nodes From a Tree</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   375
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   376
<p>Use <code>Y.Tree</code>'s <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.html#method_getNodeById"><code>getNodeById()</code></a> method to look up any node in the tree (including <a href="#creating-unattached-nodes">unattached nodes</a>) by its <code>id</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   377
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   378
<pre class="code prettyprint lang-js">tree.rootNode.append({id: &#x27;foo&#x27;});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   379
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   380
&#x2F;&#x2F; Look up a node by its id.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   381
var node = tree.getNodeById(&#x27;foo&#x27;); &#x2F;&#x2F; returns the previously added node</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   382
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   383
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   384
<p>Use <code>Y.Tree.Node</code>'s <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_next"><code>next()</code></a> and <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_previous"><code>previous()</code></a> methods to get the next and previous siblings of a node, respectively.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   385
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   386
<pre class="code prettyprint lang-js">tree.rootNode.append([
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   387
    {id: &#x27;zero&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   388
    {id: &#x27;one&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   389
    {id: &#x27;two&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   390
]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   391
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   392
&#x2F;&#x2F; Get the next&#x2F;previous siblings of a node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   393
tree.children[1].next();     &#x2F;&#x2F; =&gt; node &#x27;two&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   394
tree.children[1].previous(); &#x2F;&#x2F; =&gt; node &#x27;one&#x27;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   395
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   396
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   397
<p>If you know the numerical index of a node, you can retrieve it directly from the parent's <code>children</code> array.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   398
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   399
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Look up a child node by numerical index.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   400
parent.children[0]; &#x2F;&#x2F; returns the first child of &#x60;parent&#x60;</pre>
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
<h4 id="removing-nodes-from-a-tree">Removing Nodes From a Tree</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   404
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   405
<p>Use <code>Y.Tree.Node</code>'s <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_empty"><code>empty()</code></a> and <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.html#method_remove"><code>remove()</code></a> methods to remove nodes from a tree.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   406
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   407
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Remove all of this node&#x27;s children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   408
node.empty(); &#x2F;&#x2F; returns an array of removed child nodes
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   409
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   410
&#x2F;&#x2F; Remove this node (and its children, if any) from its parent node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   411
node.remove(); &#x2F;&#x2F; chainable</pre>
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
<p>Removing a node causes it to become <a href="#creating-unattached-nodes">unattached</a>, but doesn't destroy it entirely. A removed node can still be re-added to the tree later.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   415
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   416
<p>To both remove a node and ensure that it can't be reused (freeing up memory in the process), set the <code>destroy</code> option to <code>true</code> when calling <code>empty()</code> or <code>remove()</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   417
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   418
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Remove and destroy all of this node&#x27;s children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   419
node.empty({destroy: true});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   420
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   421
&#x2F;&#x2F; Remove and destroy this node and all of its children.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   422
node.remove({destroy: true});</pre>
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
<p>Use <code>Y.Tree</code>'s <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.html#method_clear"><code>clear()</code></a> method to completely clear a tree by destroying all its nodes (including the root node) and then creating a new root node.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   426
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   427
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Remove and destroy all the tree&#x27;s nodes, including the root node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   428
tree.clear();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   429
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   430
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   431
<p>Note that while it's possible to manually remove a tree's root node by calling its <code>remove()</code> method, this will just cause another root node to be created automatically, since a tree must always have a root node.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   432
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   433
<h3 id="tree-events">Tree Events</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   434
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   435
<p><code>Y.Tree</code> instances expose the following events:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   436
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   437
<table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   438
    <thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   439
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   440
            <th>Event</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   441
            <th>When</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   442
            <th>Payload</th>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   443
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   444
    </thead>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   445
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   446
    <tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   447
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   448
            <td><code>add</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   449
            <td>A node is added to the tree.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   450
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   451
                <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   452
                    <dt>index (<em>Number</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   453
                    <dd>Index at which the node will be added.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   454
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   455
                    <dt>node (<em>Tree.Node</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   456
                    <dd>Node being added.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   457
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   458
                    <dt>parent (<em>Tree.Node</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   459
                    <dd>Parent node to which the node will be added.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   460
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   461
                    <dt>src (<em>String</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   462
                    <dd>Source of the event ("append", "prepend", "insert", etc.)</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   463
                </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   464
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   465
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   466
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   467
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   468
            <td><code>clear</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   469
            <td>The tree is cleared.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   470
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   471
                <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   472
                    <dt>rootNode (<em>Tree.Node</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   473
                    <dd>The tree's new root node.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   474
                </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   475
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   476
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   477
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   478
        <tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   479
            <td><code>remove</code></td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   480
            <td>A node is removed from the tree.</td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   481
            <td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   482
                <dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   483
                    <dt>destroy (<em>Boolean</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   484
                    <dd>Whether or not the node will be destroyed after being removed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   485
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   486
                    <dt>node (<em>Tree.Node</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   487
                    <dd>Node being removed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   488
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   489
                    <dt>parent (<em>Tree.Node</em>)</dt>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   490
                    <dd>Parent node from which the node will be removed.</dd>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   491
                </dl>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   492
            </td>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   493
        </tr>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   494
    </tbody>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   495
</table>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   496
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   497
<p>All events exposed by <code>Y.Tree</code> are preventable, which means that the "on" phase of the event occurs before the event's default action takes place. You can prevent the default action from taking place by calling the <code>preventDefault()</code> method on the event fa&ccedil;ade.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   498
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   499
<p>If you're only interested in being notified of an event after its default action has occurred, subscribe to the event's "after" phase.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   500
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   501
<h2 id="plugins-extensions">Plugins &amp; Extensions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   502
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   503
<p>While the base functionality of Tree is kept intentionally simple and generic, extensions and plugins can be used to provide additional features. This makes it easy to adapt the Tree component to a variety of use cases.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   504
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   505
<p>Each extension is described here individually, but a custom Tree class can mix in multiple extensions to compose a class with the perfect set of features to meet your needs.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   506
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   507
<h3 id="labelable-extension">Labelable Extension</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   508
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   509
<p>The Labelable extension adds support for a serializable <code>label</code> property on <code>Y.Tree.Node</code> instances. This can be useful when a tree is the backing data structure for a widget with labeled nodes, such as a treeview or menu.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   510
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   511
<p>To use the Labelable extension, include the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-labelable.html"><code>tree-labelable</code></a> module, then create a class that extends <code>Y.Tree</code> and mixes in <code>Y.Tree.Labelable</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   512
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   513
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Load the tree-labelable module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   514
YUI().use(&#x27;tree-labelable&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   515
    &#x2F;&#x2F; Create a custom Tree class that mixes in the Labelable extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   516
    Y.PieTree = Y.Base.create(&#x27;pieTree&#x27;, Y.Tree, [Y.Tree.Labelable]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   517
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   518
    &#x2F;&#x2F; ... additional implementation code here ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   519
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   520
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   521
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   522
<p>Tree nodes created by this custom class can now take advantage of the <code>label</code> property.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   523
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   524
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new tree with some labeled nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   525
var tree = new Y.PieTree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   526
    nodes: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   527
        {label: &#x27;fruit pies&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   528
            {label: &#x27;apple&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   529
            {label: &#x27;peach&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   530
            {label: &#x27;marionberry&#x27;}
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
        {label: &#x27;custard pies&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   534
            {label: &#x27;maple custard&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   535
            {label: &#x27;pumpkin&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   536
        ]}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   537
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   538
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   539
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   540
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   541
<h3 id="openable-extension">Openable Extension</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   542
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   543
<p>The Openable extension adds the concept of an "open" and "closed" state for tree nodes, along with related methods and events.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   544
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   545
<p>To use the Openable extension, include the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-openable.html"><code>tree-openable</code></a> module, then create a class that extends <code>Y.Tree</code> and mixes in <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Openable.html"><code>Y.Tree.Openable</code></a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   546
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   547
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Load the tree-openable module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   548
YUI().use(&#x27;tree-openable&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   549
    &#x2F;&#x2F; Create a custom Tree class that mixes in the Openable extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   550
    Y.MenuTree = Y.Base.create(&#x27;menuTree&#x27;, Y.Tree, [Y.Tree.Openable]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   551
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   552
    &#x2F;&#x2F; ... additional implementation code here ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   553
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   554
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   555
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   556
<p>Tree nodes created by this custom class are now considered closed by default, but can be opened either by setting the <code>state.open</code> property to <code>true</code> at creation time or by calling the node's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.Openable.html#method_open"><code>open()</code></a> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   557
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   558
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new tree with some openable nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   559
var tree = new Y.MenuTree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   560
    nodes: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   561
        {id: &#x27;file&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   562
            {id: &#x27;new&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   563
            {id: &#x27;open&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   564
            {id: &#x27;save&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   565
        ]},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   566
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   567
        {id: &#x27;edit&#x27;, state: {open: true}, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   568
            {id: &#x27;copy&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   569
            {id: &#x27;cut&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   570
            {id: &#x27;paste&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   571
        ]}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   572
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   573
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   574
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   575
&#x2F;&#x2F; Close the &quot;edit&quot; node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   576
tree.getNodeById(&#x27;edit&#x27;).close();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   577
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   578
&#x2F;&#x2F; Open the &quot;file&quot; node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   579
tree.getNodeById(&#x27;file&#x27;).open();</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   580
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   581
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   582
<p>Tree instances that mix in the Openable extension receive two new events: <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Openable.html#event_open"><code>open</code></a> and <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Openable.html#event_close"><code>close</code></a>. These events fire when a node is opened or closed, respectively.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   583
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   584
<p>See the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-openable.html">API docs</a> for more details on the methods and events added by the Openable extension.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   585
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   586
<h4 id="lazy-tree-plugin">Lazy Tree Plugin</h4>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   587
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   588
<p>The Lazy Tree plugin is a companion for the Openable extension that makes it easy to load and populate a node's children on demand the first time that node is opened. This can help improve performance in very large trees by avoiding populating the children of closed nodes until they're needed.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   589
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   590
<p>To use the Lazy Tree plugin, include the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-lazy.html"><code>tree-lazy</code></a> and <a href="http://yuilibrary.com/yui/docs/api/modules/tree-openable.html"><code>tree-openable</code></a> modules and create a custom tree class that mixes in the <a href="#openable-extension">Openable extension</a>, as described above.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   591
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   592
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Load the tree-lazy and tree-openable modules. In this example we&#x27;ll also
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   593
&#x2F;&#x2F; load the jsonp module to demonstrate how to load node data via JSONP.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   594
YUI().use(&#x27;jsonp&#x27;, &#x27;tree-lazy&#x27;, &#x27;tree-openable&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   595
    &#x2F;&#x2F; Create a custom Tree class that mixes in the Openable extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   596
    Y.LazyTree = Y.Base.create(&#x27;lazyTree&#x27;, Y.Tree, [Y.Tree.Openable]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   597
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   598
    &#x2F;&#x2F; ... additional implementation code here ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   599
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   600
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   601
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   602
<p>Next, create an instance of your tree class, and plug <a href="http://yuilibrary.com/yui/docs/api/classes/Plugin.Tree.Lazy.html"><code>Y.Plugin.Tree.Lazy</code></a> into it. Provide a custom <code>load()</code> function that will be called the first time a node is opened. This callback is responsible for populating the node with children if necessary.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   603
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   604
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new tree instance.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   605
var tree = new Y.LazyTree();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   606
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   607
&#x2F;&#x2F; Plug in the Lazy Tree plugin and provide a load() callback that will
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   608
&#x2F;&#x2F; populate child nodes on demand.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   609
tree.plug(Y.Plugin.Tree.Lazy, {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   610
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   611
    &#x2F;&#x2F; Custom function that Y.Plugin.Tree.Lazy will call when it needs to
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   612
    &#x2F;&#x2F; load the children for a node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   613
    load: function (node, callback) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   614
        &#x2F;&#x2F; Request child nodes via JSONP.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   615
        Y.jsonp(&#x27;http:&#x2F;&#x2F;example.com&#x2F;data?callback={callback}&#x27;, function (data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   616
            &#x2F;&#x2F; If we didn&#x27;t get any data back, treat this as an error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   617
            if (!data) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   618
                callback(new Error(&#x27;No data!&#x27;));
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   619
                return;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   620
            }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   621
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   622
            &#x2F;&#x2F; Append the loaded children to the node (for the sake of this
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   623
            &#x2F;&#x2F; example, assume that data.children is an array of node config
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   624
            &#x2F;&#x2F; objects).
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   625
            node.append(data.children);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   626
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   627
            &#x2F;&#x2F; Call the callback function to tell Y.Plugin.Tree.Lazy that
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   628
            &#x2F;&#x2F; we&#x27;re done loading data.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   629
            callback();
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   630
        });
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   631
    },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   632
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   633
    &#x2F;&#x2F; Handle events.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   634
    on: {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   635
        &#x2F;&#x2F; Called before the load() function is executed for a node.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   636
        beforeLoad: function () { &#x2F;* ... *&#x2F; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   637
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   638
        &#x2F;&#x2F; Called if the load() method passes an error to its callback.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   639
        error: function () { &#x2F;* ... *&#x2F; },
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   640
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   641
        &#x2F;&#x2F; Called when the load() method executes its callback without an
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   642
        &#x2F;&#x2F; error.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   643
        load: function () { &#x2F;* ... *&#x2F; }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   644
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   645
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   646
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   647
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   648
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   649
<p>The first time any node with a truthy <code>canHaveChildren</code> property is opened, the Lazy Tree plugin will fire a <a href="http://yuilibrary.com/yui/docs/api/classes/Plugin.Tree.Lazy.html#event_beforeLoad"><code>beforeLoad</code></a> event and then call your custom <code>load()</code> function, passing in the node being opened and a callback that you should call once you've finished populating the node with children.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   650
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   651
<p>How you load your node data is entirely up to you. You could use JSONP, XHR, pull it out of localStorage, or use any number of other techniques. All the Lazy Tree plugin cares about is that you populate the node and call the provided callback when you're done.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   652
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   653
<p>If you pass an error to the callback, the plugin will fire an <a href="http://yuilibrary.com/yui/docs/api/classes/Plugin.Tree.Lazy.html#event_error"><code>error</code></a> event.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   654
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   655
<p>If you call the callback without an error, the plugin will fire a <a href="http://yuilibrary.com/yui/docs/api/classes/Plugin.Tree.Lazy.html#event_load"><code>load</code></a> event to indicate that the node's children were loaded successfully.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   656
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   657
<h3 id="selectable-extension">Selectable Extension</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   658
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   659
<p>The Selectable extension adds the concept of a "selected" state for tree nodes, along with related methods, events, and tree attributes.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   660
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   661
<p>To use the Selectable extension, include the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-selectable.html"><code>tree-selectable</code></a> module, then create a class that extends <code>Y.Tree</code> and mixes in <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Selectable.html"><code>Y.Tree.Selectable</code></a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   662
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   663
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Load the tree-selectable module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   664
YUI().use(&#x27;tree-selectable&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   665
    &#x2F;&#x2F; Create a custom Tree class that mixes in the Selectable extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   666
    Y.OptionTree = Y.Base.create(&#x27;optionTree&#x27;, Y.Tree, [Y.Tree.Selectable]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   667
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   668
    &#x2F;&#x2F; ... additional implementation code here ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   669
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   670
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   671
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   672
<p>Tree nodes created by this custom class are now considered unselected by default, but can be selected either by setting the <code>state.selected</code> property to <code>true</code> at creation time or by calling the node's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.Selectable.html#method_select"><code>select()</code></a> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   673
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   674
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   675
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Create a new tree with selectable nodes.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   676
var tree = new Y.OptionTree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   677
    nodes: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   678
        {id: &#x27;kittens&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   679
            {id: &#x27;chartreux&#x27;, state: {selected: true}},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   680
            {id: &#x27;maine coon&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   681
            {id: &#x27;british shorthair&#x27;}
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
        {id: &#x27;puppies&#x27;, children: [
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   685
            {id: &#x27;pug&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   686
            {id: &#x27;dachshund&#x27;},
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   687
            {id: &#x27;miniature schnauzer&#x27;}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   688
        ]}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   689
    ]
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   690
});
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   691
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   692
&#x2F;&#x2F; Select a puppy.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   693
tree.getNodeById(&#x27;pug&#x27;).select();</pre>
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
<p>By default, only one node in the tree may be selected at a time. Selecting a node when another node is already selected will cause the original node to be unselected. To allow multiple selection, set the tree's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Selectable.html#attr_multiSelect"><code>multiSelect</code></a> attribute to <code>true</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   697
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   698
<p>When a node is selected, the Selectable extension fires a <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Selectable.html#event_select"><code>select</code></a> event. When a node is unselected, it fires an <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Selectable.html#event_unselect"><code>unselect</code></a> event.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   699
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   700
<p>See the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-selectable.html">API docs</a> for more details.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   701
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   702
<h3 id="sortable-extension">Sortable Extension</h3>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   703
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   704
<p>The Sortable extension makes it possible to sort the children of any node using custom sorting logic, and also ensures that inserted nodes are added at the appropriate index to maintain the current sort order.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   705
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   706
<p>To use the Sortable extension, include the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-sortable.html"><code>tree-sortable</code></a> module, then create a class that extends <code>Y.Tree</code> and mixes in <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Sortable.html"><code>Y.Tree.Sortable</code></a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   707
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   708
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Load the tree-sortable module.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   709
YUI().use(&#x27;tree-sortable&#x27;, function (Y) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   710
    &#x2F;&#x2F; Create a custom Tree class that mixes in the Sortable extension.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   711
    Y.SortableTree = Y.Base.create(&#x27;sortableTree&#x27;, Y.Tree, [Y.Tree.Sortable]);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   712
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   713
    &#x2F;&#x2F; ... additional implementation code here ...
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   714
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   715
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   716
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   717
<p>Nodes will now be sorted automatically as they're inserted in this tree, or you can manually re-sort all children of a specific node by calling that node's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Node.Sortable.html#method_sort"><code>sort()</code></a> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   718
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   719
<p>By default, nodes are sorted in insertion order, meaning that the first node you insert gets index 0, the second node inserted gets index 1, and so on. To customize the sort criteria, pass a custom <code>sortComparator</code> function to the tree's constructor, or set it on the tree's prototype. This function will receive a node as an argument, and should return a value by which that node should be sorted.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   720
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   721
<p>Here's a <code>sortComparator</code> function that sorts nodes by id:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   722
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   723
<pre class="code prettyprint lang-js">var tree = new Y.SortableTree({
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   724
    sortComparator: function (node) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   725
        return node.id;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   726
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   727
});</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   728
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   729
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   730
<p>To sort nodes in descending order instead of ascending order, set the tree's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Sortable.html#property_sortReverse"><code>sortReverse</code></a> property to <code>true</code>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   731
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   732
<p>Each node in a tree may optionally have its own custom <code>sortComparator</code> and/or <code>sortReverse</code> properties to govern the sort order of its children. This makes it possible to use different sort criteria for different nodes in the tree. Setting these properties on a node will override the tree's <code>sortComparator</code> and <code>sortReverse</code> properties for that node's children (but not for its children's children).</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   733
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   734
<p>Tree instances that mix in the Sortable extension receive a <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.Sortable.html#event_sort"><code>sort</code></a> event that fires when a node's children are manually re-sorted by calling the <code>sort()</code> method.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   735
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   736
<p>See the <a href="http://yuilibrary.com/yui/docs/api/modules/tree-sortable.html">API docs</a> for more details on the methods and events added by the Sortable extension.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   737
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   738
<h2 id="creating-custom-tree-extensions">Creating Custom Tree Extensions</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   739
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   740
<p><code>Y.Tree</code> extends <a href="../base/index.html"><code>Y.Base</code></a>, so a Tree extension begins just like any other Base extension class. However, since <code>Y.Tree.Node</code> doesn't extend <code>Y.Base</code> for performance reasons, a special composition mechanism is used to allow for lightweight <code>Y.Tree.Node</code> extensions.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   741
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   742
<p>For a simple example, let's look at the implementation of the <a href="#labelable-extension">Labelable extension</a>.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   743
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   744
<p>The <code>Y.Tree.Labelable</code> class, which will be mixed into a Tree as a Base extension, looks like this:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   745
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   746
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Y.Tree.Labelable extension class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   747
function Labelable() {}
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   748
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   749
Labelable.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   750
    initializer: function () {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   751
        this.nodeExtensions = this.nodeExtensions.concat(Y.Tree.Node.Labelable);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   752
    }
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   753
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   754
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   755
Y.Tree.Labelable = Labelable;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   756
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   757
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   758
<p>In the <code>initializer()</code> method, the Labelable extension creates a copy of the tree's <a href="http://yuilibrary.com/yui/docs/api/classes/Tree.html#property_nodeExtensions"><code>nodeExtensions</code></a> array, then adds the <code>Y.Tree.Node.Labelable</code> class to it.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   759
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   760
<p>The <code>Y.Tree.Node.Labelable</code> class looks like this:</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   761
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   762
<pre class="code prettyprint lang-js">&#x2F;&#x2F; Y.Tree.Node.Labelable class.
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   763
function NodeLabelable(tree, config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   764
    this._serializable = this._serializable.concat(&#x27;label&#x27;);
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   765
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   766
    if (&#x27;label&#x27; in config) {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   767
        this.label = config.label;
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
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   771
NodeLabelable.prototype = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   772
    label: &#x27;&#x27;
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   773
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   774
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   775
Y.Tree.Node.Labelable = NodeLabelable;</pre>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   776
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   777
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   778
<p>The specific implementation here isn't important, but it illustrates how node extensions work.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   779
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   780
<p>When a Tree instance is created, <code>Y.Tree</code> extensions have a chance to add their custom <code>Y.Tree.Node</code> extension classes to the <code>nodeExtensions</code> array. Once all the tree extension initializers have run, a "composed" Tree Node class is created.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   781
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   782
<p>This composed Tree Node class mixes in all the prototype properties of every class in <code>nodeExtensions</code> and automatically chains their constructor functions. This is similar in some ways to how <code>Y.Base</code> extensions work, but much lighter and faster, so composed nodes remain very efficient.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   783
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   784
<p>For more detailed examples of Tree and Tree Node extensions, take a look at the <a href="https://github.com/yui/yui3/tree/dev-3.x/src/tree/js/extensions">source code</a> for the Openable and Selectable extensions.</p>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   785
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   786
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   787
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   788
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   789
        <div class="yui3-u-1-4">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   790
            <div class="sidebar">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   791
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   792
                    <div id="toc" class="sidebox">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   793
                        <div class="hd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   794
                            <h2 class="no-toc">Table of Contents</h2>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   795
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   796
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   797
                        <div class="bd">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   798
                            <ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   799
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   800
<a href="#getting-started">Getting Started</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   801
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   802
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   803
<a href="#using-tree">Using Tree</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   804
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   805
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   806
<a href="#creating-a-tree">Creating a Tree</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   807
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   808
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   809
<a href="#tree-properties">Tree Properties</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   810
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   811
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   812
<a href="#working-with-tree-nodes">Working with Tree Nodes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   813
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   814
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   815
<a href="#tree-node-properties">Tree Node Properties</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   816
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   817
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   818
<a href="#creating-unattached-nodes">Creating Unattached Nodes</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   819
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   820
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   821
<a href="#adding-nodes-to-a-tree">Adding Nodes To a Tree</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   822
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   823
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   824
<a href="#getting-nodes-from-a-tree">Getting Nodes From a Tree</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   825
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   826
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   827
<a href="#removing-nodes-from-a-tree">Removing Nodes From a Tree</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   828
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   829
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   830
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   831
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   832
<a href="#tree-events">Tree Events</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   833
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   834
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   835
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   836
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   837
<a href="#plugins-extensions">Plugins &amp; Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   838
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   839
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   840
<a href="#labelable-extension">Labelable Extension</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   841
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   842
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   843
<a href="#openable-extension">Openable Extension</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   844
<ul class="toc">
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   845
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   846
<a href="#lazy-tree-plugin">Lazy Tree Plugin</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   847
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   848
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   849
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   850
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   851
<a href="#selectable-extension">Selectable Extension</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   852
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   853
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   854
<a href="#sortable-extension">Sortable Extension</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   855
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   856
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   857
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   858
<li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   859
<a href="#creating-custom-tree-extensions">Creating Custom Tree Extensions</a>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   860
</li>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   861
</ul>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   862
                        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   863
                    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   864
                
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   865
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   866
                
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
            </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   870
        </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   871
    </div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   872
</div>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   873
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   874
<script src="../assets/vendor/prettify/prettify-min.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   875
<script>prettyPrint();</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   876
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   877
<script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   878
YUI.Env.Tests = {
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   879
    examples: [],
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   880
    project: '../assets',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   881
    assets: '../assets/tree',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   882
    name: 'tree',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   883
    title: 'Tree',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   884
    newWindow: '',
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   885
    auto:  false 
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   886
};
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   887
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   888
</script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   889
<script src="../assets/yui/test-runner.js"></script>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   890
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   891
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   892
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   893
</body>
89ef5ed3c48b Upgrades to yui 3.10.3
gibus
parents:
diff changeset
   894
</html>