diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/src/dispatcher.lua | 45 | ||||
-rw-r--r-- | core/src/menu.lua | 46 | ||||
-rw-r--r-- | core/src/template.lua | 9 |
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 |