'use strict'; 'require baseclass'; 'require ui'; return baseclass.extend({ __init__() { ui.menu.load().then((tree) => this.render(tree)); }, render(tree) { let node = tree; let url = ''; this.renderModeMenu(tree); if (L.env.dispatchpath.length >= 3) { for (var i = 0; i < 3 && node; i++) { node = node.children[L.env.dispatchpath[i]]; url = url + (url ? '/' : '') + L.env.dispatchpath[i]; } if (node) this.renderTabMenu(node, url); } }, renderTabMenu(tree, url, level) { const container = document.querySelector('#tabmenu'); const ul = E('ul', { 'class': 'tabs' }); const children = ui.menu.getChildren(tree); let activeNode = null; children.forEach(child => { const isActive = (L.env.dispatchpath[3 + (level || 0)] == child.name); const activeClass = isActive ? ' active' : ''; const className = 'tabmenu-item-%s %s'.format(child.name, activeClass); ul.appendChild(E('li', { 'class': className }, [ E('a', { 'href': L.url(url, child.name) }, [ _(child.title) ] )])); if (isActive) activeNode = child; }); if (ul.children.length == 0) return E([]); container.appendChild(ul); container.style.display = ''; if (activeNode) this.renderTabMenu(activeNode, url + '/' + activeNode.name, (level || 0) + 1); return ul; }, renderMainMenu(tree, url, level) { const ul = level ? E('ul', { 'class': 'dropdown-menu' }) : document.querySelector('#topmenu'); const children = ui.menu.getChildren(tree); if (children.length == 0 || level > 1) return E([]); children.forEach(child => { const submenu = this.renderMainMenu(child, url + '/' + child.name, (level || 0) + 1); const subclass = (!level && submenu.firstElementChild) ? 'dropdown' : ''; const linkclass = (!level && submenu.firstElementChild) ? 'menu' : ''; const linkurl = submenu.firstElementChild ? '#' : L.url(url, child.name); const li = E('li', { 'class': subclass }, [ E('a', { 'class': linkclass, 'href': linkurl }, [ _(child.title), ]), submenu ]); ul.appendChild(li); }); ul.style.display = ''; return ul; }, renderModeMenu(tree) { const ul = document.querySelector('#modemenu'); const children = ui.menu.getChildren(tree); children.forEach((child, index) => { const isActive = L.env.requestpath.length ? child.name === L.env.requestpath[0] : index === 0; ul.appendChild(E('li', { 'class': isActive ? 'active' : '' }, [ E('a', { 'href': L.url(child.name) }, [ _(child.title) ]) ])); if (isActive) this.renderMainMenu(child, child.name); }); if (ul.children.length > 1) ul.style.display = ''; } });