5 return baseclass.extend({
7 ui.menu.load().then(L.bind(this.render, this));
10 render: function(tree) {
14 this.renderModeMenu(tree);
16 if (L.env.dispatchpath.length >= 3) {
17 for (var i = 0; i < 3 && node; i++) {
18 node = node.children[L.env.dispatchpath[i]];
19 url = url + (url ? '/' : '') + L.env.dispatchpath[i];
23 this.renderTabMenu(node, url);
27 handleMenuExpand: function(ev) {
28 var a = ev.target, ul1 = a.parentNode.parentNode, ul2 = a.nextElementSibling;
30 document.querySelectorAll('ul.mainmenu.l1 > li.active').forEach(function(li) {
31 if (li !== a.parentNode)
32 li.classList.remove('active');
38 if (ul2.parentNode.offsetLeft + ul2.offsetWidth <= ul1.offsetLeft + ul1.offsetWidth)
39 ul2.classList.add('align-left');
41 ul1.classList.add('active');
42 a.parentNode.classList.add('active');
49 renderMainMenu: function(tree, url, level) {
50 var l = (level || 0) + 1,
51 ul = E('ul', { 'class': 'mainmenu l%d'.format(l) }),
52 children = ui.menu.getChildren(tree);
54 if (children.length == 0 || l > 2)
57 for (var i = 0; i < children.length; i++) {
58 var isActive = (L.env.dispatchpath[l] == children[i].name),
59 activeClass = 'mainmenu-item-%s%s'.format(children[i].name, isActive ? ' selected' : '');
61 ul.appendChild(E('li', { 'class': activeClass }, [
63 'href': L.url(url, children[i].name),
64 'click': (l == 1) ? this.handleMenuExpand : null,
65 }, [ _(children[i].title) ]),
66 this.renderMainMenu(children[i], url + '/' + children[i].name, l)
71 var container = document.querySelector('#mainmenu');
73 container.appendChild(ul);
74 container.style.display = '';
80 renderModeMenu: function(tree) {
81 var ul = document.querySelector('#modemenu'),
82 children = ui.menu.getChildren(tree);
84 for (var i = 0; i < children.length; i++) {
85 var isActive = (L.env.requestpath.length ? children[i].name == L.env.requestpath[0] : i == 0);
87 ul.appendChild(E('li', {}, [
89 'href': L.url(children[i].name),
90 'class': isActive ? 'active' : null
91 }, [ _(children[i].title) ])
95 this.renderMainMenu(children[i], children[i].name);
98 if (ul.children.length > 1)
99 ul.style.display = '';
102 renderTabMenu: function(tree, url, level) {
103 var container = document.querySelector('#tabmenu'),
104 l = (level || 0) + 1,
105 ul = E('ul', { 'class': 'cbi-tabmenu' }),
106 children = ui.menu.getChildren(tree),
109 if (children.length == 0)
112 for (var i = 0; i < children.length; i++) {
113 var isActive = (L.env.dispatchpath[l + 2] == children[i].name),
114 activeClass = isActive ? ' cbi-tab' : '',
115 className = 'tabmenu-item-%s %s'.format(children[i].name, activeClass);
117 ul.appendChild(E('li', { 'class': className }, [
118 E('a', { 'href': L.url(url, children[i].name) }, [ _(children[i].title) ] )
122 activeNode = children[i];
125 container.appendChild(ul);
126 container.style.display = '';
129 container.appendChild(this.renderTabMenu(activeNode, url + '/' + activeNode.name, l));