From b1e131a3db1b6ec2ceecb5df4a224f3de2735e6d Mon Sep 17 00:00:00 2001 From: Steven Barth Date: Tue, 27 May 2008 20:39:48 +0000 Subject: * Optimized dispatching model --- .../controller/luci_ffwizard_leipzig/wizard.lua | 2 +- .../luci-splash/luasrc/controller/splash/splash.lua | 6 +++--- libs/web/luasrc/dispatcher.lua | 20 ++++++++++++-------- .../admin-core/luasrc/controller/admin/status.lua | 2 +- .../admin-core/luasrc/controller/admin/system.lua | 12 ++++++------ modules/admin-core/luasrc/controller/admin/uci.lua | 4 ++-- .../freifunk/luasrc/controller/freifunk/freifunk.lua | 2 +- .../freifunk/luasrc/controller/freifunk/luciinfo.lua | 2 +- modules/freifunk/luasrc/controller/freifunk/olsr.lua | 10 +++++----- 9 files changed, 32 insertions(+), 28 deletions(-) diff --git a/applications/luci-ffwizard-leipzig/luasrc/controller/luci_ffwizard_leipzig/wizard.lua b/applications/luci-ffwizard-leipzig/luasrc/controller/luci_ffwizard_leipzig/wizard.lua index 4f2390b37..2fabfb11d 100644 --- a/applications/luci-ffwizard-leipzig/luasrc/controller/luci_ffwizard_leipzig/wizard.lua +++ b/applications/luci-ffwizard-leipzig/luasrc/controller/luci_ffwizard_leipzig/wizard.lua @@ -1,7 +1,7 @@ module("luci.controller.luci_ffwizard_leipzig.wizard", package.seeall) function index() - entry({"admin", "index", "wizard"}, action_wizard, "Freifunkassistent", 20) + entry({"admin", "index", "wizard"}, call("action_wizard"), "Freifunkassistent", 20) end diff --git a/applications/luci-splash/luasrc/controller/splash/splash.lua b/applications/luci-splash/luasrc/controller/splash/splash.lua index 544f1e89e..e7448d7fb 100644 --- a/applications/luci-splash/luasrc/controller/splash/splash.lua +++ b/applications/luci-splash/luasrc/controller/splash/splash.lua @@ -5,9 +5,9 @@ function index() page.target = cbi("splash/splash") page.title = "Client-Splash" - node("splash", "splash", "activate").target = action_activate - node("splash", "splash", "allowed").target = action_allowed - node("splash", "splash", "unknown").target = action_unknown + node("splash", "splash", "activate").target = call("action_activate") + node("splash", "splash", "allowed").target = call("action_allowed") + node("splash", "splash", "unknown").target = call("action_unknown") node("splash", "splash", "splash").target = template("splash_splash/splash") end diff --git a/libs/web/luasrc/dispatcher.lua b/libs/web/luasrc/dispatcher.lua index 6a6bceb29..202e07332 100644 --- a/libs/web/luasrc/dispatcher.lua +++ b/libs/web/luasrc/dispatcher.lua @@ -137,7 +137,11 @@ function dispatch() if c and type(c.target) == "function" then dispatched = c - + stat, mod = pcall(require, c.module) + if stat then + luci.util.updfenv(c.target, mod) + end + stat, err = pcall(c.target) if not stat then error500(err) @@ -222,12 +226,7 @@ function createtree() 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 - + luci.util.extfenv(v, "_NAME", k) pcall(v) end @@ -242,6 +241,7 @@ function entry(path, target, title, order, add) c.target = target c.title = title c.order = order + c.module = getfenv(2)._NAME for k,v in pairs(add) do c[k] = v @@ -260,7 +260,7 @@ function node(...) for k,v in ipairs(arg) do if not c.nodes[v] then - c.nodes[v] = {nodes={}} + c.nodes[v] = {nodes={}, module=getfenv(2)._NAME} end c = c.nodes[v] @@ -278,6 +278,10 @@ function alias(...) end end +function call(name) + return function() getfenv()[name]() end +end + function template(name) require("luci.template") return function() luci.template.render(name) end diff --git a/modules/admin-core/luasrc/controller/admin/status.lua b/modules/admin-core/luasrc/controller/admin/status.lua index 34c210ca6..79f728b99 100644 --- a/modules/admin-core/luasrc/controller/admin/status.lua +++ b/modules/admin-core/luasrc/controller/admin/status.lua @@ -2,7 +2,7 @@ module("luci.controller.admin.status", package.seeall) function index() entry({"admin", "status"}, template("admin_status/index"), "Status", 20) - entry({"admin", "status", "syslog"}, action_syslog, "Systemprotokoll") + entry({"admin", "status", "syslog"}, call("action_syslog"), "Systemprotokoll") end function action_syslog() diff --git a/modules/admin-core/luasrc/controller/admin/system.lua b/modules/admin-core/luasrc/controller/admin/system.lua index e44e787fd..304f1eee8 100644 --- a/modules/admin-core/luasrc/controller/admin/system.lua +++ b/modules/admin-core/luasrc/controller/admin/system.lua @@ -14,21 +14,21 @@ function index() page.order = 30 local page = node("admin", "system", "packages") - page.target = action_packages + page.target = call("action_packages") page.title = "Paketverwaltung" page.order = 10 local page = node("admin", "system", "packages", "ipkg") - page.target = action_ipkg + page.target = call("action_ipkg") page.title = "IPKG-Konfiguration" local page = node("admin", "system", "passwd") - page.target = action_passwd + page.target = call("action_passwd") page.title = "Passwort ändern" page.order = 20 local page = node("admin", "system", "sshkeys") - page.target = action_sshkeys + page.target = call("action_sshkeys") page.title = "SSH-Schlüssel" page.order = 30 @@ -43,12 +43,12 @@ function index() page.order = 50 local page = node("admin", "system", "upgrade") - page.target = action_upgrade + page.target = call("action_upgrade") page.title = "Firmwareupgrade" page.order = 60 local page = node("admin", "system", "reboot") - page.target = action_reboot + page.target = call("action_reboot") page.title = "Neu starten" page.order = 70 end diff --git a/modules/admin-core/luasrc/controller/admin/uci.lua b/modules/admin-core/luasrc/controller/admin/uci.lua index ca1440bde..9c0e1beb5 100644 --- a/modules/admin-core/luasrc/controller/admin/uci.lua +++ b/modules/admin-core/luasrc/controller/admin/uci.lua @@ -4,8 +4,8 @@ require("luci.sys") function index() node("admin", "uci", "changes").target = template("admin_uci/changes") - node("admin", "uci", "revert").target = action_revert - node("admin", "uci", "apply").target = action_apply + node("admin", "uci", "revert").target = call("action_revert") + node("admin", "uci", "apply").target = call("action_apply") end -- This function has a higher priority than the admin_uci/apply template diff --git a/modules/freifunk/luasrc/controller/freifunk/freifunk.lua b/modules/freifunk/luasrc/controller/freifunk/freifunk.lua index 104f6cdfc..89813b3d8 100644 --- a/modules/freifunk/luasrc/controller/freifunk/freifunk.lua +++ b/modules/freifunk/luasrc/controller/freifunk/freifunk.lua @@ -22,7 +22,7 @@ function index() local page = node("freifunk", "status") - page.target = action_status + page.target = call("action_status") page.title = "Status" page.order = 20 page.setuser = false diff --git a/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua b/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua index aabab19a1..c4c627601 100644 --- a/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua +++ b/modules/freifunk/luasrc/controller/freifunk/luciinfo.lua @@ -1,7 +1,7 @@ module("luci.controller.freifunk.luciinfo", package.seeall) function index() - node("freifunk", "luciinfo").target = action_index + node("freifunk", "luciinfo").target = call("action_index") end function action_index() diff --git a/modules/freifunk/luasrc/controller/freifunk/olsr.lua b/modules/freifunk/luasrc/controller/freifunk/olsr.lua index 29858fc0e..ac143277d 100644 --- a/modules/freifunk/luasrc/controller/freifunk/olsr.lua +++ b/modules/freifunk/luasrc/controller/freifunk/olsr.lua @@ -3,27 +3,27 @@ require("luci.sys") function index() local page = node("freifunk", "olsr") - page.target = action_index + page.target = call("action_index") page.title = "OLSR" page.order = 30 local page = node("freifunk", "olsr", "routes") - page.target = action_routes + page.target = call("action_routes") page.title = "Routen" page.order = 10 local page = node("freifunk", "olsr", "topology") - page.target = action_topology + page.target = call("action_topology") page.title = "Topologie" page.order = 20 local page = node("freifunk", "olsr", "hna") - page.target = action_hna + page.target = call("action_hna") page.title = "HNA" page.order = 30 local page = node("freifunk", "olsr", "mid") - page.target = action_mid + page.target = call("action_mid") page.title = "MID" page.order = 50 end -- cgit v1.2.3