util.dataforms: Allow field names to be different from the 'var' attribute
This should allow the usage of long prefixes and namespace-like names to
be contained to the XML representation of the form, so that the code can
use more convenient names.
--- a/spec/util_dataforms_spec.lua Mon Sep 03 17:45:30 2018 +0100
+++ b/spec/util_dataforms_spec.lua Sat Sep 01 01:24:46 2018 +0200
@@ -386,5 +386,20 @@
assert.same(expect, data, "got back the same data");
end);
end);
+
+ describe("field 'var' property", function ()
+ it("works as expected", function ()
+ local f = dataforms.new {
+ {
+ var = "someprefix#the-field",
+ name = "the_field",
+ type = "text-single",
+ }
+ };
+ local x = f:form({the_field = "hello"});
+ assert.equal("someprefix#the-field", x:find"field@var");
+ assert.equal("hello", x:find"field/value#");
+ end);
+ end);
end);
--- a/util/dataforms.lua Mon Sep 03 17:45:30 2018 +0100
+++ b/util/dataforms.lua Sat Sep 01 01:24:46 2018 +0200
@@ -42,7 +42,7 @@
for _, field in ipairs(layout) do
local field_type = field.type or "text-single";
-- Add field tag
- form:tag("field", { type = field_type, var = field.name, label = formtype ~= "submit" and field.label or nil });
+ form:tag("field", { type = field_type, var = field.var or field.name, label = formtype ~= "submit" and field.label or nil });
if formtype ~= "submit" then
if field.desc then
@@ -150,7 +150,7 @@
for _, field in ipairs(layout) do
local tag;
for field_tag in stanza:childtags("field") do
- if field.name == field_tag.attr.var then
+ if (field.var or field.name) == field_tag.attr.var then
tag = field_tag;
break;
end