luci-base: introduce luci.dispatcher.lookup()
authorJo-Philipp Wich <jo@mein.io>
Thu, 5 Apr 2018 19:58:41 +0000 (21:58 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 5 Apr 2018 21:03:01 +0000 (23:03 +0200)
The lookup function takes multiple, possibly malformed path fragments,
splits them on slashes, constructs a temporary path and looks up the
result in the dispatch tree.

If a matching node has been found, the function will return both the
node reference and the canonical url to it.

If no corresponding node is found, the function returns nil.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/dispatcher.luadoc

index c93fd78a1bf358765f4206f8491756eca646fec2..88f9440c5d7c13fef3c1dfabb807ad3d7cfb83b3 100644 (file)
@@ -658,6 +658,23 @@ function node(...)
        return c
 end
 
+function lookup(...)
+       local i, path = nil, {}
+       for i = 1, select('#', ...) do
+               local name, arg = nil, tostring(select(i, ...))
+               for name in arg:gmatch("[^/]+") do
+                       path[#path+1] = name
+               end
+       end
+
+       for i = #path, 1, -1 do
+               local node = context.treecache[table.concat(path, ".", 1, i)]
+               if node and (i == #path or node.leaf) then
+                       return node, build_url(unpack(path))
+               end
+       end
+end
+
 function _create_node(path)
        if #path == 0 then
                return context.tree
index 743463c74f98ab5ee77927b9a4dec8544775ab4d..ddf534b3e1e8f140b7a0f37f1eadbb29d93a586f 100644 (file)
@@ -116,8 +116,8 @@ Create a new dispatching node and define common parameters.
 
 ---[[
 Fetch or create a dispatching node without setting the target module or
-
 enabling the node.
+
 @class function
 @name get
 @param ...             Virtual path
@@ -133,6 +133,15 @@ Fetch or create a new dispatching node.
 @return                        Dispatching tree node
 ]]
 
+---[[
+Lookup node in dispatching tree.
+
+@class function
+@name lookup
+@param  ...            Virtual path
+@return Node object, canonical url or nil if the path was not found.
+]]
+
 ---[[
 Alias the first (lowest order) page automatically