@cocreate/render 1.40.2 → 1.40.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## [1.40.3](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.2...v1.40.3) (2024-03-18)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * handling of placeholder matching ([b80be78](https://github.com/CoCreate-app/CoCreate-render/commit/b80be78f2026c4a438115366e5dbc90faf323c2a))
7
+ * if key and data[key] is an array ([4478c11](https://github.com/CoCreate-app/CoCreate-render/commit/4478c116507b490a334e1010a2037ee6c12531c4))
8
+ * omit matches that do not match the if conditions ([b589020](https://github.com/CoCreate-app/CoCreate-render/commit/b5890205eeae38e5be1f4cdf4d48eed6da211afb))
9
+
1
10
  ## [1.40.2](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.1...v1.40.2) (2024-02-13)
2
11
 
3
12
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.40.2",
3
+ "version": "1.40.3",
4
4
  "description": "A simple render component in vanilla javascript. Easily configured using HTML5 attributes and/or JavaScript API.",
5
5
  "keywords": [
6
6
  "render",
package/src/index.js CHANGED
@@ -171,7 +171,7 @@ async function render({ source, element, selector, data, key, index, currentInde
171
171
  renderedNodes.delete(clone)
172
172
  clone.remove()
173
173
  }
174
- } else if (key || Array.isArray(data)) {
174
+ } else if (key && Array.isArray(data[key]) || Array.isArray(data)) {
175
175
  if (update) {
176
176
  for (let j = 0; j < data[key].length; j++) {
177
177
  let clone
@@ -200,8 +200,10 @@ async function render({ source, element, selector, data, key, index, currentInde
200
200
 
201
201
  await renderTemplate(element[i], data, key, index);
202
202
  }
203
- } else
204
- await renderValues(element[i], data);
203
+ } else {
204
+ let renderAs = element[i].getAttribute('render-as') || key;
205
+ await renderValues(element[i], data, key, renderAs);
206
+ }
205
207
 
206
208
  }
207
209
 
@@ -583,6 +585,8 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
583
585
  async function renderValue(node, data, placeholder, renderAs, renderedNode) {
584
586
  let output = placeholder;
585
587
  let regex = /\{([^{}]+)\}/
588
+ let omitted = {}
589
+
586
590
  let match;
587
591
  do {
588
592
  match = output.match(regex);
@@ -621,8 +625,7 @@ async function renderValue(node, data, placeholder, renderAs, renderedNode) {
621
625
  value = getRenderValue(node, data, match[1], renderAs)
622
626
  }
623
627
  } else {
624
- // Otherwise, retun original ouptut
625
- return output
628
+ omitted[`<|${match[1]}|>`] = match[0]
626
629
  }
627
630
 
628
631
  } catch (error) {
@@ -633,19 +636,25 @@ async function renderValue(node, data, placeholder, renderAs, renderedNode) {
633
636
  if (typeof value === "object") {
634
637
  value = JSON.stringify(value, null, 2);
635
638
  }
636
- output = output.replace(match[0], value);
639
+ output = output.replaceAll(match[0], value);
637
640
  } else if (renderAs) {
638
641
  if (match[0].startsWith(`{{${renderAs}.`)) {
639
- output = output.replace(match[0], "");
642
+ output = output.replaceAll(match[0], "");
640
643
  } else {
641
- match = null;
644
+ output = output.replaceAll(match[0], `<|${match[1]}|>`);
645
+ omitted[`<|${match[1]}|>`] = match[0]
642
646
  }
643
647
  } else {
648
+ // output = output.replace(match[0], `<|${match[1]}|>`);
644
649
  match = null;
645
650
  }
646
651
  }
647
652
  } while (match);
648
653
 
654
+ for (let key of Object.keys(omitted)) {
655
+ output = output.replaceAll(key, omitted[key]);
656
+ }
657
+
649
658
  return output;
650
659
  }
651
660
 
@@ -760,6 +769,28 @@ Actions.init({
760
769
  }
761
770
  });
762
771
 
772
+ Actions.init({
773
+ name: "render",
774
+ callback: async (action) => {
775
+ if (!action.form)
776
+ return
777
+
778
+ let elements
779
+ if (action.params)
780
+ elements = queryElements({ element: action.element, selector: action.params, type: 'selector' })
781
+ else
782
+ elements = queryElements({ element: action.element, prefix: 'render' })
783
+
784
+ let data = await action.form.getData()
785
+ for (let i = 0; i < elements.length; i++)
786
+ render({ source: elements[i], data: data[0] });
787
+
788
+ document.dispatchEvent(new CustomEvent('render', {
789
+ detail: {}
790
+ }));
791
+ }
792
+ });
793
+
763
794
  Observer.init({
764
795
  name: 'render',
765
796
  observe: ['addedNodes'],