libs/web: Small improvements, added inline documentation
This commit is contained in:
parent
a478f25f51
commit
5b43543226
5 changed files with 100 additions and 25 deletions
|
@ -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)
|
|
@ -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")
|
||||||
|
|
|
@ -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
|
|
@ -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()
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue