From 5f40074c0e2a6193cdd89893309787b2d31a24e4 Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Mon, 26 May 2008 09:45:12 +0000 Subject: * Updated dispatcher to use fastindex if available * Updated webuci SGI * Updated dispatcher --- .../luci-splash/src/view/splash/splash.htm | 9 +++-- applications/sgi-webuci/root/lib/webuci/main.lua | 11 +++--- applications/sgi-webuci/src/sgi/webuci.lua | 11 +++--- core/src/dispatcher.lua | 45 +++++++++++++++++---- core/src/menu.lua | 46 ---------------------- core/src/template.lua | 9 ----- modules/admin-core/src/controller/admin/status.lua | 10 +---- 7 files changed, 57 insertions(+), 84 deletions(-) delete mode 100644 core/src/menu.lua diff --git a/applications/luci-splash/src/view/splash/splash.htm b/applications/luci-splash/src/view/splash/splash.htm index db4bd0f78..22631e08f 100644 --- a/applications/luci-splash/src/view/splash/splash.htm +++ b/applications/luci-splash/src/view/splash/splash.htm @@ -1,7 +1,10 @@ +<% +local c = luci.model.uci.sections("freifunk").community +

<%:welcome Willkommen%>!

Du bist jetzt mit dem freien Funknetz -<%~freifunk.community.name%> verbunden.
+<%=c.name%> verbunden.
Wir sind ein experimentelles Gemeinschaftsnetzwerk, aber kein Internetanbieter.

@@ -20,12 +23,12 @@ Bitte sei Dir dessen bewusst und verhalte Dich dementsprechend:

Wenn Du unsere Idee gut findest, kannst Du uns unterstützen:

-Mit einem Klick auf <%:accept Annehmen%> kannst du für <%~luci_splash.general.leasetime%> Stunden +Mit einem Klick auf <%:accept Annehmen%> kannst du für <%=c.leasetime%> Stunden über unser Netz das Internet verwenden. Dann wirst du erneut aufgefordet, diese Bedingungen zu akzeptieren.

\ No newline at end of file diff --git a/applications/sgi-webuci/root/lib/webuci/main.lua b/applications/sgi-webuci/root/lib/webuci/main.lua index 478c2a94e..cb2730d14 100644 --- a/applications/sgi-webuci/root/lib/webuci/main.lua +++ b/applications/sgi-webuci/root/lib/webuci/main.lua @@ -1,21 +1,20 @@ module("webuci", package.seeall) function prepare_req(uri) + require("luci.dispatcher").createindex() env = {} env.REQUEST_URI = uri - require("luci.dispatcher").createindex() end -function init_req(context) +function handle_req(context) env.SERVER_PROTOCOL = context.server_proto env.REMOTE_ADDR = context.remote_addr env.REQUEST_METHOD = context.request_method - env.PATH_INFO = "/" .. context.uri + env.PATH_INFO = context.uri env.REMOTE_PORT = context.remote_port env.SERVER_ADDR = context.server_addr env.SCRIPT_NAME = env.REQUEST_URI:sub(1, #env.REQUEST_URI - #env.PATH_INFO) -end - -function handle_req(context) + + luci.sgi.webuci.initenv(env) luci.dispatcher.httpdispatch() end \ No newline at end of file diff --git a/applications/sgi-webuci/src/sgi/webuci.lua b/applications/sgi-webuci/src/sgi/webuci.lua index 39eab3c4a..498bca921 100644 --- a/applications/sgi-webuci/src/sgi/webuci.lua +++ b/applications/sgi-webuci/src/sgi/webuci.lua @@ -25,12 +25,13 @@ limitations under the License. ]]-- module("luci.sgi.webuci", package.seeall) --- Environment Table -luci.http.env = webuci.env - - local status_set = false +-- Initialize the environment +function initenv(env) + luci.http.env = env +end + -- Returns the main dispatcher URL function luci.http.dispatcher() return luci.http.env.SCRIPT_NAME or "" @@ -94,6 +95,6 @@ end -- Sets HTTP-Status-Header function luci.http.status(code, message) - print(webuci.env.SERVER_PROTOCOL .. " " .. tostring(code) .. " " .. message) + print(luci.http.env.SERVER_PROTOCOL .. " " .. tostring(code) .. " " .. message) status_set = true end 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 - -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 diff --git a/modules/admin-core/src/controller/admin/status.lua b/modules/admin-core/src/controller/admin/status.lua index 02c3af40b..34c210ca6 100644 --- a/modules/admin-core/src/controller/admin/status.lua +++ b/modules/admin-core/src/controller/admin/status.lua @@ -1,14 +1,8 @@ module("luci.controller.admin.status", package.seeall) function index() - local page = node("admin", "status") - page.target = template("admin_status/index") - page.title = "Status" - page.order = 20 - - local page = node("admin", "status", "syslog") - page.target = action_syslog - page.title = "Systemprotokoll" + entry({"admin", "status"}, template("admin_status/index"), "Status", 20) + entry({"admin", "status", "syslog"}, action_syslog, "Systemprotokoll") end function action_syslog() -- cgit v1.2.3