From: Jo-Philipp Wich Date: Tue, 25 Oct 2011 22:48:43 +0000 (+0000) Subject: libs/web: dispatcher: implement a "firstchild()" target which simply redirects to... X-Git-Tag: 0.11.0~1488 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=6021cf3bdffaff58636e181fccf2343b0cf6a790;p=oweals%2Fluci.git libs/web: dispatcher: implement a "firstchild()" target which simply redirects to the first child of a node, useful for menus that are empty by default and may gain arbritary childs --- diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 9bfa413cf..5f893dad9 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -638,6 +638,35 @@ end -- Subdispatchers -- +function _firstchild() + local path = { unpack(context.path) } + local name = table.concat(path, ".") + local node = context.treecache[name] + + local lowest + if node and node.nodes and next(node.nodes) then + local k, v + for k, v in pairs(node.nodes) do + if not lowest or + (v.order or 100) < (node.nodes[lowest].order or 100) + then + lowest = k + end + end + end + + assert(lowest ~= nil, + "The requested node contains no childs, unable to redispatch") + + path[#path+1] = lowest + dispatch(path) +end + +--- Alias the first (lowest order) page automatically +function firstchild() + return { type = "firstchild", target = _firstchild } +end + --- Create a redirect to another dispatching node. -- @param ... Virtual path destination function alias(...)