* CBI updates

This commit is contained in:
Steven Barth 2008-03-22 21:26:44 +00:00
parent 93c55f3c5d
commit ef01ff75db
8 changed files with 71 additions and 19 deletions

View file

@ -104,6 +104,26 @@ function Map.__init__(self, config, ...)
self.template = "cbi/map"
end
function Map.parse(self)
self.ucidata = ffluci.model.uci.show(self.config)
if not self.ucidata then
error("Unable to read UCI data: " .. self.config)
else
self.ucidata = self.ucidata[self.config]
end
Node.parse(self)
end
function Map.render(self)
self.ucidata = ffluci.model.uci.show(self.config)
if not self.ucidata then
error("Unable to read UCI data: " .. self.config)
else
self.ucidata = self.ucidata[self.config]
end
Node.render(self)
end
function Map.section(self, class, ...)
if instanceof(class, AbstractSection) then
local obj = class(...)
@ -116,11 +136,6 @@ function Map.section(self, class, ...)
end
end
function Map.read(self)
self.ucidata = self.ucidata or ffluci.model.uci.show(self.config)[self.config]
return self.ucidata
end
--[[
AbstractSection
]]--
@ -181,6 +196,15 @@ function TypedSection.__init__(self, ...)
self.valid = nil
end
function TypedSection.parse(self)
for k, v in pairs(self:ucisections()) do
for i, node in ipairs(self.children) do
node.section = k
node:parse()
end
end
end
function TypedSection.render_children(self, section)
for k, node in ipairs(self.children) do
node.section = section
@ -190,7 +214,7 @@ end
function TypedSection.ucisections(self)
local sections = {}
for k, v in pairs(self.map:read()) do
for k, v in pairs(self.map.ucidata) do
if v[".type"] == self.sectiontype then
sections[k] = v
end
@ -217,14 +241,20 @@ function AbstractValue.__init__(self, option, ...)
self.default = nil
end
function AbstractValue.formvalue(self)
local key = "uci."..self.map.config.."."..self.section.."."..self.option
local key = "cbid."..self.map.config.."."..self.section.."."..self.option
return ffluci.http.formvalue(key)
end
function AbstractValue.parse(self)
local fvalue = self:validate(self:formvalue())
if fvalue and not (fvalue == self:ucivalue()) then
self:write(fvalue)
end
end
function AbstractValue.ucivalue(self)
return self.map:read()[self.section][self.option]
return self.map.ucidata[self.section][self.option]
end
function AbstractValue.validate(self, value)
@ -232,7 +262,7 @@ function AbstractValue.validate(self, value)
end
function AbstractValue.write(self, value)
ffluci.model.uci.set(self.config, self.section, self.option, value)
return ffluci.model.uci.set(self.config, self.section, self.option, value)
end

View file

@ -116,7 +116,7 @@ end
function error500(message)
ffluci.http.status(500, "Internal Server Error")
if not pcall(ffluci.template.render, "error500") then
if not pcall(ffluci.template.render, "error500", {message=message}) then
ffluci.http.textheader()
print(message)
end
@ -171,8 +171,13 @@ function cbi(request)
i18n.loadc(request.module)
stat, map = pcall(cbi.load, path)
local stat, map = pcall(cbi.load, path)
if stat then
local stat, err = pcall(map.parse, map)
if not stat then
disp.error500(err)
return
end
tmpl.render("cbi/header")
map:render()
tmpl.render("cbi/footer")
@ -202,8 +207,13 @@ function dynamic(request)
return
end
stat, map = pcall(cbi.load, path)
local stat, map = pcall(cbi.load, path)
if stat then
local stat, err = pcall(map.parse, map)
if not stat then
disp.error500(err)
return
end
tmpl.render("cbi/header")
map:render()
tmpl.render("cbi/footer")

View file

@ -28,6 +28,13 @@ module("ffluci.fs", package.seeall)
require("lfs")
-- Checks whether a file exists
function isfile(filename)
local fp = io.open(path, "r")
if file then file:close() end
return file ~= nil
end
-- Returns the content of file
function readfile(filename)
local fp = io.open(filename)

View file

@ -161,7 +161,7 @@ function validate(value, cast_number, cast_int, valid)
if type(valid) == "function" then
value = valid(value)
elseif type(valid) == "table" then
if not ffluci.util.contains(valid, value) then
if not contains(valid, value) then
value = nil
end
end

View file

@ -1,2 +1,3 @@
<input type="submit" /> <input type="reset" />
</form>
<%+footer%>

View file

@ -4,5 +4,4 @@
<br />
<% self:render_children() %>
<br />
<input type="submit" /> <input type="reset" />
</div>

View file

@ -0,0 +1,5 @@
<%+header%>
<h1>500 Internal Server Error</h1>
<p>Sorry, the server encountered an unexpected error.</p>
<tt><%=message%></tt>
<%+footer%>

View file

@ -9,10 +9,10 @@ require("ffluci.http").htmlheader()
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" />
<link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>.css" />
<title>FFLuCI</title>
<% if addheaders then write(addheaders) end %>
<link rel="stylesheet" type="text/css" href="<%=media%>/cascade.css" />
<link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>.css" />
<link rel="stylesheet" type="text/css" href="<%=media%>/css/<%=req.category%>_<%=req.module%>/<%=req.action%>.css" />
<title>FFLuCI</title>
</head>
<body>
<div id="header">