Annotate

util/dataforms.lua @ 5877:615a0774e4cc

util.timer: Updated to use util.indexedbheap to provide a more complete API. Timers can now be stopped or rescheduled. Callbacks are now pcall'd. Adding/removing timers from within timer callbacks works better. Optional parameter can be passed when creating timer which gets passed to callback, eliminating the need for closures in various timer uses. Timers are now much more lightweight.
author Waqas Hussain <waqas20@gmail.com>
date Wed, 30 Oct 2013 17:44:42 -0400
parent 5776:bd0ff8ae98a8
child 6149:2ae6e9063e88
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 957
diff changeset
1 -- Prosody IM
2923
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2488
diff changeset
2 -- Copyright (C) 2008-2010 Matthew Wild
b7049746bd29 Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents: 2488
diff changeset
3 -- Copyright (C) 2008-2010 Waqas Hussain
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5693
diff changeset
4 --
1522
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 957
diff changeset
5 -- This project is MIT/X11 licensed. Please see the
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 957
diff changeset
6 -- COPYING file in the source package for more information.
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 957
diff changeset
7 --
569d58d21612 Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents: 957
diff changeset
8
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
9 local setmetatable = setmetatable;
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
10 local pairs, ipairs = pairs, ipairs;
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
11 local tostring, type, next = tostring, type, next;
954
72e4639c9310 util.dataforms: Fixes for hidden field type
Matthew Wild <mwild1@gmail.com>
parents: 953
diff changeset
12 local t_concat = table.concat;
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
13 local st = require "util.stanza";
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
14 local jid_prep = require "util.jid".prep;
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 module "dataforms"
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 local xmlns_forms = 'jabber:x:data';
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 local form_t = {};
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 local form_mt = { __index = form_t };
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 function new(layout)
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 return setmetatable(layout, form_mt);
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 end
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26
2488
08bfd7c96531 util.dataforms: Add optional type parameters (defaults to 'form')
Matthew Wild <mwild1@gmail.com>
parents: 2219
diff changeset
27 function form_t.form(layout, data, formtype)
08bfd7c96531 util.dataforms: Add optional type parameters (defaults to 'form')
Matthew Wild <mwild1@gmail.com>
parents: 2219
diff changeset
28 local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype or "form" });
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
29 if layout.title then
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
30 form:tag("title"):text(layout.title):up();
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
31 end
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
32 if layout.instructions then
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
33 form:tag("instructions"):text(layout.instructions):up();
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
34 end
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 for n, field in ipairs(layout) do
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
36 local field_type = field.type or "text-single";
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 -- Add field tag
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
38 form:tag("field", { type = field_type, var = field.name, label = field.label });
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39
1945
adfd7f3720f5 util.dataforms: Small fix to allow generating forms without specifying any input data
Matthew Wild <mwild1@gmail.com>
parents: 1944
diff changeset
40 local value = (data and data[field.name]) or field.value;
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5693
diff changeset
41
2061
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
42 if value then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
43 -- Add value, depending on type
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
44 if field_type == "hidden" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
45 if type(value) == "table" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
46 -- Assume an XML snippet
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
47 form:tag("value")
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
48 :add_child(value)
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
49 :up();
1958
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
50 else
2061
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
51 form:tag("value"):text(tostring(value)):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
52 end
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
53 elseif field_type == "boolean" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
54 form:tag("value"):text((value and "1") or "0"):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
55 elseif field_type == "fixed" then
5551
e1e06f1465be util.dataforms: Add support for generating type='fixed' fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4928
diff changeset
56 form:tag("value"):text(value):up();
2061
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
57 elseif field_type == "jid-multi" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
58 for _, jid in ipairs(value) do
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
59 form:tag("value"):text(jid):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
60 end
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
61 elseif field_type == "jid-single" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
62 form:tag("value"):text(value):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
63 elseif field_type == "text-single" or field_type == "text-private" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
64 form:tag("value"):text(value):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
65 elseif field_type == "text-multi" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
66 -- Split into multiple <value> tags, one for each line
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
67 for line in value:gmatch("([^\r\n]+)\r?\n*") do
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
68 form:tag("value"):text(line):up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
69 end
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
70 elseif field_type == "list-single" then
3379
17d4298b2a58 util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
71 local has_default = false;
2061
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
72 for _, val in ipairs(value) do
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
73 if type(val) == "table" then
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
74 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up();
3379
17d4298b2a58 util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
75 if val.default and (not has_default) then
17d4298b2a58 util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
76 form:tag("value"):text(val.value):up();
17d4298b2a58 util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
77 has_default = true;
17d4298b2a58 util.dataforms: Capability to set default for list-single
Florian Zeitz <florob@babelmonkeys.de>
parents: 2923
diff changeset
78 end
2061
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
79 else
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
80 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up();
e34fdca432a9 util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents: 1958
diff changeset
81 end
1958
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
82 end
3380
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
83 elseif field_type == "list-multi" then
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
84 for _, val in ipairs(value) do
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
85 if type(val) == "table" then
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
86 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up();
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
87 if val.default then
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
88 form:tag("value"):text(val.value):up();
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
89 end
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
90 else
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
91 form:tag("option", { label= val }):tag("value"):text(tostring(val)):up():up();
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
92 end
e74e80b454a1 util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents: 3379
diff changeset
93 end
1958
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
94 end
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5693
diff changeset
96
952
ef648f49e734 util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents: 951
diff changeset
97 if field.required then
ef648f49e734 util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents: 951
diff changeset
98 form:tag("required"):up();
ef648f49e734 util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents: 951
diff changeset
99 end
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5693
diff changeset
100
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 -- Jump back up to list of fields
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 form:up();
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 end
851
b48c7ed3f7f8 util.dataforms: Return the form
Matthew Wild <mwild1@gmail.com>
parents: 845
diff changeset
104 return form;
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105 end
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
107 local field_readers = {};
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
108
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 function form_t.data(layout, stanza)
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
110 local data = {};
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
111 local errors = {};
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
112
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
113 for _, field in ipairs(layout) do
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
114 local tag;
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
115 for field_tag in stanza:childtags() do
2219
9e1c6b6a2ee4 util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents: 2070
diff changeset
116 if field.name == field_tag.attr.var then
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
117 tag = field_tag;
2219
9e1c6b6a2ee4 util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents: 2070
diff changeset
118 break;
9e1c6b6a2ee4 util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents: 2070
diff changeset
119 end
9e1c6b6a2ee4 util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents: 2070
diff changeset
120 end
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
121
4434
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
122 if not tag then
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
123 if field.required then
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
124 errors[field.name] = "Required value missing";
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
125 end
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
126 else
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
127 local reader = field_readers[field.type];
51a7c85751b9 util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents: 4397
diff changeset
128 if reader then
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
129 data[field.name], errors[field.name] = reader(tag, field.required);
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
130 end
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
131 end
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
132 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
133 if next(errors) then
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
134 return data, errors;
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
135 end
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
136 return data;
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 end
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3380
diff changeset
139 field_readers["text-single"] =
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
140 function (field_tag, required)
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
141 local data = field_tag:get_child_text("value");
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
142 if data and #data > 0 then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
143 return data
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
144 elseif required then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
145 return nil, "Required value missing";
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
146 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
147 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
148
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3380
diff changeset
149 field_readers["text-private"] =
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
150 field_readers["text-single"];
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
151
1944
754eebd31538 util.dataforms: Support for jid-single field type especially for Florob :)
Matthew Wild <mwild1@gmail.com>
parents: 1522
diff changeset
152 field_readers["jid-single"] =
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
153 function (field_tag, required)
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
154 local raw_data = field_tag:get_child_text("value")
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
155 local data = jid_prep(raw_data);
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
156 if data and #data > 0 then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
157 return data
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
158 elseif raw_data then
4887
4dd61fe04db4 util.dataforms: Don't return invalid JIDs in jid-single.
Kim Alvefur <zash@zash.se>
parents: 4886
diff changeset
159 return nil, "Invalid JID: " .. raw_data;
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
160 elseif required then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
161 return nil, "Required value missing";
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
162 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
163 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
164
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3380
diff changeset
165 field_readers["jid-multi"] =
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
166 function (field_tag, required)
2070
25dc4b9d06b1 util.dataforms: Support for jid-multi field type
Florian Zeitz
parents: 2061
diff changeset
167 local result = {};
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
168 local err = {};
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
169 for value_tag in field_tag:childtags("value") do
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
170 local raw_value = value_tag:get_text();
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
171 local value = jid_prep(raw_value);
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
172 result[#result+1] = value;
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
173 if raw_value and not value then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
174 err[#err+1] = ("Invalid JID: " .. raw_value);
2070
25dc4b9d06b1 util.dataforms: Support for jid-multi field type
Florian Zeitz
parents: 2061
diff changeset
175 end
25dc4b9d06b1 util.dataforms: Support for jid-multi field type
Florian Zeitz
parents: 2061
diff changeset
176 end
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
177 if #result > 0 then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
178 return result, (#err > 0 and t_concat(err, "\n") or nil);
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
179 elseif required then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
180 return nil, "Required value missing";
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
181 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
182 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
183
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
184 field_readers["list-multi"] =
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
185 function (field_tag, required)
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
186 local result = {};
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
187 for value in field_tag:childtags("value") do
4928
5211c11dd865 util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4887
diff changeset
188 result[#result+1] = value:get_text();
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
189 end
5693
ef490e9276df util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents: 5551
diff changeset
190 if #result > 0 then
ef490e9276df util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents: 5551
diff changeset
191 return result;
ef490e9276df util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents: 5551
diff changeset
192 elseif required then
ef490e9276df util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents: 5551
diff changeset
193 return nil, "Required value missing";
ef490e9276df util.dataforms: Return nil for empty list-mutli responses, to be consistent with other readers
Florian Zeitz <florob@babelmonkeys.de>
parents: 5551
diff changeset
194 end
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
195 end
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
196
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
197 field_readers["text-multi"] =
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
198 function (field_tag, required)
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
199 local data, err = field_readers["list-multi"](field_tag, required);
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
200 if data then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
201 data = t_concat(data, "\n");
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
202 end
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
203 return data, err;
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
204 end
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
205
1958
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
206 field_readers["list-single"] =
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
207 field_readers["text-single"];
e2b0026143c4 util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents: 1945
diff changeset
208
4928
5211c11dd865 util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4887
diff changeset
209 local boolean_values = {
5211c11dd865 util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4887
diff changeset
210 ["1"] = true, ["true"] = true,
5211c11dd865 util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4887
diff changeset
211 ["0"] = false, ["false"] = false,
5211c11dd865 util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents: 4887
diff changeset
212 };
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
213
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3380
diff changeset
214 field_readers["boolean"] =
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
215 function (field_tag, required)
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
216 local raw_value = field_tag:get_child_text("value");
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
217 local value = boolean_values[raw_value ~= nil and raw_value];
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
218 if value ~= nil then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
219 return value;
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
220 elseif raw_value then
4886
26d8e4665ce9 util.dataforms: Fix validation of booleans.
Kim Alvefur <zash@zash.se>
parents: 4884
diff changeset
221 return nil, "Invalid boolean representation";
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
222 elseif required then
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
223 return nil, "Required value missing";
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
224 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
225 end
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
226
3540
bc139431830b Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents: 3380
diff changeset
227 field_readers["hidden"] =
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
228 function (field_tag)
4884
b8d852aea3ad util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents: 4435
diff changeset
229 return field_tag:get_child_text("value");
955
98ca5a753fee util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents: 954
diff changeset
230 end
4397
1378e3c79c34 util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents: 3540
diff changeset
231
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
232 return _M;
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
233
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
234
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
235 --[=[
845
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
236
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
237 Layout:
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
238 {
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
239
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
240 title = "MUC Configuration",
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
241 instructions = [[Use this form to configure options for this MUC room.]],
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
242
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
243 { name = "FORM_TYPE", type = "hidden", required = true };
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
244 { name = "field-name", type = "field-type", required = false };
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
245 }
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
246
fc3dced9801e util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
247
951
4b9207949735 util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents: 851
diff changeset
248 --]=]