summaryrefslogtreecommitdiffhomepage
path: root/libs/web
diff options
context:
space:
mode:
Diffstat (limited to 'libs/web')
-rw-r--r--libs/web/luasrc/dispatcher.lua28
1 files changed, 20 insertions, 8 deletions
diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua
index 7ff4031a6..99ba9adca 100644
--- a/libs/web/luasrc/dispatcher.lua
+++ b/libs/web/luasrc/dispatcher.lua
@@ -99,10 +99,9 @@ end
-- Creates a request object for dispatching
function httpdispatch()
local pathinfo = luci.http.env.PATH_INFO or ""
- local c = tree
- for s in pathinfo:gmatch("([%w-]+)") do
- table.insert(request, s)
+ for node in pathinfo:gmatch("[^/]+") do
+ table.insert(request, node)
end
dispatch()
@@ -163,7 +162,7 @@ function dispatch()
tpl.viewns.media = luci.config.main.mediaurlbase
tpl.viewns.resource = luci.config.main.resourcebase
tpl.viewns.uci = require("luci.model.uci").config
- tpl.viewns.REQUEST_URI = luci.http.env.SCRIPT_NAME .. luci.http.env.PATH_INFO
+ tpl.viewns.REQUEST_URI = luci.http.env.SCRIPT_NAME .. (luci.http.env.PATH_INFO or "")
if c and type(c.target) == "function" then
@@ -304,7 +303,16 @@ function assign(path, clone, title, order)
obj.title = title
obj.order = order
- setmetatable(obj, {__index = clone})
+ local c = tree
+ for k, v in ipairs(clone) do
+ if not c.nodes[v] then
+ c.nodes[v] = {nodes={}}
+ end
+
+ c = c.nodes[v]
+ end
+
+ setmetatable(obj, {__index = c})
return obj
end
@@ -325,18 +333,22 @@ end
function node(...)
local c = tree
- if arg[1] and type(arg[1]) == "table" then
- arg = arg[1]
+ arg.n = nil
+ if arg[1] then
+ if type(arg[1]) == "table" then
+ arg = arg[1]
+ end
end
for k,v in ipairs(arg) do
if not c.nodes[v] then
- c.nodes[v] = {nodes={}, module=getfenv(2)._NAME}
+ c.nodes[v] = {nodes={}}
end
c = c.nodes[v]
end
+ c.module = getfenv(2)._NAME
c.path = arg
return c