util/dataforms.lua

Thu, 10 Jun 2021 11:58:23 +0200

author
Kim Alvefur <zash@zash.se>
date
Thu, 10 Jun 2021 11:58:23 +0200
changeset 445
b119dc4d8bc2
parent 442
b2ae91f4fec9
child 490
6b2f31da9610
permissions
-rw-r--r--

plugins.smacks: Don't warn about zero stanzas acked

It's only if the count somehow goes backwards that something is really
wrong. An ack for zero stanzas is fine and we don't need to do anything.

123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 -- Prosody IM
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
4 --
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 -- COPYING file in the source package for more information.
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 --
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 local setmetatable = setmetatable;
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
10 local ipairs = ipairs;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
11 local type, next = type, next;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
12 local tonumber = tonumber;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
13 local tostring = tostring;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 local t_concat = table.concat;
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 local st = require "util.stanza";
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
16 local jid_prep = require "util.jid".prep;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
18 local _ENV = nil;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
19 -- luacheck: std none
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local xmlns_forms = 'jabber:x:data';
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
22 local xmlns_validate = 'http://jabber.org/protocol/xdata-validate';
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 local form_t = {};
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 local form_mt = { __index = form_t };
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
27 local function new(layout)
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 return setmetatable(layout, form_mt);
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
31 local function from_stanza(stanza)
335
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
32 local layout = {
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
33 title = stanza:get_child_text("title");
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
34 instructions = stanza:get_child_text("instructions");
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
35 };
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
36 for tag in stanza:childtags("field") do
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
37 local field = {
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
38 name = tag.attr.var;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
39 label = tag.attr.label;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
40 type = tag.attr.type;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
41 required = tag:get_child("required") and true or nil;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
42 value = tag:get_child_text("value");
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
43 };
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
44 layout[#layout+1] = field;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
45 if field.type then
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
46 local value = {};
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
47 if field.type:match"list%-" then
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
48 for tag in tag:childtags("option") do
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
49 value[#value+1] = { label = tag.attr.label, value = tag:get_child_text("value") };
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
50 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
51 for tag in tag:childtags("value") do
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
52 value[#value+1] = { label = tag.attr.label, value = tag:get_text(), default = true };
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
53 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
54 elseif field.type:match"%-multi" then
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
55 for tag in tag:childtags("value") do
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
56 value[#value+1] = tag.attr.label and { label = tag.attr.label, value = tag:get_text() } or tag:get_text();
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
57 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
58 if field.type == "text-multi" then
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
59 field.value = t_concat(value, "\n");
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
60 else
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
61 field.value = value;
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
62 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
63 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
64 end
442
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
65 local datatype_tag = tag:get_child("validate", xmlns_validate);
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
66 if datatype_tag then
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
67 field.datatype = datatype.attr.datatype;
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
68 local range_tag = datatype_tag:get_child("range");
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
69 if range_tag then
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
70 field.range_min = tonumber(range_tag.attr.min);
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
71 field.range_max = tonumber(range_tag.attr.max);
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
72 end
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
73 end
b2ae91f4fec9 util.dataforms: Support XEP-0122 validation
Kim Alvefur <zash@zash.se>
parents: 441
diff changeset
74
335
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
75 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
76 return new(layout);
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
77 end
9e69ee8542d4 util.dataforms: Add method for converting XML dataforms to tables
Kim Alvefur <zash@zash.se>
parents: 334
diff changeset
78
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 function form_t.form(layout, data, formtype)
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
80 if not formtype then formtype = "form" end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
81 local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype });
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
82 if formtype == "cancel" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
83 return form;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
85 if formtype ~= "submit" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
86 if layout.title then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
87 form:tag("title"):text(layout.title):up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
88 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
89 if layout.instructions then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
90 form:tag("instructions"):text(layout.instructions):up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
91 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
93 for _, field in ipairs(layout) do
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 local field_type = field.type or "text-single";
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 -- Add field tag
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
96 form:tag("field", { type = field_type, var = field.var or field.name, label = formtype ~= "submit" and field.label or nil });
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
97
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
98 if formtype ~= "submit" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
99 if field.desc then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
100 form:text_tag("desc", field.desc);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
101 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
102 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
103
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
104 if formtype == "form" and field.datatype then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
105 form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype });
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
106 if field.range_min or field.range_max then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
107 form:tag("range", {
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
108 min = field.range_min and tostring(field.range_min),
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
109 max = field.range_max and tostring(field.range_max),
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
110 }):up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
111 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
112 -- <basic/> assumed
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
113 form:up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
114 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
115
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
116
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
117 local value = field.value;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
118 local options = field.options;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
119
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
120 if data and data[field.name] ~= nil then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
121 value = data[field.name];
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
123 if formtype == "form" and type(value) == "table"
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
124 and (field_type == "list-single" or field_type == "list-multi") then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
125 -- Allow passing dynamically generated options as values
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
126 options, value = value, nil;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
127 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
128 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
129
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
130 if formtype == "form" and options then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
131 local defaults = {};
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
132 for _, val in ipairs(options) do
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
133 if type(val) == "table" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
134 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
135 if val.default then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
136 defaults[#defaults+1] = val.value;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
137 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
138 else
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
139 form:tag("option", { label= val }):tag("value"):text(val):up():up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
140 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
141 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
142 if not value then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
143 if field_type == "list-single" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
144 value = defaults[1];
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
145 elseif field_type == "list-multi" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
146 value = defaults;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
147 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
148 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
149 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
150
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
151 if value ~= nil then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
152 if type(value) == "number" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
153 -- TODO validate that this is ok somehow, eg check field.datatype
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
154 value = ("%g"):format(value);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
155 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
156 -- Add value, depending on type
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
157 if field_type == "hidden" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
158 if type(value) == "table" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
159 -- Assume an XML snippet
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
160 form:tag("value")
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
161 :add_child(value)
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
162 :up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
163 else
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
164 form:tag("value"):text(value):up();
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
165 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
166 elseif field_type == "boolean" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
167 form:tag("value"):text((value and "1") or "0"):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
168 elseif field_type == "fixed" then
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
169 form:tag("value"):text(value):up();
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
170 elseif field_type == "jid-multi" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
171 for _, jid in ipairs(value) do
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
172 form:tag("value"):text(jid):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
173 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
174 elseif field_type == "jid-single" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
175 form:tag("value"):text(value):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
176 elseif field_type == "text-single" or field_type == "text-private" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
177 form:tag("value"):text(value):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
178 elseif field_type == "text-multi" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
179 -- Split into multiple <value> tags, one for each line
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
180 for line in value:gmatch("([^\r\n]+)\r?\n*") do
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
181 form:tag("value"):text(line):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
182 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
183 elseif field_type == "list-single" then
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
184 form:tag("value"):text(value):up();
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
185 elseif field_type == "list-multi" then
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
186 for _, val in ipairs(value) do
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
187 form:tag("value"):text(val):up();
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
188 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
189 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
190 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
191
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
192 local media = field.media;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
193 if media then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
194 form:tag("media", { xmlns = "urn:xmpp:media-element", height = ("%g"):format(media.height), width = ("%g"):format(media.width) });
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
195 for _, val in ipairs(media) do
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
196 form:tag("uri", { type = val.type }):text(val.uri):up()
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
197 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
198 form:up();
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
199 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
200
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
201 if formtype == "form" and field.required then
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
202 form:tag("required"):up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
203 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
204
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
205 -- Jump back up to list of fields
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
206 form:up();
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
207 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
208 return form;
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
209 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
210
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
211 local field_readers = {};
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
212 local data_validators = {};
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
213
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
214 function form_t.data(layout, stanza, current)
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
215 local data = {};
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
216 local errors = {};
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
217 local present = {};
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
218
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
219 for _, field in ipairs(layout) do
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
220 local tag;
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
221 for field_tag in stanza:childtags("field") do
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
222 if (field.var or field.name) == field_tag.attr.var then
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
223 tag = field_tag;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
224 break;
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
225 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
226 end
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
227
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
228 if not tag then
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
229 if current and current[field.name] ~= nil then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
230 data[field.name] = current[field.name];
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
231 elseif field.required then
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
232 errors[field.name] = "Required value missing";
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
233 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
234 elseif field.name then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
235 present[field.name] = true;
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
236 local reader = field_readers[field.type];
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
237 if reader then
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
238 local value, err = reader(tag, field.required);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
239 local validator = field.datatype and data_validators[field.datatype];
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
240 if value ~= nil and validator then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
241 local valid, ret = validator(value, field);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
242 if valid then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
243 value = ret;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
244 else
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
245 value, err = nil, ret or ("Invalid value for data of type " .. field.datatype);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
246 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
247 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
248 data[field.name], errors[field.name] = value, err;
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
249 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
250 end
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
251 end
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
252 if next(errors) then
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
253 return data, errors, present;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
254 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
255 return data, nil, present;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
256 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
257
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
258 local function simple_text(field_tag, required)
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
259 local data = field_tag:get_child_text("value");
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
260 -- XEP-0004 does not say if an empty string is acceptable for a required value
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
261 -- so we will follow HTML5 which says that empty string means missing
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
262 if required and (data == nil or data == "") then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
263 return nil, "Required value missing";
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
264 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
265 return data; -- Return whatever get_child_text returned, even if empty string
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
266 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
267
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
268 field_readers["text-single"] = simple_text;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
269
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
270 field_readers["text-private"] = simple_text;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
271
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
272 field_readers["jid-single"] =
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
273 function (field_tag, required)
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
274 local raw_data, err = simple_text(field_tag, required);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
275 if not raw_data then return raw_data, err; end
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
276 local data = jid_prep(raw_data);
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
277 if not data then
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
278 return nil, "Invalid JID: " .. raw_data;
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
279 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
280 return data;
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
281 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
282
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
283 field_readers["jid-multi"] =
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
284 function (field_tag, required)
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
285 local result = {};
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
286 local err = {};
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
287 for value_tag in field_tag:childtags("value") do
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
288 local raw_value = value_tag:get_text();
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
289 local value = jid_prep(raw_value);
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
290 result[#result+1] = value;
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
291 if raw_value and not value then
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
292 err[#err+1] = ("Invalid JID: " .. raw_value);
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
293 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
294 end
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
295 if #result > 0 then
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
296 return result, (#err > 0 and t_concat(err, "\n") or nil);
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
297 elseif required then
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
298 return nil, "Required value missing";
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
299 end
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
300 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
301
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
302 field_readers["list-multi"] =
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
303 function (field_tag, required)
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
304 local result = {};
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
305 for value in field_tag:childtags("value") do
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
306 result[#result+1] = value:get_text();
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
307 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
308 if #result > 0 then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
309 return result;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
310 elseif required then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
311 return nil, "Required value missing";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
312 end
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
313 end
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
314
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
315 field_readers["text-multi"] =
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
316 function (field_tag, required)
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
317 local data, err = field_readers["list-multi"](field_tag, required);
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
318 if data then
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
319 data = t_concat(data, "\n");
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
320 end
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
321 return data, err;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
322 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
323
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
324 field_readers["list-single"] = simple_text;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
325
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
326 local boolean_values = {
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
327 ["1"] = true, ["true"] = true,
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
328 ["0"] = false, ["false"] = false,
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
329 };
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
330
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
331 field_readers["boolean"] =
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
332 function (field_tag, required)
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
333 local raw_value, err = simple_text(field_tag, required);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
334 if not raw_value then return raw_value, err; end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
335 local value = boolean_values[raw_value];
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
336 if value == nil then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
337 return nil, "Invalid boolean representation:" .. raw_value;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
338 end
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
339 return value;
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
340 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
341
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
342 field_readers["hidden"] =
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
343 function (field_tag)
334
34c52f3b21c4 util.dataforms: Update from Prosody repo
Kim Alvefur <zash@zash.se>
parents: 123
diff changeset
344 return field_tag:get_child_text("value");
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
345 end
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
346
441
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
347 data_validators["xs:integer"] =
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
348 function (data, field)
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
349 local n = tonumber(data);
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
350 if not n then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
351 return false, "not a number";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
352 elseif n % 1 ~= 0 then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
353 return false, "not an integer";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
354 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
355 if field.range_max and n > field.range_max then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
356 return false, "out of bounds";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
357 elseif field.range_min and n < field.range_min then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
358 return false, "out of bounds";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
359 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
360 return true, n;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
361 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
362
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
363
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
364 local function get_form_type(form)
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
365 if not st.is_stanza(form) then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
366 return nil, "not a stanza object";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
367 elseif form.attr.xmlns ~= "jabber:x:data" or form.name ~= "x" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
368 return nil, "not a dataform element";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
369 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
370 for field in form:childtags("field") do
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
371 if field.attr.var == "FORM_TYPE" then
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
372 return field:get_child_text("value");
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
373 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
374 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
375 return "";
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
376 end
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
377
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
378 return {
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
379 new = new;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
380 from_stanza = from_stanza;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
381 get_type = get_form_type;
e4c0b1d7fd6b util.dataforms: Update from prosody trunk 5fb6563eee1e keeping from_stanza()
Kim Alvefur <zash@zash.se>
parents: 335
diff changeset
382 };
123
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
383
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
384
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
385 --[=[
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
386
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
387 Layout:
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
388 {
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
389
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
390 title = "MUC Configuration",
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
391 instructions = [[Use this form to configure options for this MUC room.]],
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
392
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
393 { name = "FORM_TYPE", type = "hidden", required = true };
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
394 { name = "field-name", type = "field-type", required = false };
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
395 }
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
396
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
397
8a079aa70b84 util.dataforms, squishy: Add util.dataforms library
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
398 --]=]

mercurial