summaryrefslogtreecommitdiffhomepage
path: root/libs/web/luasrc/dispatcher.lua
diff options
context:
space:
mode:
Diffstat (limited to 'libs/web/luasrc/dispatcher.lua')
-rw-r--r--libs/web/luasrc/dispatcher.lua29
1 files changed, 29 insertions, 0 deletions
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(...)