diff options
Diffstat (limited to 'lib/web_elements.lua')
-rw-r--r-- | lib/web_elements.lua | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/lib/web_elements.lua b/lib/web_elements.lua new file mode 100644 index 0000000..e676205 --- /dev/null +++ b/lib/web_elements.lua @@ -0,0 +1,156 @@ +--[[ + middle level functions for the webconf view templates. Part of + acf + + Copyright (C) 2006 N. Angelacos Licensed under terms of GPL2 +]]-- + +module ( ..., package.seeall ) + +require ("html") + +-- This is the main function that walks a table formatted for a template +-- (This is the magic in generic) +function render_table ( element, level) + local level = level or 1 + + if (type(element) ~= "table" ) then + return nil + end + + for k,v in pairs (element) do + if ( v.type ~= nil ) then + if ( v.type == "group" ) then + print ( html.entity ( ( "h" .. tostring(level) ), v.label, v.class, v.id ) ) + print ( html.entity ( "p" , v.text, v.class ) ) + render_table ( v.value, level + 1 ) + elseif ( v.type == "label" ) then + print ( html.entity ( "h" .. level , v.value, v.class, v.id ) ) + if ( v.text ~= nil ) then + print ( html.entity ( "p", v.text, v.class )) + end + elseif ( v.type == "html" ) then + print (v.value) + elseif ( v.type == "log" ) then + print("<pre>") + if type(v.lines) == "function" then + for line in v.lines do + print(line) + end + elseif v.lines then + print(v.lines) + end + print("</pre>") + elseif ( v.type == "link" ) then + print (html.link ( v ) ) + elseif ( v.type == "form" ) then + print ( html.form.start ( v ) ) + print ("<dl>") + render_table ( v.value, level + 1 ) + print ("</dl>") + print ( html.form.stop () ) + elseif type(html.form[v.type]) ~= "nil" then + if v.type == "hidden" then + v.noitem = true + end + if not v.noitem then + print ( string.format ("<dt>%s</dt><dd>", ( v.label or "" ))) + end + print ( html.form[v.type] ( v ) ) + if not v.noitem then + print ("</dd>") + end + end + end + end +end + + +-- This function prints the main menu, with the given prefix/controller "selected" +-- returns the group, category, subcat that is selected +function render_mainmenu ( menu, prefix, controller, action ) + -- prefix+controller defines which menu is "selected" + local megroup = nil + local mecat = nil + local mesubcat = nil + local liston = nil + local group = "" + local cat = "" + + -- find the current group/cat/subcat + for i=1,table.maxn(menu) do + if (menu[i].prefix == prefix) and ( menu[i].controller == controller ) then + megroup = menu[i].group + mecat = menu[i].cat + if ( menu[i].action == action ) then + mesubcat = menu[i].subcat + elseif ( menu[i].action == "*" ) and ( mesubcat == nil ) then + mesubcat = menu[i].subcat + end + end + end + + -- render the mainmenu + local thisgroup = "" + local thiscat = "" + for i=1,table.maxn(menu),1 do + if menu[i].group ~= thisgroup then + thisgroup = menu[i].group + if ( liston ) then io.write ("</ul>") end + print ( html.entity ( "h3", menu[i].group ) ) + io.write("<ul>") + liston = true + thicat = nil + end + if menu[i].cat ~= thiscat then + thiscat = menu[i].cat + if (thiscat == mecat ) then + print ( html.entity ("li", html.html_escape(thiscat), nil, "selected")) + else + print (html.link ( { value= ENV.SCRIPT_NAME .. menu[i].uri , + label = html.entity ("li", html.html_escape(thiscat)) } ) ) + end + end + end + io.write ("</ul>") + return megroup, mecat, mesubcat +end + + + +-- This function prints the tabs for the submenu, with the given submenu "selected" +function render_submenu ( menu, group, cat, subcat ) + cat = cat or "" + group = group or "" + local this_subcat = nil + local foo = group .. " > " .. cat + if (foo ~= " > " ) then + print ( html.entity ( "h2", html.html_escape( group .. " > " .. cat ) )) + end + + + -- print (string.format ("%s - %s - %s", group, cat , (subcat or ""))) + + io.write ("<ul>") + for i=1, table.maxn(menu),1 do + if ( group == menu[i].group ) and ( cat == menu[i].cat ) then + -- If a subcat was not selected, make the first one the default + if ( subcat == nil ) then + subcat = menu[i].subcat + end + + if ( menu[i].subcat ~= this_subcat ) then + this_subcat = menu[i].subcat + if ( menu[i].subcat == subcat ) then + print ( html.entity ("li", menu[i].subcat, nil, "selected")) + else + io.write ("<li>") + io.write ( html.link ( { value= ENV.SCRIPT_NAME .. menu[i].uri , + label =menu[i].subcat } ) ) + print ("</li>") + end + end + end + end + io.write ("</ul>") +end |