Software /
code /
prosody
Annotate
util/dataforms.lua @ 11707:61759372be26
mod_s2s: Clone 'extra' data to let resolvers add more to it
This way 'extra' is unique for each connect() instance, making it safer
to mutate it, while inheriting the global settings.
See 926d53af9a7a for some more context.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sun, 18 Jul 2021 21:53:26 +0200 |
parent | 11630:855b065d5fd6 |
child | 11874:84f4c6957d62 |
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; |
6668
f6f39c2f1b1f
util.dataforms: Remove unused import of pairs() (thanks luacheck)
Matthew Wild <mwild1@gmail.com>
parents:
6468
diff
changeset
|
10 local ipairs = ipairs; |
8863
64fa8d80c09f
util.dataforms: Remove string conversion to let util.stanza validate types
Kim Alvefur <zash@zash.se>
parents:
8555
diff
changeset
|
11 local type, next = type, next; |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
12 local tonumber = tonumber; |
11070
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
13 local tostring = tostring; |
954
72e4639c9310
util.dataforms: Fixes for hidden field type
Matthew Wild <mwild1@gmail.com>
parents:
953
diff
changeset
|
14 local t_concat = table.concat; |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
15 local st = require "util.stanza"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
16 local jid_prep = require "util.jid".prep; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
17 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6672
diff
changeset
|
18 local _ENV = nil; |
8555
4f0f5b49bb03
vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8255
diff
changeset
|
19 -- luacheck: std none |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 local xmlns_forms = 'jabber:x:data'; |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
22 local xmlns_validate = 'http://jabber.org/protocol/xdata-validate'; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
23 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
24 local form_t = {}; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
25 local form_mt = { __index = form_t }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
26 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6672
diff
changeset
|
27 local function new(layout) |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
28 return setmetatable(layout, form_mt); |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
29 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
30 |
2488
08bfd7c96531
util.dataforms: Add optional type parameters (defaults to 'form')
Matthew Wild <mwild1@gmail.com>
parents:
2219
diff
changeset
|
31 function form_t.form(layout, data, formtype) |
9087
9e45e7adcebf
util.dataforms: Set default value for form type argument
Kim Alvefur <zash@zash.se>
parents:
9084
diff
changeset
|
32 if not formtype then formtype = "form" end |
9e45e7adcebf
util.dataforms: Set default value for form type argument
Kim Alvefur <zash@zash.se>
parents:
9084
diff
changeset
|
33 local form = st.stanza("x", { xmlns = xmlns_forms, type = formtype }); |
9089
3a7a0b9f42f3
util.dataforms: Skip all fields for the 'cancel' form type
Kim Alvefur <zash@zash.se>
parents:
9088
diff
changeset
|
34 if formtype == "cancel" then |
3a7a0b9f42f3
util.dataforms: Skip all fields for the 'cancel' form type
Kim Alvefur <zash@zash.se>
parents:
9088
diff
changeset
|
35 return form; |
3a7a0b9f42f3
util.dataforms: Skip all fields for the 'cancel' form type
Kim Alvefur <zash@zash.se>
parents:
9088
diff
changeset
|
36 end |
9090
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
37 if formtype ~= "submit" then |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
38 if layout.title then |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
39 form:tag("title"):text(layout.title):up(); |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
40 end |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
41 if layout.instructions then |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
42 form:tag("instructions"):text(layout.instructions):up(); |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
43 end |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
44 end |
6672
d6a60e74f773
util.dataforms: Rename unused loop counter to '_' [luacheck]
Matthew Wild <mwild1@gmail.com>
parents:
6668
diff
changeset
|
45 for _, field in ipairs(layout) do |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
46 local field_type = field.type or "text-single"; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
47 -- Add field tag |
9242
68694c1bd960
util.dataforms: Allow field names to be different from the 'var' attribute
Kim Alvefur <zash@zash.se>
parents:
9121
diff
changeset
|
48 form:tag("field", { type = field_type, var = field.var or field.name, label = formtype ~= "submit" and field.label or nil }); |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
49 |
9090
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
50 if formtype ~= "submit" then |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
51 if field.desc then |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
52 form:text_tag("desc", field.desc); |
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
53 end |
8945
cbeb1a045eb6
util.dataforms: Add support for field descriptions in <desc>
Kim Alvefur <zash@zash.se>
parents:
8864
diff
changeset
|
54 end |
cbeb1a045eb6
util.dataforms: Add support for field descriptions in <desc>
Kim Alvefur <zash@zash.se>
parents:
8864
diff
changeset
|
55 |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
56 if formtype == "form" and field.datatype then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
57 form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype }); |
11070
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
58 if field.range_min or field.range_max then |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
59 form:tag("range", { |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
60 min = field.range_min and tostring(field.range_min), |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
61 max = field.range_max and tostring(field.range_max), |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
62 }):up(); |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
63 end |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
64 -- <basic/> assumed |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
65 form:up(); |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
66 end |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
67 |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
68 |
9094
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
69 local value = field.value; |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
70 local options = field.options; |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
71 |
8984
fa80b3231a02
util.dataforms: More robust handling of field values, especially booleans
Matthew Wild <mwild1@gmail.com>
parents:
8945
diff
changeset
|
72 if data and data[field.name] ~= nil then |
fa80b3231a02
util.dataforms: More robust handling of field values, especially booleans
Matthew Wild <mwild1@gmail.com>
parents:
8945
diff
changeset
|
73 value = data[field.name]; |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
74 |
9094
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
75 if formtype == "form" and type(value) == "table" |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
76 and (field_type == "list-single" or field_type == "list-multi") then |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
77 -- Allow passing dynamically generated options as values |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
78 options, value = value, nil; |
05979ae1e38a
util.dataforms: Only allow overriding of options when passed via the :form method
Kim Alvefur <zash@zash.se>
parents:
9092
diff
changeset
|
79 end |
9091
519dea077d20
util.dataforms: Allow passing dynamically generated options as values (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
9090
diff
changeset
|
80 end |
519dea077d20
util.dataforms: Allow passing dynamically generated options as values (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
9090
diff
changeset
|
81 |
519dea077d20
util.dataforms: Allow passing dynamically generated options as values (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
9090
diff
changeset
|
82 if formtype == "form" and options then |
9084
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
83 local defaults = {}; |
9091
519dea077d20
util.dataforms: Allow passing dynamically generated options as values (fixes traceback)
Kim Alvefur <zash@zash.se>
parents:
9090
diff
changeset
|
84 for _, val in ipairs(options) do |
9084
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
85 if type(val) == "table" then |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
86 form:tag("option", { label = val.label }):tag("value"):text(val.value):up():up(); |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
87 if val.default then |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
88 defaults[#defaults+1] = val.value; |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
89 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
90 else |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
91 form:tag("option", { label= val }):tag("value"):text(val):up():up(); |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
92 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
93 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
94 if not value then |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
95 if field_type == "list-single" then |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
96 value = defaults[1]; |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
97 elseif field_type == "list-multi" then |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
98 value = defaults; |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
99 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
100 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
101 end |
572b6858db03
util.dataforms: Detach generation of options from values (fixes #1177)
Kim Alvefur <zash@zash.se>
parents:
9047
diff
changeset
|
102 |
8984
fa80b3231a02
util.dataforms: More robust handling of field values, especially booleans
Matthew Wild <mwild1@gmail.com>
parents:
8945
diff
changeset
|
103 if value ~= nil then |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
104 if type(value) == "number" then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
105 -- TODO validate that this is ok somehow, eg check field.datatype |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
106 value = ("%g"):format(value); |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
107 end |
2061
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
108 -- 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
|
109 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
|
110 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
|
111 -- Assume an XML snippet |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
112 form:tag("value") |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
113 :add_child(value) |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
114 :up(); |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
115 else |
8863
64fa8d80c09f
util.dataforms: Remove string conversion to let util.stanza validate types
Kim Alvefur <zash@zash.se>
parents:
8555
diff
changeset
|
116 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
|
117 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
118 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
|
119 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
|
120 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
|
121 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
|
122 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
|
123 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
|
124 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
|
125 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
126 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
|
127 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
|
128 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
|
129 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
|
130 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
|
131 -- 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
|
132 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
|
133 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
|
134 end |
e34fdca432a9
util.dataforms: Only add value to rendered form if supplied in the data
Florian Zeitz
parents:
1958
diff
changeset
|
135 elseif field_type == "list-single" then |
9111
bc7473fb7ad3
util.dataforms: Normalize indentation
Kim Alvefur <zash@zash.se>
parents:
9094
diff
changeset
|
136 form:tag("value"):text(value):up(); |
3380
e74e80b454a1
util.dataforms: Add list-multi support
Florian Zeitz <florob@babelmonkeys.de>
parents:
3379
diff
changeset
|
137 elseif field_type == "list-multi" then |
9111
bc7473fb7ad3
util.dataforms: Normalize indentation
Kim Alvefur <zash@zash.se>
parents:
9094
diff
changeset
|
138 for _, val in ipairs(value) do |
bc7473fb7ad3
util.dataforms: Normalize indentation
Kim Alvefur <zash@zash.se>
parents:
9094
diff
changeset
|
139 form:tag("value"):text(val):up(); |
7442
156c95bfed0b
util.dataforms: Allow separation of options from values in list fields
Kim Alvefur <zash@zash.se>
parents:
6981
diff
changeset
|
140 end |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
141 end |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
142 end |
6148
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
143 |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
144 local media = field.media; |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
145 if media then |
11026
a086825ed73a
util.dataforms: Convert media element sizes to avoid error on Lua 5.3
Kim Alvefur <zash@zash.se>
parents:
9246
diff
changeset
|
146 form:tag("media", { xmlns = "urn:xmpp:media-element", height = ("%g"):format(media.height), width = ("%g"):format(media.width) }); |
6148
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
147 for _, val in ipairs(media) do |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
148 form:tag("uri", { type = val.type }):text(val.uri):up() |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
149 end |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
150 form:up(); |
7dcd6f124c93
util.dataforms: Add support for XEP-0221: Data Forms Media Element
Kim Alvefur <zash@zash.se>
parents:
5693
diff
changeset
|
151 end |
6149 | 152 |
9090
56c52cb4d44e
util.dataforms: Exclude descriptive text fields from forms of type 'submit'
Kim Alvefur <zash@zash.se>
parents:
9089
diff
changeset
|
153 if formtype == "form" and field.required then |
952
ef648f49e734
util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents:
951
diff
changeset
|
154 form:tag("required"):up(); |
ef648f49e734
util.dataforms: Add support for <required/> fields
Matthew Wild <mwild1@gmail.com>
parents:
951
diff
changeset
|
155 end |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5693
diff
changeset
|
156 |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
157 -- Jump back up to list of fields |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
158 form:up(); |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
159 end |
851
b48c7ed3f7f8
util.dataforms: Return the form
Matthew Wild <mwild1@gmail.com>
parents:
845
diff
changeset
|
160 return form; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
161 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
162 |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
163 local field_readers = {}; |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
164 local data_validators = {}; |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
165 |
9121
e5eb36ee07a2
util.dataforms: Allow passing the current values to be used in stead of omitted fields
Kim Alvefur <zash@zash.se>
parents:
9111
diff
changeset
|
166 function form_t.data(layout, stanza, current) |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
167 local data = {}; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
168 local errors = {}; |
6981
bcaa553de6e8
util.dataforms: Track which fields are included in a form
Kim Alvefur <zash@zash.se>
parents:
6830
diff
changeset
|
169 local present = {}; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
170 |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
171 for _, field in ipairs(layout) do |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
172 local tag; |
6467
77d00a895bbd
util/dataforms: Make sure we iterate over field tags
daurnimator <quae@daurnimator.com>
parents:
6148
diff
changeset
|
173 for field_tag in stanza:childtags("field") do |
9242
68694c1bd960
util.dataforms: Allow field names to be different from the 'var' attribute
Kim Alvefur <zash@zash.se>
parents:
9121
diff
changeset
|
174 if (field.var or field.name) == field_tag.attr.var then |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
175 tag = field_tag; |
2219
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
176 break; |
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
177 end |
9e1c6b6a2ee4
util.dataforms: Don't require type when parsing form XML
Florian Zeitz
parents:
2070
diff
changeset
|
178 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
179 |
4434
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
180 if not tag then |
9121
e5eb36ee07a2
util.dataforms: Allow passing the current values to be used in stead of omitted fields
Kim Alvefur <zash@zash.se>
parents:
9111
diff
changeset
|
181 if current and current[field.name] ~= nil then |
e5eb36ee07a2
util.dataforms: Allow passing the current values to be used in stead of omitted fields
Kim Alvefur <zash@zash.se>
parents:
9111
diff
changeset
|
182 data[field.name] = current[field.name]; |
e5eb36ee07a2
util.dataforms: Allow passing the current values to be used in stead of omitted fields
Kim Alvefur <zash@zash.se>
parents:
9111
diff
changeset
|
183 elseif field.required then |
4434
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
184 errors[field.name] = "Required value missing"; |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
185 end |
9047
ab3488ee3ca5
util.dataforms: Ensure fields have names when collecting data (fixes traceback, thanks Martin)
Kim Alvefur <zash@zash.se>
parents:
8984
diff
changeset
|
186 elseif field.name then |
6981
bcaa553de6e8
util.dataforms: Track which fields are included in a form
Kim Alvefur <zash@zash.se>
parents:
6830
diff
changeset
|
187 present[field.name] = true; |
4434
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
188 local reader = field_readers[field.type]; |
51a7c85751b9
util.dataforms: Fix form verification
Florian Zeitz <florob@babelmonkeys.de>
parents:
4397
diff
changeset
|
189 if reader then |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
190 local value, err = reader(tag, field.required); |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
191 local validator = field.datatype and data_validators[field.datatype]; |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
192 if value ~= nil and validator then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
193 local valid, ret = validator(value, field); |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
194 if valid then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
195 value = ret; |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
196 else |
9246
397e8e5a2f1f
util.dataforms: Improve default error message for failed datatype validation
Kim Alvefur <zash@zash.se>
parents:
9243
diff
changeset
|
197 value, err = nil, ret or ("Invalid value for data of type " .. field.datatype); |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
198 end |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
199 end |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
200 data[field.name], errors[field.name] = value, err; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
201 end |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
202 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
203 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
204 if next(errors) then |
6981
bcaa553de6e8
util.dataforms: Track which fields are included in a form
Kim Alvefur <zash@zash.se>
parents:
6830
diff
changeset
|
205 return data, errors, present; |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
206 end |
6981
bcaa553de6e8
util.dataforms: Track which fields are included in a form
Kim Alvefur <zash@zash.se>
parents:
6830
diff
changeset
|
207 return data, nil, present; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
208 end |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
209 |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
210 local function simple_text(field_tag, required) |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
211 local data = field_tag:get_child_text("value"); |
6830
e08f5d081a6c
util.dataforms: Fix interaction of required fields and empty string values (fixes #521)
Kim Alvefur <zash@zash.se>
parents:
6829
diff
changeset
|
212 -- XEP-0004 does not say if an empty string is acceptable for a required value |
e08f5d081a6c
util.dataforms: Fix interaction of required fields and empty string values (fixes #521)
Kim Alvefur <zash@zash.se>
parents:
6829
diff
changeset
|
213 -- so we will follow HTML5 which says that empty string means missing |
e08f5d081a6c
util.dataforms: Fix interaction of required fields and empty string values (fixes #521)
Kim Alvefur <zash@zash.se>
parents:
6829
diff
changeset
|
214 if required and (data == nil or data == "") then |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
215 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
216 end |
6830
e08f5d081a6c
util.dataforms: Fix interaction of required fields and empty string values (fixes #521)
Kim Alvefur <zash@zash.se>
parents:
6829
diff
changeset
|
217 return data; -- Return whatever get_child_text returned, even if empty string |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
218 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
219 |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
220 field_readers["text-single"] = simple_text; |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
221 |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
222 field_readers["text-private"] = simple_text; |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
223 |
1944
754eebd31538
util.dataforms: Support for jid-single field type especially for Florob :)
Matthew Wild <mwild1@gmail.com>
parents:
1522
diff
changeset
|
224 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
|
225 function (field_tag, required) |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
226 local raw_data, err = simple_text(field_tag, required); |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
227 if not raw_data then return raw_data, err; end |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
228 local data = jid_prep(raw_data); |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
229 if not data then |
4887
4dd61fe04db4
util.dataforms: Don't return invalid JIDs in jid-single.
Kim Alvefur <zash@zash.se>
parents:
4886
diff
changeset
|
230 return nil, "Invalid JID: " .. raw_data; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
231 end |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
232 return data; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
233 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
234 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
235 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
|
236 function (field_tag, required) |
2070
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
237 local result = {}; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
238 local err = {}; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
239 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
|
240 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
|
241 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
|
242 result[#result+1] = value; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
243 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
|
244 err[#err+1] = ("Invalid JID: " .. raw_value); |
2070
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
245 end |
25dc4b9d06b1
util.dataforms: Support for jid-multi field type
Florian Zeitz
parents:
2061
diff
changeset
|
246 end |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
247 if #result > 0 then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
248 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
|
249 elseif required then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
250 return nil, "Required value missing"; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
251 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
252 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
253 |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
254 field_readers["list-multi"] = |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
255 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
|
256 local result = {}; |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
257 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
|
258 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
|
259 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
|
260 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
|
261 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
|
262 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
|
263 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
|
264 end |
955
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
265 end |
98ca5a753fee
util.dataforms: Support for retriving the field value data from forms
Matthew Wild <mwild1@gmail.com>
parents:
954
diff
changeset
|
266 |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
267 field_readers["text-multi"] = |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
268 function (field_tag, required) |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
269 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
|
270 if data then |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
271 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
|
272 end |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
273 return data, err; |
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
274 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
275 |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
276 field_readers["list-single"] = simple_text; |
1958
e2b0026143c4
util.dataforms: Incorporate slightly modified patch for list-single type from Florob
Matthew Wild <mwild1@gmail.com>
parents:
1945
diff
changeset
|
277 |
4928
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
278 local boolean_values = { |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
279 ["1"] = true, ["true"] = true, |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
280 ["0"] = false, ["false"] = false, |
5211c11dd865
util.dataforms: Fix parsing of -multi fields
Florian Zeitz <florob@babelmonkeys.de>
parents:
4887
diff
changeset
|
281 }; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
282 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
283 field_readers["boolean"] = |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
284 function (field_tag, required) |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
285 local raw_value, err = simple_text(field_tag, required); |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
286 if not raw_value then return raw_value, err; end |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
287 local value = boolean_values[raw_value]; |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
288 if value == nil then |
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
289 return nil, "Invalid boolean representation:" .. raw_value; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
290 end |
6829
22522443982f
util.dataforms: Refactor parsing to reuse simple text parser instead of duplicate code
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
291 return value; |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
292 end |
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
293 |
3540
bc139431830b
Monster whitespace commit (beware the whitespace monster).
Waqas Hussain <waqas20@gmail.com>
parents:
3380
diff
changeset
|
294 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
|
295 function (field_tag) |
4884
b8d852aea3ad
util.dataforms: Do field validation and normalization in field readers.
Kim Alvefur <zash@zash.se>
parents:
4435
diff
changeset
|
296 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
|
297 end |
4397
1378e3c79c34
util.dataforms: Add field verification logic
Florian Zeitz <florob@babelmonkeys.de>
parents:
3540
diff
changeset
|
298 |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
299 data_validators["xs:integer"] = |
11070
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
300 function (data, field) |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
301 local n = tonumber(data); |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
302 if not n then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
303 return false, "not a number"; |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
304 elseif n % 1 ~= 0 then |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
305 return false, "not an integer"; |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
306 end |
11070
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
307 if field.range_max and n > field.range_max then |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
308 return false, "out of bounds"; |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
309 elseif field.range_min and n < field.range_min then |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
310 return false, "out of bounds"; |
f7f30a3464fe
util.dataforms: Add support for validating (integer) ranges
Kim Alvefur <zash@zash.se>
parents:
11026
diff
changeset
|
311 end |
9243
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
312 return true, n; |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
313 end |
a4c52e304e6f
util.dataforms: Add support for XEP-0122: Data Forms Validation
Kim Alvefur <zash@zash.se>
parents:
9242
diff
changeset
|
314 |
11630
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
315 data_validators["pubsub:integer-or-max"] = |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
316 function (data, field) |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
317 if data == "max" then |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
318 return true, data; |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
319 else |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
320 return data_validators["xs:integer"](data, field); |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
321 end |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
322 end |
855b065d5fd6
util.dataforms: Define a integer + "max" datatype
Kim Alvefur <zash@zash.se>
parents:
11070
diff
changeset
|
323 |
8864
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
324 |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
325 local function get_form_type(form) |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
326 if not st.is_stanza(form) then |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
327 return nil, "not a stanza object"; |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
328 elseif form.attr.xmlns ~= "jabber:x:data" or form.name ~= "x" then |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
329 return nil, "not a dataform element"; |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
330 end |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
331 for field in form:childtags("field") do |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
332 if field.attr.var == "FORM_TYPE" then |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
333 return field:get_child_text("value"); |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
334 end |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
335 end |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
336 return ""; |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
337 end |
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
338 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6672
diff
changeset
|
339 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6672
diff
changeset
|
340 new = new; |
8864
cf2f66b233d1
util.dataforms: Add a simple function for identifying form types
Kim Alvefur <zash@zash.se>
parents:
8863
diff
changeset
|
341 get_type = get_form_type; |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
6672
diff
changeset
|
342 }; |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
343 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
344 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
345 --[=[ |
845
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
346 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
347 Layout: |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
348 { |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
349 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
350 title = "MUC Configuration", |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
351 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
|
352 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
353 { name = "FORM_TYPE", type = "hidden", required = true }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
354 { name = "field-name", type = "field-type", required = false }; |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
355 } |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
356 |
fc3dced9801e
util.dataforms: First commit, incomplete
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
357 |
951
4b9207949735
util.dataforms: Fixed to actually work, mostly
Matthew Wild <mwild1@gmail.com>
parents:
851
diff
changeset
|
358 --]=] |