diff options
Diffstat (limited to 'lib/viewfunctions.lua')
-rw-r--r-- | lib/viewfunctions.lua | 109 |
1 files changed, 86 insertions, 23 deletions
diff --git a/lib/viewfunctions.lua b/lib/viewfunctions.lua index d69f2cc..c7aa53f 100644 --- a/lib/viewfunctions.lua +++ b/lib/viewfunctions.lua @@ -4,14 +4,14 @@ function displayinfo(myform,tags,viewtype) if (myform[v]) and (myform[v]["value"]) then local val = myform[v] io.write("\n\t<DT") - if (#val.errtxt > 0) then + if (val.errtxt) then val.class = "error" io.write(" class='error'") end io.write(">" .. val.label .. "</DT>") io.write("\n\t\t<DD>") if (viewtype == "viewonly") then - if (val.value == "") and (val.errtxt == "") and ((val.descr) and (val.descr == "")) then val.value = " " end + if (val.value == "") and (val.errtxt == nil) and ((val.descr) and (val.descr == "")) then val.value = " " end io.write(val.value) elseif (val.type == "radio") and (type(val.option) == "table") and (#val.option > 0) then io.write("<span style='display:inline' class='" .. ( val.class or "") .. "'>") @@ -26,7 +26,7 @@ function displayinfo(myform,tags,viewtype) io.write(html.form[val.type](val)) end if (val.descr) and (#val.descr > 0) then io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(val.descr, "\n", "<BR>") .. "</P>") end - if (#val.errtxt > 0) then io.write("\n\t\t<P CLASS='error'>" .. string.gsub(val.errtxt, "\n", "<BR>") .. "</P>") end + if (val.errtxt) then io.write("\n\t\t<P CLASS='error'>" .. string.gsub(val.errtxt, "\n", "<BR>") .. "</P>") end io.write("\n\t\t</DD>\n") end end @@ -46,31 +46,94 @@ function displaymanagement (myform,tags) end if (myform) and (myform[tags[1]]) then - io.write('<dt>' .. (myform[tags[1]]["label"] or myform[tags[1]]["name"]) .. '</dt>') - io.write('<dd>') - --Show buttons - for k,v in pairs(tags) do - if (myform[v]) then - io.write(html.form[myform[v].type](myform[v])) + io.write('<dt>' .. (myform[tags[1]]["label"] or myform[tags[1]]["name"]) .. '</dt>') + io.write('<dd>') + --Show buttons + for k,v in pairs(tags) do + if (myform[v]) then + io.write(html.form[myform[v].type](myform[v])) + end + end + if (descriptions) and (#descriptions > 0) then + io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(descriptions, "\n", "<BR>") .. "</P>") + end + if (errors) and (#errors > 0) then + io.write("\n\t\t<P CLASS='error'>" .. string.gsub(errors, "\n", "<BR>") .. "</P>") end + io.write('</dd>') + + -- Display the result of previous action + if (myform) and (myform['actionresult']) then + if (myform['actionresult']['errtxt']) and (#myform['actionresult']['errtxt'] > 0) then + io.write('<dt class="error">' .. myform['actionresult']['label'] .. '</dt>') + io.write('<dd><pre class="error">' .. (myform['actionresult']['errtxt'] or "") .. '</pre></dd>') + elseif (myform['actionresult']['descr']) and (#myform['actionresult']['descr'] > 0) then + io.write('<dt>' .. myform['actionresult']['label'] .. '</dt>') + io.write('<dd><pre>' .. (myform['actionresult']['descr'] or "") .. '</pre></dd>') + end + end + end +end + +function displayitem(myitem, viewtype) + io.write("<DT") + if myitem.errtxt then + myitem.class = "error" + io.write(" class='error'") end - if (descriptions) and (#descriptions > 0) then - io.write("\n\t\t<P CLASS='descr'>" .. string.gsub(descriptions, "\n", "<BR>") .. "</P>") + io.write(">" .. myitem.label .. "</DT>\n") + io.write("<DD>") + if (viewtype == "viewonly") then + myitem.disabled = "true" end - if (errors) and (#errors > 0) then - io.write("\n\t\t<P CLASS='error'>" .. string.gsub(errors, "\n", "<BR>") .. "</P>") + if myitem.type == "multi" then + -- FIXME multiple select doesn't work in haserl, so use series of checkboxes + --myitem.type = "select" + --myitem.multiple = "true" + local tempname = myitem.name + local tempval = myitem.value + local reverseval = {} + for x,val in ipairs(tempval) do + reverseval[val] = x + end + for x,val in ipairs(myitem.option) do + myitem.value = val + myitem.checked = reverseval[val] + myitem.name = tempname .. "." .. val + io.write(html.form.checkbox(myitem) .. val .. "<br>\n") + end + myitem.name = tempname + myitem.value = tempval + else + io.write(html.form[myitem.type](myitem) .. "\n") end - io.write('</dd>') + if myitem.descr then io.write("<P CLASS='descr'>" .. string.gsub(myitem.descr, "\n", "<BR>") .. "</P>\n") end + if myitem.errtxt then io.write("<P CLASS='error'>" .. string.gsub(myitem.errtxt, "\n", "<BR>") .. "</P>\n") end + io.write("</DD>\n") +end - -- Display the result of previous action - if (myform) and (myform['actionresult']) then - if (myform['actionresult']['errtxt']) and (#myform['actionresult']['errtxt'] > 0) then - io.write('<dt class="error">' .. myform['actionresult']['label'] .. '</dt>') - io.write('<dd><pre class="error">' .. (myform['actionresult']['errtxt'] or "") .. '</pre></dd>') - elseif (myform['actionresult']['descr']) and (#myform['actionresult']['descr'] > 0) then - io.write('<dt>' .. myform['actionresult']['label'] .. '</dt>') - io.write('<dd><pre>' .. (myform['actionresult']['descr'] or "") .. '</pre></dd>') +function displayform(myform, order) + if myform.descr then io.write("<P CLASS='descr'>" .. string.gsub(myform.descr, "\n", "<BR>") .. "</P>\n") end + if myform.errtxt then io.write("<P CLASS='error'>" .. string.gsub(myform.errtxt, "\n", "<BR>") .. "</P>\n") end + io.write('<form action="' .. myform.action .. '" method="POST">\n') + io.write('<DL>\n') + local reverseorder= {} + if order then + for x,name in ipairs(order) do + reverseorder[name] = x + if myform.value[name] then + myform.value[name].name = name + displayitem(myform.value[name]) + end end end -end + for name,item in pairs(myform.value) do + if nil == reverseorder[name] then + item.name = name + displayitem(item) + end + end + io.write('<DT><input class="submit" type="submit" value="' .. myform.submit .. '"></DT>\n') + io.write('</DL>\n') + io.write('</FORM>') end |