comparison util/dataforms.lua @ 11200:bf8f2da84007

Merge 0.11->trunk
author Kim Alvefur <zash@zash.se>
date Thu, 05 Nov 2020 22:31:25 +0100
parents f7f30a3464fe
children 855b065d5fd6
comparison
equal deleted inserted replaced
11199:6c7c50a4de32 11200:bf8f2da84007
8 8
9 local setmetatable = setmetatable; 9 local setmetatable = setmetatable;
10 local ipairs = ipairs; 10 local ipairs = ipairs;
11 local type, next = type, next; 11 local type, next = type, next;
12 local tonumber = tonumber; 12 local tonumber = tonumber;
13 local tostring = tostring;
13 local t_concat = table.concat; 14 local t_concat = table.concat;
14 local st = require "util.stanza"; 15 local st = require "util.stanza";
15 local jid_prep = require "util.jid".prep; 16 local jid_prep = require "util.jid".prep;
16 17
17 local _ENV = nil; 18 local _ENV = nil;
52 end 53 end
53 end 54 end
54 55
55 if formtype == "form" and field.datatype then 56 if formtype == "form" and field.datatype then
56 form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype }); 57 form:tag("validate", { xmlns = xmlns_validate, datatype = field.datatype });
58 if field.range_min or field.range_max then
59 form:tag("range", {
60 min = field.range_min and tostring(field.range_min),
61 max = field.range_max and tostring(field.range_max),
62 }):up();
63 end
57 -- <basic/> assumed 64 -- <basic/> assumed
58 form:up(); 65 form:up();
59 end 66 end
60 67
61 68
134 end 141 end
135 end 142 end
136 143
137 local media = field.media; 144 local media = field.media;
138 if media then 145 if media then
139 form:tag("media", { xmlns = "urn:xmpp:media-element", height = media.height, width = media.width }); 146 form:tag("media", { xmlns = "urn:xmpp:media-element", height = ("%g"):format(media.height), width = ("%g"):format(media.width) });
140 for _, val in ipairs(media) do 147 for _, val in ipairs(media) do
141 form:tag("uri", { type = val.type }):text(val.uri):up() 148 form:tag("uri", { type = val.type }):text(val.uri):up()
142 end 149 end
143 form:up(); 150 form:up();
144 end 151 end
288 function (field_tag) 295 function (field_tag)
289 return field_tag:get_child_text("value"); 296 return field_tag:get_child_text("value");
290 end 297 end
291 298
292 data_validators["xs:integer"] = 299 data_validators["xs:integer"] =
293 function (data) 300 function (data, field)
294 local n = tonumber(data); 301 local n = tonumber(data);
295 if not n then 302 if not n then
296 return false, "not a number"; 303 return false, "not a number";
297 elseif n % 1 ~= 0 then 304 elseif n % 1 ~= 0 then
298 return false, "not an integer"; 305 return false, "not an integer";
299 end 306 end
307 if field.range_max and n > field.range_max then
308 return false, "out of bounds";
309 elseif field.range_min and n < field.range_min then
310 return false, "out of bounds";
311 end
300 return true, n; 312 return true, n;
301 end 313 end
302 314
303 315
304 local function get_form_type(form) 316 local function get_form_type(form)