-- Local dispatch database
local tree = {nodes={}}
+-- Index table
+local index = {}
+
-- Global request object
request = {}
-- Active dispatched node
dispatched = nil
+-- Status fields
+built_index = false
+built_tree = false
+
-- Builds a URL
function build_url(...)
return false
end
--- Dispatches a request depending on the PATH_INFO variable
+-- Creates a request object for dispatching
function httpdispatch()
local pathinfo = luci.http.env.PATH_INFO or ""
local c = tree
dispatch()
end
+-- Dispatches a request
function dispatch()
+ if not built_tree then
+ createtree()
+ end
+
local c = tree
local track = {}
-- Generates the dispatching tree
function createindex()
+ index = {}
local path = luci.sys.libpath() .. "/controller/"
local suff = ".lua"
else
createindex_plain(path, suff)
end
+
+ built_index = true
end
-- Uses fastindex to create the dispatching tree
fi.scan()
for k, v in pairs(fi.indexes) do
- local stat, mod = pcall(require, v[2])
-
- luci.util.updfenv(v[1], luci.dispatcher)
- pcall(v[1])
+ index[v[2]] = v[1]
end
end
stat, mod = pcall(require, c)
if stat and mod and type(mod.index) == "function" then
- luci.util.updfenv(mod.index, luci.dispatcher)
- pcall(mod.index)
+ index[c] = mod.index
end
end
end
+-- Creates the dispatching tree from the index
+function createtree()
+ if not built_index then
+ createindex()
+ end
+
+ for k, v in pairs(index) do
+ luci.util.updfenv(v, _M)
+
+ local stat, mod = pcall(require, k)
+ if stat then
+ luci.util.updfenv(v, mod)
+ end
+
+ pcall(v)
+ end
+
+ built_tree = true
+end
+
-- Shortcut for creating a dispatching node
function entry(path, target, title, order, add)
add = add or {}