luci-base: rework "in request" flagging logic for menu nodes
authorJo-Philipp Wich <jo@mein.io>
Fri, 29 Jun 2018 15:46:56 +0000 (17:46 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 2 Jul 2018 06:46:26 +0000 (08:46 +0200)
The previous implementation failed to mark active nodes under some
circumstances.

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

index 6850d7e3a946ae55f58f7f2066221dee6be132a3..6d5a8f4d3db655680a626aa44bc0938357e1c624 100644 (file)
@@ -703,15 +703,22 @@ function _create_node(path)
                local last = table.remove(path)
                local parent = _create_node(path)
 
-               c = {nodes={}, auto=true}
-               -- the node is "in request" if the request path matches
-               -- at least up to the length of the node path
-               if parent.inreq and context.path[#path+1] == last then
-                 c.inreq = true
+               c = {nodes={}, auto=true, inreq=true}
+
+               local _, n
+               for _, n in ipairs(path) do
+                       if context.path[_] ~= n then
+                               c.inreq = false
+                               break
+                       end
                end
+
+               c.inreq = c.inreq and (context.path[#path + 1] == last)
+
                parent.nodes[last] = c
                context.treecache[name] = c
        end
+
        return c
 end