Selaa lähdekoodia

Add a tagged template literal function `stanza`

For creating XML stanzas from template literals.
JC Brand 2 vuotta sitten
vanhempi
commit
d2bdce51e8
2 muutettua tiedostoa jossa 22 lisäystä ja 0 poistoa
  1. 1 0
      src/headless/core.js
  2. 21 0
      src/headless/utils/stanza.js

+ 1 - 0
src/headless/core.js

@@ -762,6 +762,7 @@ Object.assign(converse, {
         log,
         sizzle,
         sprintf,
+        stanza: u.stanza,
         u,
     }
 });

+ 21 - 0
src/headless/utils/stanza.js

@@ -0,0 +1,21 @@
+const parser = new DOMParser();
+const parserErrorNS = parser.parseFromString('invalid', 'text/xml')
+                            .getElementsByTagName("parsererror")[0].namespaceURI;
+
+export function toStanza (string) {
+    const node = parser.parseFromString(string, "text/xml");
+    if (node.getElementsByTagNameNS(parserErrorNS, 'parsererror').length) {
+        throw new Error(`Parser Error: ${string}`);
+    }
+    return node.firstElementChild;
+}
+
+
+export function stanza (strings, ...values) {
+    return toStanza(
+        strings.reduce((acc, str) => {
+            const idx = strings.indexOf(str);
+            return acc + str + (values.length > idx ? values[idx] : '')
+        }, '')
+    );
+}