* Updated dispatcher to use fastindex if available
authorSteven Barth <steven@midlink.org>
Mon, 26 May 2008 09:45:12 +0000 (09:45 +0000)
committerSteven Barth <steven@midlink.org>
Mon, 26 May 2008 09:45:12 +0000 (09:45 +0000)
* Updated webuci SGI
* Updated dispatcher

applications/luci-splash/src/view/splash/splash.htm
applications/sgi-webuci/root/lib/webuci/main.lua
applications/sgi-webuci/src/sgi/webuci.lua
core/src/dispatcher.lua
core/src/menu.lua [deleted file]
core/src/template.lua
modules/admin-core/src/controller/admin/status.lua

index db4bd0f78075ee8251a30323382c239e8963f87e..22631e08f42cbbc50ef0b29b9aca999ccf6994f4 100644 (file)
@@ -1,7 +1,10 @@
+<%
+local c = luci.model.uci.sections("freifunk").community
+
 <h1><%:welcome Willkommen%>!</h1>
 <p>
 Du bist jetzt mit dem freien Funknetz 
-<a href="<%~freifunk.community.homepage%>"><%~freifunk.community.name%></a> verbunden.<br />
+<a href="<%=c.homepage%>"><%=c.name%></a> verbunden.<br />
 Wir sind ein experimentelles Gemeinschaftsnetzwerk, aber kein Internetanbieter.
 </p>
 
@@ -20,12 +23,12 @@ Bitte sei Dir dessen bewusst und verhalte Dich dementsprechend:
 <p>
 Wenn Du unsere Idee gut findest, kannst Du uns unterstützen:
 <ul>
-<li><a href="<%~freifunk.community.homepage%>">Werde selbst Freifunker oder teile deinen Internetzugang!</a></li>
+<li><a href="<%=c.homepage%>">Werde selbst Freifunker oder teile deinen Internetzugang!</a></li>
 <li>Betreibe deine anderen WLAN-Geräte <em>NICHT</em> auf den Kanälen 1-5, diese stören oft unser Netz.</li>
 </ul>
 </p>
 
 <p>
-Mit einem Klick auf <em><%:accept Annehmen%></em> kannst du für <%~luci_splash.general.leasetime%> Stunden
+Mit einem Klick auf <em><%:accept Annehmen%></em> kannst du für <%=c.leasetime%> Stunden
 über unser Netz das Internet verwenden. Dann wirst du erneut aufgefordet, diese Bedingungen zu akzeptieren.
 </p>
\ No newline at end of file
index 478c2a94e37b633d57e67d078b7f66fb829459a2..cb2730d147d8158fc7fe6af07fab69e1456eeb35 100644 (file)
@@ -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
index 39eab3c4a2726771e56bd02d9536375812211189..498bca9214d58d0b3bcb3061f5b68f64f9ad44f3 100644 (file)
@@ -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
index 3e8b4d6b6c5fde95490d742a25d5aa73ca101e20..d69045c0245d06365de579bb24ecf9be3384f7f2 100644 (file)
@@ -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 (file)
index 30cc5a1..0000000
+++ /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
index 7fc2958c80502e5df785c8d222bf918bc3928ed1..369aa0a30b4bac478aac61eb19151e0983e7e057 100644 (file)
@@ -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
index 02c3af40b084dd0774cc2e7884ec401d7c5df49b..34c210ca6b7ad24e9da3da97e82ce69ae8e250dc 100644 (file)
@@ -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()