X-Git-Url: https://git.archive.openwrt.org/?p=project%2Fluci.git;a=blobdiff_plain;f=libs%2Fweb%2Fluasrc%2Fdispatcher.lua;h=e9d3b24d1b8094ac691ff63b164996a12d8bfd3f;hp=d075975da3fb2a26157d882de4d7cbbf41f239a2;hb=2623e2880c69e5e19891ad06759dcbb8ad62f91b;hpb=8687547e47b7c90099013b903e89113300903d27 diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index d075975da..e9d3b24d1 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -80,7 +80,7 @@ function httpdispatch() local pathinfo = luci.http.env.PATH_INFO or "" local c = tree - for s in pathinfo:gmatch("([%w_]+)") do + for s in pathinfo:gmatch("([%w-]+)") do table.insert(request, s) end @@ -98,7 +98,7 @@ function dispatch() for i, s in ipairs(request) do c = c.nodes[s] - if not c then + if not c or c.leaf then break end @@ -128,9 +128,6 @@ function dispatch() tpl.viewns.media = luci.config.main.mediaurlbase tpl.viewns.resource = luci.config.main.resourcebase - -- Load default translation - require("luci.i18n").loadc("default") - if c and type(c.target) == "function" then dispatched = c @@ -154,11 +151,13 @@ function createindex() local path = luci.sys.libpath() .. "/controller/" local suff = ".lua" - if pcall(require, "fastindex") then + --[[if pcall(require, "fastindex") then createindex_fastindex(path, suff) else createindex_plain(path, suff) - end + end]]-- + + createindex_plain(path, suff) built_index = true end @@ -222,10 +221,20 @@ function createtree() end require("luci.i18n") + + -- Load default translation + luci.i18n.loadc("default") + + local scope = _G + for k,v in pairs(_M) do + if type(v) == "function" then + scope[k] = v + end + end for k, v in pairs(index) do - luci.util.updfenv(v, _M) - luci.util.extfenv(v, "_NAME", k) + scope._NAME = k + setfenv(v, scope) local stat, err = pcall(v) if not stat then @@ -282,6 +291,21 @@ function alias(...) end end +function rewrite(n, ...) + local req = arg + return function() + for i=1,n do + table.remove(request, 1) + end + + for i,r in ipairs(req) do + table.insert(request, i, r) + end + + dispatch() + end +end + function call(name) return function() getfenv()[name]() end end