TreeView
A tree view that presents a hierarchical view of information. Create treeview simple and easy with Metro UI.
About
To creating treeview
we use <ul>
element with role data-role="treeview"
.
Nodes are defined with <li>
element.
To create subtree
just add an <ul>
inside the <li>
.
<ul data-role="treeview">
<li>...</li>
...
<li>...</li>
<ul>
<li>...</li>
...
<li>...</li>
</ul>
</ul>
Add node
Node
is a <li>
with special data-*
attributes.
The attributes are define: icon
and caption
of node.
<li data-icon="..." data-caption="..."></li>
<ul data-role="treeview">
<li data-icon="<span class='mif-star-full'></span>" data-caption="Favorites">
<ul>
<li data-icon="<span class='mif-library'></span>" data-caption="Projects"></li>
<li data-icon="<span class='mif-download'></span>" data-caption="Downloads"></li>
<li data-icon="<img src='images/desktop.png'>" data-caption="Desktop"></li>
</ul>
</li>
<li data-icon="<span class='mif-onedrive'></span>" data-caption="OneDrive">
<ul>
<li data-caption="Documents"></li>
<li data-caption="Projects" data-collapsed="true">
<ul>
<li data-caption="Web"></li>
<li data-caption="Android"></li>
<li data-caption="Windows"></li>
<li data-caption="iOS"></li>
</ul>
</li>
</ul>
</li>
</ul>
Add inputs
You can add input controls into treeview nodes. A prerequisite is the need to put each input
in a separate <li>
.
Checkbox
<li><input type="checkbox" data-role="checkbox"></li>
Radio
<li><input type="radio" data-role="radio"></li>
Switch
<li><input type="checkbox" data-role="switch"></li>
Input
<li><input type="text" data-role="input"></li>
Select
<li><select data-role="select">...</select></li>
Textarea
<li><textarea data-role="textarea"></textarea></li>
<ul data-role="treeview">
<li class="expanded" data-caption="Checkboxes">
<ul>
<li><input type="checkbox" data-role="checkbox" data-caption="Play animation"></li>
<li><input type="checkbox" data-role="checkbox" data-caption="Play sound" checked></li>
<li><input type="checkbox" data-role="checkbox" data-caption="Disabled" disabled></li>
<li><input type="checkbox" data-role="checkbox" data-caption="Disabled checked" checked disabled></li>
</ul>
</li>
<li class="expanded" data-caption="Radios">
<ul>
<li><input type="radio" name="r1" data-role="radio" data-caption="Play animation"></li>
<li><input type="radio" name="r1" data-role="radio" data-caption="Play sound" checked></li>
<li><input type="radio" data-role="radio" data-caption="Disabled" disabled></li>
<li><input type="radio" data-role="radio" data-caption="Disabled checked" checked disabled></li>
</ul>
</li>
<li class="expanded" data-caption="Switches">
<ul>
<li><input type="checkbox" data-role="switch" data-caption="Play animation"></li>
<li><input type="checkbox" data-role="switch" data-caption="Play sound" checked></li>
<li><input type="checkbox" data-role="switch" data-caption="Disabled" disabled></li>
<li><input type="checkbox" data-role="switch" data-caption="Disabled checked" checked disabled></li>
</ul>
</li>
<li class="expanded" data-caption="Inputs">
<ul>
<li style="width: 220px"><input type="text" data-role="input"></li>
<li style="width: 220px">
<select data-role="select">
<option value="1">Value 1</option>
<option value="2">Value 2</option>
<option value="3">Value 3</option>
</select>
</li>
<li style="width: 220px"><textarea data-role="textarea"></textarea></li>
</ul>
</li>
</ul>
Options tree
If you need to create options tree
, you can deal with this easy with Metro UI treeview
component.
You do not need any special actions, just add the checkboxes to nodes. Indeterminate
state for checkboxes will be enabled automatically.
<ul data-role="treeview">
<li>
<input type="checkbox" data-role="checkbox" data-caption="Play video" title="">
<ul>
<li><input type="checkbox" data-role="checkbox" data-caption="AVI" title=""></li>
<li><input type="checkbox" data-role="checkbox" data-caption="MPEG" title=""></li>
<li><input checked type="checkbox" data-role="checkbox" data-caption="VIDX" title=""></li>
<li><input type="checkbox" data-role="checkbox" data-caption="MP4" title=""></li>
<li><input checked type="checkbox" data-role="checkbox" data-caption="XVID" title=""></li>
</ul>
</li>
<li><input type="checkbox" data-role="checkbox" data-caption="Play audio" title=""></li>
<li>
<input type="checkbox" data-role="checkbox" data-caption="Subtitles" title="">
<ul>
<li><input type="checkbox" data-role="checkbox" data-caption="English" title=""></li>
<li><input checked type="checkbox" data-role="checkbox" data-caption="Ukrainian" title=""></li>
<li><input type="checkbox" data-role="checkbox" data-caption="Dutch" title=""></li>
</ul>
</li>
</ul>
Events
When treeview
works, it generated the numbers of events. You can use callback for this events to behavior with treeview
.
Event | Data-* | Desc |
---|---|---|
onNodeClick(node, tree) | data-on-node-click |
Fired when user click on node caption |
onNodeDblClick(node, tree) | data-on-node-dblclick |
Fired when user dblclick on node caption |
onNodeInsert(node, tree) | data-on-node-insert |
Fired when node was inserted |
onNodeDelete(node, tree) | data-on-node-delete |
Fired when node was deleted |
onNodeClean(node, tree) | data-on-node-clean |
Fired when node was cleaned |
onCheckClick(state, check, node, tree) | data-on-check-click |
Fired when user click on checkbox |
onRadioClick(state, check, node, tree) | data-on-radio-click |
Fired when user click on radio input |
onExpandNode(node, tree) | data-on-expand-node |
Fired when node was expanded |
onCollapseNode(node, tree) | data-on-collapse-node |
Fired when node was collapsed |
onTreeviewCreate(node, tree) | data-on-treeview-create |
Fired when tree was created |
Methods
You can use treeview
methods to interact with the component.
- toggleNode(node) - toggle node state
- addTo(node, data) - add child node
- insertBefore(node, data) - add new node before specified node
- insertAfter(node, data) - add new node after specified node
- del(node) - delete node from tree
- clean(node) - clean node
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').addTo(null, {
caption: 'New node',
icon: '<span class=\'mif-air\'></span>'
})
">Add node</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').addTo($('#tv_1').find('.current'), {
caption: 'New node'
})
">Add subnode</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').addTo($('#tv_1').find('.current'), {
html: '<input data-role=checkbox data-caption=Checkbox>'
})
">Add checkbox</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').insertBefore($('#tv_1').find('.current'), {
caption: 'Before node'
})
">Insert before</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').insertAfter($('#tv_1').find('.current'), {
caption: 'After node'
})
">Insert after</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').del($('#tv_1').find('.current'))
">Delete</button>
<button class="button" onclick="
Metro.getPlugin('#tv_1','treeview').clean($('#tv_1').find('.current'))
">Clear</button>
<hr>
<ul data-role="treeview" id="tv_1"></ul>