Software /
code /
prosody
Comparison
util/dataforms.lua @ 951:4b9207949735
util.dataforms: Fixed to actually work, mostly
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 04 Apr 2009 15:32:32 +0100 |
parent | 851:b48c7ed3f7f8 |
child | 952:ef648f49e734 |
comparison
equal
deleted
inserted
replaced
950:a00b4269de70 | 951:4b9207949735 |
---|---|
1 local setmetatable = setmetatable; | |
2 local pairs, ipairs = pairs, ipairs; | |
3 local st = require "util.stanza"; | |
1 | 4 |
2 module "dataforms" | 5 module "dataforms" |
3 | 6 |
4 local xmlns_forms = 'jabber:x:data'; | 7 local xmlns_forms = 'jabber:x:data'; |
5 | 8 |
11 end | 14 end |
12 | 15 |
13 local form_x_attr = { xmlns = xmlns_forms }; | 16 local form_x_attr = { xmlns = xmlns_forms }; |
14 | 17 |
15 function form_t.form(layout, data) | 18 function form_t.form(layout, data) |
16 local form = st.tag("x", form_x_attr); | 19 local form = st.stanza("x", form_x_attr); |
20 if layout.title then | |
21 form:tag("title"):text(layout.title):up(); | |
22 end | |
23 if layout.instructions then | |
24 form:tag("instructions"):text(layout.instructions):up(); | |
25 end | |
17 for n, field in ipairs(layout) do | 26 for n, field in ipairs(layout) do |
18 local field_type = field.type; | 27 local field_type = field.type or "text-single"; |
19 -- Add field tag | 28 -- Add field tag |
20 form:tag("field", { type = field_type, var = field.name }); | 29 form:tag("field", { type = field_type, var = field.name, label = field.label }); |
21 | 30 |
22 local value = data[field.name]; | 31 local value = data[field.name]; |
23 | 32 |
24 -- Add value, depending on type | 33 -- Add value, depending on type |
25 if field_type == "hidden" then | 34 if field_type == "hidden" then |
28 form:add_child(value); | 37 form:add_child(value); |
29 elseif value then | 38 elseif value then |
30 form:text(tostring(value)); | 39 form:text(tostring(value)); |
31 end | 40 end |
32 elseif field_type == "boolean" then | 41 elseif field_type == "boolean" then |
33 form:text((value and "1") or "0"); | 42 form:tag("value"):text((value and "1") or "0"); |
34 elseif field_type == "fixed" then | 43 elseif field_type == "fixed" then |
35 | 44 |
36 elseif field_type == "jid-multi" then | 45 elseif field_type == "jid-multi" then |
37 for _, jid in ipairs(value) do | 46 for _, jid in ipairs(value) do |
38 form:tag("value"):text(jid):up(); | 47 form:tag("value"):text(jid):up(); |
39 end | 48 end |
40 elseif field_type == "jid-single" then | 49 elseif field_type == "jid-single" then |
41 form:tag("value"):text(value):up(); | 50 form:tag("value"):text(value):up(); |
42 | 51 elseif field_type == "text-single" or field_type == "text-private" then |
52 form:tag("value"):text(value):up(); | |
53 elseif field_type == "text-multi" then | |
54 -- Split into multiple <value> tags, one for each line | |
55 for line in value:gmatch("([^\r\n]+)\r?\n*") do | |
56 form:tag("value"):text(line):up(); | |
57 end | |
43 end | 58 end |
44 | 59 |
45 -- Jump back up to list of fields | 60 -- Jump back up to list of fields |
46 form:up(); | 61 form:up(); |
47 end | 62 end |
50 | 65 |
51 function form_t.data(layout, stanza) | 66 function form_t.data(layout, stanza) |
52 | 67 |
53 end | 68 end |
54 | 69 |
70 return _M; | |
55 | 71 |
56 | 72 |
57 --[[ | 73 --[=[ |
58 | 74 |
59 Layout: | 75 Layout: |
60 { | 76 { |
61 | 77 |
62 title = "MUC Configuration", | 78 title = "MUC Configuration", |
65 { name = "FORM_TYPE", type = "hidden", required = true }; | 81 { name = "FORM_TYPE", type = "hidden", required = true }; |
66 { name = "field-name", type = "field-type", required = false }; | 82 { name = "field-name", type = "field-type", required = false }; |
67 } | 83 } |
68 | 84 |
69 | 85 |
70 --]] | 86 --]=] |