Browse code

Update htmx lib

Benjamin Roth authored on08/03/2024 10:15:01
Showing1 changed files
... ...
@@ -13,11 +13,42 @@ htmx.defineExtension('client-side-templates', {
13 13
             }
14 14
         }
15 15
 
16
+        var mustacheArrayTemplate = htmx.closest(elt, "[mustache-array-template]");
17
+        if (mustacheArrayTemplate) {
18
+            var data = JSON.parse(text);
19
+            var templateId = mustacheArrayTemplate.getAttribute('mustache-array-template');
20
+            var template = htmx.find("#" + templateId);
21
+            if (template) {
22
+                return Mustache.render(template.innerHTML, {"data": data });
23
+            } else {
24
+                throw "Unknown mustache template: " + templateId;
25
+            }
26
+        }
27
+
16 28
         var handlebarsTemplate = htmx.closest(elt, "[handlebars-template]");
17 29
         if (handlebarsTemplate) {
18 30
             var data = JSON.parse(text);
19
-            var templateName = handlebarsTemplate.getAttribute('handlebars-template');
20
-            return Handlebars.partials[templateName](data);
31
+            var templateId = handlebarsTemplate.getAttribute('handlebars-template');
32
+            var templateElement = htmx.find('#' + templateId).innerHTML;
33
+            var renderTemplate = Handlebars.compile(templateElement);
34
+            if (renderTemplate) {
35
+                return renderTemplate(data);
36
+            } else {
37
+                throw "Unknown handlebars template: " + templateId;
38
+            }
39
+        }
40
+
41
+        var handlebarsArrayTemplate = htmx.closest(elt, "[handlebars-array-template]");
42
+        if (handlebarsArrayTemplate) {
43
+            var data = JSON.parse(text);
44
+            var templateId = handlebarsArrayTemplate.getAttribute('handlebars-array-template');
45
+            var templateElement = htmx.find('#' + templateId).innerHTML;
46
+            var renderTemplate = Handlebars.compile(templateElement);
47
+            if (renderTemplate) {
48
+                return renderTemplate(data);
49
+            } else {
50
+                throw "Unknown handlebars template: " + templateId;
51
+            }
21 52
         }
22 53
 
23 54
         var nunjucksTemplate = htmx.closest(elt, "[nunjucks-template]");
... ...
@@ -30,8 +61,36 @@ htmx.defineExtension('client-side-templates', {
30 61
             } else {
31 62
                 return nunjucks.render(templateName, data);
32 63
             }
33
-          }
64
+        }
34 65
 
66
+        var xsltTemplate = htmx.closest(elt, "[xslt-template]");
67
+        if (xsltTemplate) {
68
+            var templateId = xsltTemplate.getAttribute('xslt-template');
69
+            var template = htmx.find("#" + templateId);
70
+            if (template) {
71
+              var content = template.innerHTML ? new DOMParser().parseFromString(template.innerHTML, 'application/xml')
72
+                                               : template.contentDocument;
73
+              var processor = new XSLTProcessor();
74
+              processor.importStylesheet(content);
75
+              var data = new DOMParser().parseFromString(text, "application/xml");
76
+              var frag = processor.transformToFragment(data, document);
77
+              return new XMLSerializer().serializeToString(frag);
78
+            } else {
79
+              throw "Unknown XSLT template: " + templateId;
80
+            }
81
+        }
82
+
83
+          var nunjucksArrayTemplate = htmx.closest(elt, "[nunjucks-array-template]");
84
+          if (nunjucksArrayTemplate) {
85
+              var data = JSON.parse(text);
86
+              var templateName = nunjucksArrayTemplate.getAttribute('nunjucks-array-template');
87
+              var template = htmx.find('#' + templateName);
88
+              if (template) {
89
+                  return nunjucks.renderString(template.innerHTML, {"data": data});
90
+              } else {
91
+                  return nunjucks.render(templateName, {"data": data});
92
+              }
93
+            }
35 94
         return text;
36 95
     }
37 96
 });
Browse code

Initial htmx npm packages installation

Benjamin Roth authored on25/05/2023 09:52:13
Showing1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,37 @@
1
+htmx.defineExtension('client-side-templates', {
2
+    transformResponse : function(text, xhr, elt) {
3
+
4
+        var mustacheTemplate = htmx.closest(elt, "[mustache-template]");
5
+        if (mustacheTemplate) {
6
+            var data = JSON.parse(text);
7
+            var templateId = mustacheTemplate.getAttribute('mustache-template');
8
+            var template = htmx.find("#" + templateId);
9
+            if (template) {
10
+                return Mustache.render(template.innerHTML, data);
11
+            } else {
12
+                throw "Unknown mustache template: " + templateId;
13
+            }
14
+        }
15
+
16
+        var handlebarsTemplate = htmx.closest(elt, "[handlebars-template]");
17
+        if (handlebarsTemplate) {
18
+            var data = JSON.parse(text);
19
+            var templateName = handlebarsTemplate.getAttribute('handlebars-template');
20
+            return Handlebars.partials[templateName](data);
21
+        }
22
+
23
+        var nunjucksTemplate = htmx.closest(elt, "[nunjucks-template]");
24
+        if (nunjucksTemplate) {
25
+            var data = JSON.parse(text);
26
+            var templateName = nunjucksTemplate.getAttribute('nunjucks-template');
27
+            var template = htmx.find('#' + templateName);
28
+            if (template) {
29
+                return nunjucks.renderString(template.innerHTML, data);
30
+            } else {
31
+                return nunjucks.render(templateName, data);
32
+            }
33
+          }
34
+
35
+        return text;
36
+    }
37
+});