libs/web: Small improvements, added inline documentation

This commit is contained in:
Steven Barth 2008-07-29 20:32:02 +00:00
parent a478f25f51
commit 5b43543226
5 changed files with 100 additions and 25 deletions

View file

@ -27,5 +27,7 @@ limitations under the License.
module("luci.config", module("luci.config",
function(m) function(m)
setmetatable(m, {__index = require("luci.model.uci").get_all("luci")}) if pcall(require, "luci.model.uci") then
setmetatable(m, {__index = luci.model.uci.get_all("luci")})
end
end) end)

View file

@ -23,6 +23,8 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
--- LuCI web dispatcher.
module("luci.dispatcher", package.seeall) module("luci.dispatcher", package.seeall)
require("luci.init") require("luci.init")
require("luci.http") require("luci.http")
@ -38,12 +40,16 @@ local index = nil
local fi local fi
-- Builds a URL --- Build the URL relative to the server webroot from given virtual path.
-- @param ... Virtual path
-- @return Relative URL
function build_url(...) function build_url(...)
return luci.http.getenv("SCRIPT_NAME") .. "/" .. table.concat(arg, "/") return luci.http.getenv("SCRIPT_NAME") .. "/" .. table.concat(arg, "/")
end end
-- Sends a 404 error code and renders the "error404" template if available --- Send a 404 error code and render the "error404" template if available.
-- @param message Custom error message (optional)
-- @return false
function error404(message) function error404(message)
luci.http.status(404, "Not Found") luci.http.status(404, "Not Found")
message = message or "Not Found" message = message or "Not Found"
@ -56,7 +62,9 @@ function error404(message)
return false return false
end end
-- Sends a 500 error code and renders the "error500" template if available --- Send a 500 error code and render the "error500" template if available.
-- @param message Custom error message (optional)#
-- @return false
function error500(message) function error500(message)
luci.http.status(500, "Internal Server Error") luci.http.status(500, "Internal Server Error")
@ -68,7 +76,9 @@ function error500(message)
return false return false
end end
-- Renders an authorization form --- Render and evaluate the system authentication login form.
-- @param default Default username
-- @return Authentication status
function sysauth(default) function sysauth(default)
local user = luci.http.formvalue("username") local user = luci.http.formvalue("username")
local pass = luci.http.formvalue("password") local pass = luci.http.formvalue("password")
@ -87,7 +97,8 @@ function sysauth(default)
end end
end end
-- Creates a request object for dispatching --- Dispatch an HTTP request.
-- @param request LuCI HTTP Request object
function httpdispatch(request) function httpdispatch(request)
luci.http.context.request = request luci.http.context.request = request
context.request = {} context.request = {}
@ -101,7 +112,8 @@ function httpdispatch(request)
luci.http.close() luci.http.close()
end end
-- Dispatches a request --- Dispatches a LuCI virtual path.
-- @param request Virtual path
function dispatch(request) function dispatch(request)
context.path = request context.path = request
@ -187,7 +199,7 @@ function dispatch(request)
end end
end end
-- Generates the dispatching tree --- Generate the dispatching index using the best possible strategy.
function createindex() function createindex()
local path = luci.sys.libpath() .. "/controller/" local path = luci.sys.libpath() .. "/controller/"
local suff = ".lua" local suff = ".lua"
@ -199,7 +211,9 @@ function createindex()
end end
end end
-- Uses fastindex to create the dispatching tree --- Generate the dispatching index using the fastindex C-indexer.
-- @param path Controller base directory
-- @param suffix Controller file suffix
function createindex_fastindex(path, suffix) function createindex_fastindex(path, suffix)
index = {} index = {}
@ -215,8 +229,9 @@ function createindex_fastindex(path, suffix)
end end
end end
-- Calls the index function of all available controllers --- Generate the dispatching index using the native file-cache based strategy.
-- Fallback for transition purposes / Leave it in as long as it works otherwise throw it away -- @param path Controller base directory
-- @param suffix Controller file suffix
function createindex_plain(path, suffix) function createindex_plain(path, suffix)
index = {} index = {}
@ -265,7 +280,8 @@ function createindex_plain(path, suffix)
end end
end end
-- Creates the dispatching tree from the index --- Create the dispatching tree from the index.
-- Build the index before if it does not exist yet.
function createtree() function createtree()
if not index then if not index then
createindex() createindex()
@ -297,7 +313,12 @@ function createtree()
end end
end end
-- Reassigns a node to another position --- Clone a node of the dispatching tree to another position.
-- @param path Virtual path destination
-- @param clone Virtual path source
-- @param title Destination node title (optional)
-- @param order Destination node order value (optional)
-- @return Dispatching tree node
function assign(path, clone, title, order) function assign(path, clone, title, order)
local obj = node(unpack(path)) local obj = node(unpack(path))
obj.nodes = nil obj.nodes = nil
@ -320,7 +341,12 @@ function assign(path, clone, title, order)
return obj return obj
end end
-- Shortcut for creating a dispatching node --- Create a new dispatching node and define common parameters.
-- @param path Virtual path
-- @param target Target function to call when dispatched.
-- @param title Destination node title
-- @param order Destination node order value (optional)
-- @return Dispatching tree node
function entry(path, target, title, order) function entry(path, target, title, order)
local c = node(unpack(path)) local c = node(unpack(path))
@ -332,7 +358,9 @@ function entry(path, target, title, order)
return c return c
end end
-- Fetch a dispatching node --- Fetch or create a new dispatching node.
-- @param ... Virtual path
-- @return Dispatching tree node
function node(...) function node(...)
local c = context.tree local c = context.tree
arg.n = nil arg.n = nil
@ -353,6 +381,9 @@ function node(...)
end end
-- Subdispatchers -- -- Subdispatchers --
--- Create a redirect to another dispatching node.
-- @param ... Virtual path destination
function alias(...) function alias(...)
local req = arg local req = arg
return function() return function()
@ -360,6 +391,9 @@ function alias(...)
end end
end end
--- Rewrite the first x path values of the request.
-- @param n Number of path values to replace
-- @param ... Virtual path to replace removed path values with
function rewrite(n, ...) function rewrite(n, ...)
local req = arg local req = arg
return function() return function()
@ -375,16 +409,23 @@ function rewrite(n, ...)
end end
end end
--- Create a function-call dispatching target.
-- @param nane Target function of local controller
-- @param ... Additional parameters passed to the function
function call(name, ...) function call(name, ...)
local argv = {...} local argv = {...}
return function() return getfenv()[name](unpack(argv)) end return function() return getfenv()[name](unpack(argv)) end
end end
--- Create a template render dispatching target.
-- @param nane Template to be rendered
function template(name) function template(name)
require("luci.template") require("luci.template")
return function() luci.template.render(name) end return function() luci.template.render(name) end
end end
--- Create a CBI model dispatching target.
-- @param model CBI model tpo be rendered
function cbi(model) function cbi(model)
require("luci.cbi") require("luci.cbi")
require("luci.template") require("luci.template")

View file

@ -24,6 +24,7 @@ limitations under the License.
]]-- ]]--
--- LuCI translation library.
module("luci.i18n", package.seeall) module("luci.i18n", package.seeall)
require("luci.sys") require("luci.sys")
@ -33,12 +34,16 @@ loaded = {}
context = luci.util.threadlocal() context = luci.util.threadlocal()
default = "en" default = "en"
-- Clears the translation table --- Clear the translation table.
function clear() function clear()
table = {} table = {}
end end
-- Loads a translation and copies its data into the global translation table --- Load a translation and copy its data into the translation table.
-- @param file Language file
-- @param lang Two-letter language code
-- @param force Force reload even if already loaded (optional)
-- @return Success status
function load(file, lang, force) function load(file, lang, force)
lang = lang or "" lang = lang or ""
if force or not loaded[lang] or not loaded[lang][file] then if force or not loaded[lang] or not loaded[lang][file] then
@ -58,25 +63,36 @@ function load(file, lang, force)
end end
end end
-- Same as load but autocompletes the filename with .LANG from config.lang --- Load a translation file using the default translation language.
-- Alternatively load the translation of the fallback language.
-- @param file Language file
-- @param force Force reload even if already loaded (optional)
function loadc(file, force) function loadc(file, force)
load(file, default, force) load(file, default, force)
return load(file, context.lang, force) return load(file, context.lang, force)
end end
-- Sets the context language --- Set the context default translation language.
-- @param lang Two-letter language code
function setlanguage(lang) function setlanguage(lang)
context.lang = lang context.lang = lang
end end
-- Returns the i18n-value defined by "key" or if there is no such: "default" --- Return the translated value for a specific translation key.
-- @param key Translation key
-- @param def Default translation
-- @return Translated string
function translate(key, def) function translate(key, def)
return (table[context.lang] and table[context.lang][key]) return (table[context.lang] and table[context.lang][key])
or (table[default] and table[default][key]) or (table[default] and table[default][key])
or def or def
end end
-- Translate shourtcut with sprintf/string.format inclusion --- Return the translated value for a specific translation key and use it as sprintf pattern.
-- @param key Translation key
-- @param default Default translation
-- @param ... Format parameters
-- @return Translated and formatted string
function translatef(key, default, ...) function translatef(key, default, ...)
return translate(key, default):format(...) return translate(key, default):format(...)
end end

View file

@ -12,6 +12,8 @@ You may obtain a copy of the License at
$Id$ $Id$
]]-- ]]--
--- LuCI session library.
module("luci.sauth", package.seeall) module("luci.sauth", package.seeall)
require("luci.fs") require("luci.fs")
require("luci.util") require("luci.util")
@ -22,7 +24,7 @@ luci.config.sauth = luci.config.sauth or {}
sessionpath = luci.config.sauth.sessionpath sessionpath = luci.config.sauth.sessionpath
sessiontime = tonumber(luci.config.sauth.sessiontime) sessiontime = tonumber(luci.config.sauth.sessiontime)
--- Manually clean up expired sessions.
function clean() function clean()
local now = os.time() local now = os.time()
local files = luci.fs.dir(sessionpath) local files = luci.fs.dir(sessionpath)
@ -40,11 +42,15 @@ function clean()
end end
end end
--- Prepare session storage by creating the session directory.
function prepare() function prepare()
luci.fs.mkdir(sessionpath) luci.fs.mkdir(sessionpath)
luci.fs.chmod(sessionpath, "a-rwx,u+rwx") luci.fs.chmod(sessionpath, "a-rwx,u+rwx")
end end
--- Read a session and return its content.
-- @param id Session identifier
-- @return Session data
function read(id) function read(id)
if not id then if not id then
return return
@ -53,6 +59,10 @@ function read(id)
return luci.fs.readfile(sessionpath .. "/" .. id) return luci.fs.readfile(sessionpath .. "/" .. id)
end end
--- Write session data to a session file.
-- @param id Session identifier
-- @param data Session data
function write(id, data) function write(id, data)
if not luci.fs.stat(sessionpath) then if not luci.fs.stat(sessionpath) then
prepare() prepare()

View file

@ -23,6 +23,8 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
]]-- ]]--
--- LuCI template library.
module("luci.template", package.seeall) module("luci.template", package.seeall)
require("luci.config") require("luci.config")
@ -50,9 +52,11 @@ viewns = {
include = function(name) Template(name):render(getfenv(2)) end, include = function(name) Template(name):render(getfenv(2)) end,
} }
-- Compiles a given template into an executable Lua module --- Manually compile a given template into an executable Lua function
-- @param template LuCI template
-- @return Lua template function
function compile(template) function compile(template)
-- Search all <% %> expressions (remember: Lua table indexes begin with #1) -- Search all <% %> expressions
local function expr_add(ws1, skip1, command, skip2, ws2) local function expr_add(ws1, skip1, command, skip2, ws2)
table.insert(expr, command) table.insert(expr, command)
return ( #skip1 > 0 and "" or ws1 ) .. return ( #skip1 > 0 and "" or ws1 ) ..
@ -114,7 +118,9 @@ function compile(template)
return loadstring(template) return loadstring(template)
end end
-- Oldstyle render shortcut --- Render a certain template.
-- @param name Template name
-- @param scope Scope to assign to template
function render(name, scope, ...) function render(name, scope, ...)
scope = scope or getfenv(2) scope = scope or getfenv(2)
local s, t = luci.util.copcall(Template, name) local s, t = luci.util.copcall(Template, name)