mirror of
https://github.com/bjc/prosody.git
synced 2025-04-01 20:27:39 +03:00
util.stanza: Handle namespace prefixes for attributes in :find()
More correct handling of namespaces here. This works with both prefixes from the parser and hacky .attr["foo:bar"]
This commit is contained in:
parent
b9f73bc724
commit
00584c4d61
3 changed files with 10 additions and 3 deletions
|
@ -577,5 +577,9 @@ describe("util.stanza", function()
|
|||
assert.equal("text", s:find("{urn:example:not:same}child/nested#"), "finds nested text")
|
||||
assert.is_nil(s:find("child"), "respects namespaces")
|
||||
end);
|
||||
it("handles namespaced attributes", function()
|
||||
local s = st.stanza("root", { ["urn:example:namespace\1attr"] = "value" }, { e = "urn:example:namespace" });
|
||||
assert.equal("value", s:find("@e:attr"), "finds prefixed attr")
|
||||
end)
|
||||
end);
|
||||
end);
|
||||
|
|
|
@ -10,7 +10,7 @@ describe("util.xtemplate", function ()
|
|||
end)
|
||||
it("supports conditionals", function ()
|
||||
local atom_tmpl = "{@pubsub:title|and{*{@pubsub:title}*\n\n}}{summary|or{{author/name|and{{author/name} posted }}{title}}}";
|
||||
local atom_data = st.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" });
|
||||
local atom_data = st.stanza("entry", { xmlns = "http://www.w3.org/2005/Atom" }, {["pubsub"] = "http://jabber.org/protocol/pubsub"});
|
||||
assert.same("", xtemplate.render(atom_tmpl, atom_data));
|
||||
|
||||
atom_data:text_tag("title", "an Entry")
|
||||
|
@ -22,8 +22,7 @@ describe("util.xtemplate", function ()
|
|||
atom_data:text_tag("summary", "Juliet just posted a new entry");
|
||||
assert.same("Juliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
|
||||
|
||||
atom_data.attr["xmlns:pubsub"] = "http://jabber.org/protocol/pubsub";
|
||||
atom_data.attr["pubsub:title"] = "Juliets musings";
|
||||
atom_data.attr["http://jabber.org/protocol/pubsub\1title"] = "Juliets musings";
|
||||
assert.same("*Juliets musings*\n\nJuliet just posted a new entry", xtemplate.render(atom_tmpl, atom_data));
|
||||
end)
|
||||
it("can strip surrounding whitespace", function ()
|
||||
|
|
|
@ -277,6 +277,10 @@ function stanza_mt:find(path)
|
|||
local xmlns, name, text;
|
||||
local char = s_sub(path, pos, pos);
|
||||
if char == "@" then
|
||||
local prefix, attr = s_match(path, "^([^:]+):(.*)", pos+1);
|
||||
if prefix and self.namespaces and self.namespaces[prefix] then
|
||||
return self.attr[self.namespaces[prefix] .. "\1" .. attr];
|
||||
end
|
||||
return self.attr[s_sub(path, pos + 1)];
|
||||
elseif char == "{" then
|
||||
xmlns, pos = s_match(path, "^([^}]+)}()", pos + 1);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue