From: Jo-Philipp Wich Date: Sat, 18 Apr 2020 21:05:01 +0000 (+0200) Subject: luci-base: ui.js: hide unsatisfied firstchild menu nodes X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=ec50f8a7849b42a7e84cf55ec51d8603094f7a9f;p=oweals%2Fluci.git luci-base: ui.js: hide unsatisfied firstchild menu nodes Signed-off-by: Jo-Philipp Wich (cherry picked from commit 7882f3ebdde0364314a45aa6dd8fbc4e766e8ea8) --- diff --git a/modules/luci-base/htdocs/luci-static/resources/ui.js b/modules/luci-base/htdocs/luci-static/resources/ui.js index 06520f7f8..d860638e9 100644 --- a/modules/luci-base/htdocs/luci-static/resources/ui.js +++ b/modules/luci-base/htdocs/luci-static/resources/ui.js @@ -2951,6 +2951,27 @@ var UIFileUpload = UIElement.extend(/** @lends LuCI.ui.FileUpload.prototype */ { } }); + +function scrubMenu(node) { + var hasSatisfiedChild = false; + + if (L.isObject(node.children)) { + for (var k in node.children) { + var child = scrubMenu(node.children[k]); + + if (child.title) + hasSatisfiedChild = hasSatisfiedChild || child.satisfied; + } + } + + if (L.isObject(node.action) && + node.action.type == 'firstchild' && + hasSatisfiedChild == false) + node.satisfied = false; + + return node; +}; + /** * Handle menu. * @@ -2986,7 +3007,7 @@ var UIMenu = baseclass.singleton(/** @lends LuCI.ui.menu.prototype */ { if (!L.isObject(this.menu)) { this.menu = request.get(L.url('admin/menu')).then(L.bind(function(menu) { - this.menu = menu.json(); + this.menu = scrubMenu(menu.json()); session.setLocalData('menu', this.menu); return this.menu;