* General code cleanup
authorSteven Barth <steven@midlink.org>
Tue, 6 May 2008 20:44:45 +0000 (20:44 +0000)
committerSteven Barth <steven@midlink.org>
Tue, 6 May 2008 20:44:45 +0000 (20:44 +0000)
* Removed unnecessary module dependencies
* Completed SGI abstraction
* Reworked ffluci.sgi.webuci

16 files changed:
contrib/package/lua-luci/patches/200-lua-path [new file with mode: 0644]
core/contrib/webuci_bootstrap.lua
core/src/ffluci/cbi.lua
core/src/ffluci/config.lua
core/src/ffluci/debug.lua
core/src/ffluci/dispatcher.lua
core/src/ffluci/fs.lua
core/src/ffluci/i18n.lua
core/src/ffluci/menu.lua
core/src/ffluci/sgi/haserl.lua
core/src/ffluci/sgi/webuci.lua
core/src/ffluci/sys.lua
core/src/ffluci/template.lua
core/src/ffluci/util.lua
core/src/ffluci/view/cbi/header.htm
core/src/ffluci/view/error404.htm

diff --git a/contrib/package/lua-luci/patches/200-lua-path b/contrib/package/lua-luci/patches/200-lua-path
new file mode 100644 (file)
index 0000000..62dd00e
--- /dev/null
@@ -0,0 +1,15 @@
+--- b/src/luaconf.h    2008-05-06 20:10:46.000000000 +0200
++++ a/src/luaconf.h    2008-05-06 20:10:27.000000000 +0200
+@@ -95,9 +95,9 @@
+       ".\\?.dll;"  LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll"
+ #else
+-#define LUA_ROOT      "/usr/local/"
+-#define LUA_LDIR      LUA_ROOT "share/lua/5.1/"
+-#define LUA_CDIR      LUA_ROOT "lib/lua/5.1/"
++#define LUA_ROOT      "/usr/"
++#define LUA_LDIR      LUA_ROOT "share/lua/"
++#define LUA_CDIR      LUA_ROOT "lib/lua/"
+ #define LUA_PATH_DEFAULT  \
+               "./?.lua;"  LUA_LDIR"?.lua;"  LUA_LDIR"?/init.lua;" \
+                           LUA_CDIR"?.lua;"  LUA_CDIR"?/init.lua"
index 1733437075c78793cd838e273021c6d1a205637b..fd4c47ab572602bc3bdd5b73892bf8c25b3785e7 100644 (file)
@@ -1,2 +1,22 @@
 package.path  = "/usr/lib/lua/?.lua;/usr/lib/lua/?/init.lua;" .. package.path
 package.cpath = "/usr/lib/lua/?.so;" .. package.cpath
+module("webuci", package.seeall)
+
+function prepare_req(uri)
+       require("ffluci.menu").get()
+       REQUEST_URI = uri
+end
+
+function init_req(context)
+       SERVER_PROTOCOL = context.server_proto
+       REMOTE_ADDR     = context.remote_addr
+       REQUEST_METHOD  = context.request_method
+       PATH_INFO       = "/" .. context.uri
+       REMOTE_PORT     = context.remote_port
+       SERVER_ADDR     = context.server_addr
+       SCRIPT_NAME     = REQUEST_URI:sub(1, #REQUEST_URI - #context.uri)
+end
+
+function handle_req(context)
+       require("ffluci.dispatcher").httpdispatch()
+end
\ No newline at end of file
index 4d6d25c39618b617ea0d7e165a585fb26fa28163..3384e5c38ad64fb604b3858ecbf63c0b12f017cd 100644 (file)
@@ -39,8 +39,9 @@ function load(cbimap)
        require("ffluci.fs")
        require("ffluci.i18n")
        require("ffluci.config")
+       require("ffluci.sys")
        
-       local cbidir = ffluci.config.path .. "/model/cbi/"
+       local cbidir = ffluci.sys.libpath() .. "/model/cbi/"
        local func, err = loadfile(cbidir..cbimap..".lua")
        
        if not func then
index 90fa6b1c9192aa70e06ea52d9a9cd83700f2eaf8..0db45ac891cab2d2338ea60cd4ee75307f6c373c 100644 (file)
@@ -28,10 +28,7 @@ limitations under the License.
 module("ffluci.config", package.seeall)
 require("ffluci.model.uci")
 require("ffluci.util")
-require("ffluci.debug")
-
--- Our path (wtf Lua lacks __file__ support)
-path = ffluci.debug.path
+require("ffluci.sys")
 
 -- Warning! This is only for fallback and compatibility purporses! --
 main = {}
index f1132edcc445d32a2c27638337342c5a0187b104..1be40348e40934819b43bdbbf9e87c099de9b249 100644 (file)
@@ -1,2 +1,2 @@
 module("ffluci.debug", package.seeall)
-path = require("ffluci.fs").dirname(debug.getinfo(1, 'S').source:sub(2))
\ No newline at end of file
+__file__ = debug.getinfo(1, 'S').source:sub(2)
\ No newline at end of file
index 15ac3c7b3112b5e6d52a49a113158b61157af264..813e35d5906689c75c13628c790553b9f126ed1c 100644 (file)
@@ -150,7 +150,7 @@ end
 
 -- Dispatches a request depending on the PATH_INFO variable
 function httpdispatch()
-       local pathinfo = os.getenv("PATH_INFO") or ""
+       local pathinfo = ffluci.http.get_path_info() or ""
        local parts = pathinfo:gmatch("/[%w-]+")
        
        local sanitize = function(s, default)
index 6e8859a0de11743b680a0baea1e11109e6eb0b14..3eb562b80addf91226ef5eec09d7a4a5eb22a2d0 100644 (file)
@@ -28,6 +28,11 @@ module("ffluci.fs", package.seeall)
 
 require("posix")
 
+-- Glob
+function glob(pattern)
+       return posix.glob(pattern)
+end
+
 -- Checks whether a file exists
 function isfile(filename)
        local fp = io.open(path, "r")
index 11f4afe871ea302287ee02d3b5188f8e43600737..489308cc9e9c95fd888fec496df62ed465c76a38 100644 (file)
@@ -25,11 +25,11 @@ limitations under the License.
 ]]--
 
 module("ffluci.i18n", package.seeall)
-
 require("ffluci.config")
+require("ffluci.sys")
 
 table   = {}
-i18ndir = ffluci.config.path .. "/i18n/"
+i18ndir = ffluci.sys.libpath() .. "/i18n/"
 
 -- Clears the translation table
 function clear()
index e55c0e76a48ad6593ab935b2df723b0b4f7b2d69..5cbb725a42404bed414b99f95dcc7e8f4f67d9c6 100644 (file)
@@ -27,18 +27,15 @@ module("ffluci.menu", package.seeall)
 
 require("ffluci.fs")
 require("ffluci.util")
-require("ffluci.template")
-require("ffluci.i18n")
-require("ffluci.config")
-require("ffluci.model.ipkg")
+require("ffluci.sys")
 
 -- Default modelpath
-modelpath = ffluci.config.path .. "/model/menu/"
+modelpath = ffluci.sys.libpath() .. "/model/menu/"
 
 -- Menu definition extra scope
 scope = {
-       translate = ffluci.i18n.translate,
-       loadtrans = ffluci.i18n.loadc,
+       translate = function(...) return require("ffluci.i18n").translate(...) end,
+       loadtrans = function(...) return require("ffluci.i18n").loadc(...) end,
        isfile    = ffluci.fs.mtime
 }
 
@@ -101,26 +98,40 @@ end
 
 -- Collect all menu information provided in the model dir
 function collect()
+       local generators = {}
+       
        for k, menu in pairs(ffluci.fs.dir(modelpath)) do
                if menu:sub(1, 1) ~= "." then
                        local f = loadfile(modelpath.."/"..menu)
-                       local env = ffluci.util.clone(scope)
-                       
-                       env.add = add
-                       env.sel = sel
-                       env.act = act
-                       
-                       setfenv(f, env)
-                       f()
+                       if f then
+                               table.insert(generators, f)
+                       end
                end
        end
+       
+       return generators
+end
+
+-- Parse the collected information
+function parse(generators)
+       menu = {}
+       for i, f in pairs(generators) do
+               local env = ffluci.util.clone(scope)
+               
+               env.add = add
+               env.sel = sel
+               env.act = act
+               
+               setfenv(f, env)
+               f()
+       end
+       return menu
 end
 
 -- Returns the menu information
 function get()
        if not menu then
-               menu = {}
-               collect()
+               menu = parse(collect())
        end
        return menu
 end
\ No newline at end of file
index 76dc3854aff52bee67ae15632c3ca0b17394f556..e58189d1cf0edde45d843bee5e9e26ac940ef79b 100644 (file)
@@ -54,12 +54,21 @@ function ffluci.http.formvaluetable(prefix)
        return ffluci.http.formvalue(prefix, {})
 end
 
+-- Returns the path info
+function ffluci.http.get_path_info()
+       return ENV.PATH_INFO
+end
 
 -- Returns the User's IP
 function ffluci.http.get_remote_addr()
        return ENV.REMOTE_ADDR
 end
 
+-- Returns the request URI
+function ffluci.http.get_request_uri()
+       return ENV.REQUEST_URI
+end
+
 -- Returns the script name
 function ffluci.http.get_script_name()
        return ENV.SCRIPT_NAME
index 297780295926960aa8290b92aa09dc91debbb297..c60964662e8b8f14761ea358b8ca4fe17408f964 100644 (file)
@@ -51,15 +51,25 @@ function ffluci.http.formvaluetable(prefix)
        return vals
 end
 
+-- Returns the path info
+function ffluci.http.get_path_info()
+       return webuci.PATH_INFO
+end
 
 -- Returns the User's IP
 function ffluci.http.get_remote_addr()
-       return os.getenv("REMOTE_ADDR")
+       return webuci.REMOTE_ADDR
+end
+
+-- Returns the request URI
+function ffluci.http.get_request_uri()
+       return webuci.REQUEST_URI
 end
 
+
 -- Returns the script name
 function ffluci.http.get_script_name()
-       return os.getenv("SCRIPT_NAME")
+       return webuci.SCRIPT_NAME
 end
 
 
@@ -81,5 +91,5 @@ end
 
 -- Sets HTTP-Status-Header
 function ffluci.http.set_status(code, message)
-       print("Status: " .. tostring(code) .. " " .. message)
+       print(webuci.REQUEST_METHOD .. " " .. tostring(code) .. " " .. message)
 end
index d71bce71bca71241e6f1500346c823bc98b6227f..376654893286daf319d670baccc8518be24c4f19 100644 (file)
@@ -82,6 +82,11 @@ function httpget(url)
        return exec("wget -qO- '"..url:gsub("'", "").."'")
 end
 
+-- Returns the FFLuci-Basedir
+function libpath()
+       return ffluci.fs.dirname(require("ffluci.debug").__file__)
+end
+
 -- Returns the load average
 function loadavg()
        local loadavg = io.lines("/proc/loadavg")()
index 04cc07dbb1f2c99b692dcf1071bee3cf6f40b29d..a972f2bc42265bed5a82a7dee4719c62f32eff48 100644 (file)
@@ -28,11 +28,9 @@ module("ffluci.template", package.seeall)
 require("ffluci.config")
 require("ffluci.util")
 require("ffluci.fs")
-require("ffluci.i18n")
 require("ffluci.http")
-require("ffluci.model.uci")
 
-viewdir = ffluci.config.path .. "/view/"
+viewdir = ffluci.sys.libpath() .. "/view/"
 
 
 -- Compile modes:
@@ -52,8 +50,8 @@ compiler_enable_bytecode = false
 
 -- Define the namespace for template modules
 viewns = {
-       translate  = ffluci.i18n.translate,
-       config     = function(...) return ffluci.model.uci.get(...) or "" end,
+       translate  = function(...) return require("ffluci.i18n").translate(...) end,
+       config     = function(...) return require("ffluci.model.uci").get(...) or "" end,
        controller = ffluci.http.get_script_name(),
        media      = ffluci.config.main.mediaurlbase,
        write      = io.write,
index 3ff7bc2033f5e7a970e4ab6fccc47e29e6dc3b3f..b76278ddab6ee3534cc60bfe486b0280f4dac593 100644 (file)
@@ -139,12 +139,6 @@ function resfenv(f)
 end 
 
 
--- Returns the Haserl unique sessionid
-function sessionid()
-       return ENV.SESSIONID
-end
-
-
 -- Splits a string into an array
 function split(str, pat, max, regex)
        pat = pat or "\n"
index 1b69a3a319163991b75d247d7c5c162bb25c4895..97542f031e31bb0d09314f4d43eafee018c06827 100644 (file)
@@ -1,5 +1,5 @@
 <%+header%>
-               <form method="post" action="<%=os.getenv("REQUEST_URI")%>">
+               <form method="post" action="<%=ffluci.http.get_request_uri()%>">
                        <div>
                                <script type="text/javascript" src="<%=media%>/cbi.js"></script>
                                <input type="hidden" name="cbi.submit" value="1" />
index adc671de00a0110d30f145f9a70e49e0fd32a6be..1a9d74a9f2bd0a660160c99d34350c4a311df6ea 100644 (file)
@@ -1,5 +1,5 @@
 <%+header%>
 <h1>404 Not Found</h1>
 <p>Sorry, the object you requested was not found.</p>
-<tt>Unable to dispatch: <%=os.getenv("PATH_INFO")%></tt>
+<tt>Unable to dispatch: <%=ffluci.http.get_path_info()%></tt>
 <%+footer%>
\ No newline at end of file