summaryrefslogtreecommitdiffhomepage
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/src/dispatcher.lua45
-rw-r--r--core/src/menu.lua46
-rw-r--r--core/src/template.lua9
3 files changed, 38 insertions, 62 deletions
diff --git a/core/src/dispatcher.lua b/core/src/dispatcher.lua
index 3e8b4d6b6..d69045c02 100644
--- a/core/src/dispatcher.lua
+++ b/core/src/dispatcher.lua
@@ -73,7 +73,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
@@ -107,6 +107,14 @@ function dispatch()
if track.setuser then
luci.sys.process.setuser(track.setuser)
end
+
+ -- Init template engine
+ local tpl = require("luci.template")
+ tpl.viewns.translate = function(...) return require("luci.i18n").translate(...) end
+ tpl.viewns.controller = luci.http.dispatcher()
+ tpl.viewns.uploadctrl = luci.http.dispatcher_upload()
+ tpl.viewns.media = luci.config.main.mediaurlbase
+ tpl.viewns.resource = luci.config.main.resourcebase
if c and type(c.target) == "function" then
@@ -121,19 +129,42 @@ function dispatch()
end
end
-
--- Calls the index function of all available controllers
+-- Generates the dispatching tree
function createindex()
- local root = luci.sys.libpath() .. "/controller/"
+ local path = luci.sys.libpath() .. "/controller/"
local suff = ".lua"
+
+ if pcall(require, "fastindex") then
+ createindex_fastindex(path, suff)
+ else
+ createindex_plain(path, suff)
+ end
+end
+-- Uses fastindex to create the dispatching tree
+function createindex_fastindex(path, suffix)
+ local fi = fastindex.new("index")
+ fi.add(path .. "*" .. suffix)
+ fi.add(path .. "*/*" .. suffix)
+ 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])
+ end
+end
+
+-- Calls the index function of all available controllers
+function createindex_plain(path, suffix)
local controllers = luci.util.combine(
- luci.fs.glob(root .. "*" .. suff) or {},
- luci.fs.glob(root .. "*/*" .. suff) or {}
+ luci.fs.glob(path .. "*" .. suffix) or {},
+ luci.fs.glob(path .. "*/*" .. suffix) or {}
)
for i,c in ipairs(controllers) do
- c = "luci.controller." .. c:sub(#root+1, #c-#suff):gsub("/", ".")
+ c = "luci.controller." .. c:sub(#path+1, #c-#suffix):gsub("/", ".")
stat, mod = pcall(require, c)
if stat and mod and type(mod.index) == "function" then
diff --git a/core/src/menu.lua b/core/src/menu.lua
deleted file mode 100644
index 30cc5a122..000000000
--- a/core/src/menu.lua
+++ /dev/null
@@ -1,46 +0,0 @@
---[[
-LuCI - Menu Builder
-
-Description:
-Collects menu building information from controllers
-
-FileId:
-$Id$
-
-License:
-Copyright 2008 Steven Barth <steven@midlink.org>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-]]--
-module("luci.menu", package.seeall)
-
-require("luci.fs")
-require("luci.util")
-require("luci.sys")
-require("luci.dispatcher")
-
--- Default modelpath
-modelpattern = luci.sys.libpath() .. "/model/menu/*.lua"
-
--- Menu definition extra scope
-scope = {
- translate = function(...) return require("luci.i18n").translate(...) end,
- loadtrans = function(...) return require("luci.i18n").loadc(...) end,
- isfile = luci.fs.isfile
-}
-
--- Returns the menu information
-function get()
- return menu
-end \ No newline at end of file
diff --git a/core/src/template.lua b/core/src/template.lua
index 7fc2958c8..369aa0a30 100644
--- a/core/src/template.lua
+++ b/core/src/template.lua
@@ -50,12 +50,6 @@ compiler_enable_bytecode = false
-- Define the namespace for template modules
viewns = {
- translate = function(...) return require("luci.i18n").translate(...) end,
- config = function(...) return require("luci.model.uci").get(...) or "" end,
- controller = luci.http.dispatcher(),
- uploadctrl = luci.http.dispatcher_upload(),
- media = luci.config.main.mediaurlbase,
- resource = luci.config.main.resourcebase,
write = io.write,
include = function(name) Template(name):render(getfenv(2)) end,
}
@@ -94,7 +88,6 @@ function compile(template)
-- Replacements
local r_include = "')\ninclude('%s')\nwrite('"
local r_i18n = "'..translate('%1','%2')..'"
- local r_uci = "'..config('%1','%2','%3')..'"
local r_pexec = "'..(%s or '')..'"
local r_exec = "')\n%s\nwrite('"
@@ -106,8 +99,6 @@ function compile(template)
re = r_include:format(sanitize(string.sub(v, 2)))
elseif p == ":" then
re = sanitize(v):gsub(":(.-) (.+)", r_i18n)
- elseif p == "~" then
- re = sanitize(v):gsub("~(.-)%.(.-)%.(.+)", r_uci)
elseif p == "=" then
re = r_pexec:format(v:sub(2))
else