Software / code / prosody
Comparison
util/dataforms.lua @ 845:fc3dced9801e
util.dataforms: First commit, incomplete
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 27 Feb 2009 17:56:07 +0000 |
| child | 851:b48c7ed3f7f8 |
comparison
equal
deleted
inserted
replaced
| 844:503ca8da1000 | 845:fc3dced9801e |
|---|---|
| 1 | |
| 2 module "dataforms" | |
| 3 | |
| 4 local xmlns_forms = 'jabber:x:data'; | |
| 5 | |
| 6 local form_t = {}; | |
| 7 local form_mt = { __index = form_t }; | |
| 8 | |
| 9 function new(layout) | |
| 10 return setmetatable(layout, form_mt); | |
| 11 end | |
| 12 | |
| 13 local form_x_attr = { xmlns = xmlns_forms }; | |
| 14 | |
| 15 function form_t.form(layout, data) | |
| 16 local form = st.tag("x", form_x_attr); | |
| 17 for n, field in ipairs(layout) do | |
| 18 local field_type = field.type; | |
| 19 -- Add field tag | |
| 20 form:tag("field", { type = field_type, var = field.name }); | |
| 21 | |
| 22 local value = data[field.name]; | |
| 23 | |
| 24 -- Add value, depending on type | |
| 25 if field_type == "hidden" then | |
| 26 if type(value) == "table" then | |
| 27 -- Assume an XML snippet | |
| 28 form:add_child(value); | |
| 29 elseif value then | |
| 30 form:text(tostring(value)); | |
| 31 end | |
| 32 elseif field_type == "boolean" then | |
| 33 form:text((value and "1") or "0"); | |
| 34 elseif field_type == "fixed" then | |
| 35 | |
| 36 elseif field_type == "jid-multi" then | |
| 37 for _, jid in ipairs(value) do | |
| 38 form:tag("value"):text(jid):up(); | |
| 39 end | |
| 40 elseif field_type == "jid-single" then | |
| 41 form:tag("value"):text(value):up(); | |
| 42 | |
| 43 end | |
| 44 | |
| 45 -- Jump back up to list of fields | |
| 46 form:up(); | |
| 47 end | |
| 48 end | |
| 49 | |
| 50 function form_t.data(layout, stanza) | |
| 51 | |
| 52 end | |
| 53 | |
| 54 | |
| 55 | |
| 56 --[[ | |
| 57 | |
| 58 Layout: | |
| 59 { | |
| 60 | |
| 61 title = "MUC Configuration", | |
| 62 instructions = [[Use this form to configure options for this MUC room.]], | |
| 63 | |
| 64 { name = "FORM_TYPE", type = "hidden", required = true }; | |
| 65 { name = "field-name", type = "field-type", required = false }; | |
| 66 } | |
| 67 | |
| 68 | |
| 69 --]] |