Software /
code /
verse
Changeset
335:9e69ee8542d4
util.dataforms: Add method for converting XML dataforms to tables
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 15 Feb 2013 20:45:31 +0100 |
parents | 334:34c52f3b21c4 |
children | 336:658c62c9ecc4 |
files | util/dataforms.lua |
diffstat | 1 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/util/dataforms.lua Fri Feb 15 20:40:56 2013 +0100 +++ b/util/dataforms.lua Fri Feb 15 20:45:31 2013 +0100 @@ -24,6 +24,44 @@ return setmetatable(layout, form_mt); end +function from_stanza(stanza) + local layout = { + title = stanza:get_child_text("title"); + instructions = stanza:get_child_text("instructions"); + }; + for tag in stanza:childtags("field") do + local field = { + name = tag.attr.var; + label = tag.attr.label; + type = tag.attr.type; + required = tag:get_child("required") and true or nil; + value = tag:get_child_text("value"); + }; + layout[#layout+1] = field; + if field.type then + local value = {}; + if field.type:match"list%-" then + for tag in tag:childtags("option") do + value[#value+1] = { label = tag.attr.label, value = tag:get_child_text("value") }; + end + for tag in tag:childtags("value") do + value[#value+1] = { label = tag.attr.label, value = tag:get_text(), default = true }; + end + elseif field.type:match"%-multi" then + for tag in tag:childtags("value") do + value[#value+1] = tag.attr.label and { label = tag.attr.label, value = tag:get_text() } or tag:get_text(); + end + if field.type == "text-multi" then + field.value = t_concat(value, "\n"); + else + field.value = value; + end + end + end + end + return new(layout); +end + function form_t.form(layout, data, formtype) local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype or "form" }); if layout.title then