@cocreate/render 1.40.3 → 1.41.0

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,17 @@
1
+ # [1.41.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.4...v1.41.0) (2024-05-19)
2
+
3
+
4
+ ### Features
5
+
6
+ * attribute render-type to define type of data being render ([4083e6f](https://github.com/CoCreate-app/CoCreate-render/commit/4083e6fa82728233b5d64e8071dc1315bd7c6056))
7
+
8
+ ## [1.40.4](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.3...v1.40.4) (2024-04-29)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * bump cocreate dependencies ([6f0b4cf](https://github.com/CoCreate-app/CoCreate-render/commit/6f0b4cfa8cf5c1ef3a251a66bf3bc72aefc460d6))
14
+
1
15
  ## [1.40.3](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.2...v1.40.3) (2024-03-18)
2
16
 
3
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocreate/render",
3
- "version": "1.40.3",
3
+ "version": "1.41.0",
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",
@@ -58,10 +58,10 @@
58
58
  "webpack-log": "^3.0.1"
59
59
  },
60
60
  "dependencies": {
61
- "@cocreate/actions": "^1.15.1",
62
- "@cocreate/api": "^1.18.2",
63
- "@cocreate/element-prototype": "^1.15.0",
64
- "@cocreate/observer": "^1.15.0",
65
- "@cocreate/utils": "^1.30.0"
61
+ "@cocreate/actions": "^1.18.1",
62
+ "@cocreate/api": "^1.20.5",
63
+ "@cocreate/element-prototype": "^1.22.2",
64
+ "@cocreate/observer": "^1.16.0",
65
+ "@cocreate/utils": "^1.33.6"
66
66
  }
67
67
  }
package/src/index.js CHANGED
@@ -269,7 +269,14 @@ async function renderTemplate(template, data, key, index, keyPath) {
269
269
  let renderAs = template.element.getAttribute('render-as') || key;
270
270
  template.renderAs = renderAs
271
271
 
272
- if (key && !Array.isArray(renderData)) {
272
+ let renderType
273
+ if (templateData.source && templateData.source.element)
274
+ renderType = templateData.source.element.getAttribute('render-type');
275
+
276
+ if (key && !Array.isArray(renderData) || renderType === "object") {
277
+ if (renderType && Array.isArray(renderData) && renderData.length === 1)
278
+ renderData = renderData[0]
279
+
273
280
  let exclude = template.element.getAttribute('render-exclude') || ''
274
281
  if (exclude) {
275
282
  exclude = exclude.replace(/ /g, '').split(",")
@@ -335,7 +342,10 @@ async function renderTemplate(template, data, key, index, keyPath) {
335
342
  } else
336
343
  object = renderData[i]
337
344
 
338
- await renderValues(clone.element, object, key, renderAs);
345
+ let index
346
+ if (key !== 'data')
347
+ index = i
348
+ await renderValues(clone.element, object, key, renderAs, null, null, index);
339
349
  insertElement(template, clone.element, index);
340
350
  }
341
351
  }
@@ -413,7 +423,7 @@ function insertElement(template, element, index, currentIndex) {
413
423
  }
414
424
  }
415
425
 
416
- async function renderValues(node, data, key, renderAs, keyPath, parent) {
426
+ async function renderValues(node, data, key, renderAs, keyPath, parent, index) {
417
427
  if (!data) return;
418
428
 
419
429
  let renderedNode = renderedNodes.get(node)
@@ -486,8 +496,8 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
486
496
  let namePlaceholder = renderedAttribute.placeholder.name || name;
487
497
  let valuePlaceholder = renderedAttribute.placeholder.value || value;
488
498
 
489
- name = await renderValue(attr, data, namePlaceholder, renderAs, renderedAttribute);
490
- value = await renderValue(attr, data, valuePlaceholder, renderAs, renderedAttribute);
499
+ name = await renderValue(attr, data, namePlaceholder, renderAs, renderedAttribute, index);
500
+ value = await renderValue(attr, data, valuePlaceholder, renderAs, renderedAttribute, index);
491
501
  if (namePlaceholder.includes('{{') && name) {
492
502
  const attributes = name.match(/([^\s]+="[^"]*"|[^\s]+)/g) || [];
493
503
  attributes.forEach(attr => {
@@ -526,7 +536,7 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
526
536
  } else if (node.childNodes.length > 0) {
527
537
  // Array.from(node.childNodes).forEach(childNode => {
528
538
  for (let childNode of node.childNodes) {
529
- await renderValues(childNode, data, key, renderAs, keyPath, parent);
539
+ await renderValues(childNode, data, key, renderAs, keyPath, parent, index);
530
540
  }
531
541
  // });
532
542
  }
@@ -544,7 +554,7 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
544
554
  return
545
555
  textContent = renderedNode.placeholder || node.textContent;
546
556
 
547
- text = await renderValue(node, data, textContent, renderAs, renderedNode);
557
+ text = await renderValue(node, data, textContent, renderAs, renderedNode, index);
548
558
 
549
559
  if (text || text == "") {
550
560
  if (text != renderedNode.text) {
@@ -573,7 +583,7 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
573
583
  if (node.childNodes.length > 0) {
574
584
  // Array.from(node.childNodes).forEach(childNode => {
575
585
  for (let childNode of node.childNodes) {
576
- await renderValues(childNode, data, key, renderAs, keyPath, parent);
586
+ await renderValues(childNode, data, key, renderAs, keyPath, parent, index);
577
587
  }
578
588
  // });
579
589
  }
@@ -582,8 +592,9 @@ async function renderValues(node, data, key, renderAs, keyPath, parent) {
582
592
  }
583
593
  }
584
594
 
585
- async function renderValue(node, data, placeholder, renderAs, renderedNode) {
595
+ async function renderValue(node, data, placeholder, renderAs, renderedNode, index) {
586
596
  let output = placeholder;
597
+
587
598
  let regex = /\{([^{}]+)\}/
588
599
  let omitted = {}
589
600
 
@@ -593,7 +604,10 @@ async function renderValue(node, data, placeholder, renderAs, renderedNode) {
593
604
  if (match) {
594
605
  let value;
595
606
  try {
596
- if (match[1].startsWith('[') && match[1].endsWith(']')) { // {[]} - Dot-notation
607
+
608
+ if (match[1] === 'index' && index >= 0) { // {[]} - Dot-notation
609
+ value = index
610
+ } else if (match[1].startsWith('[') && match[1].endsWith(']')) { // {[]} - Dot-notation
597
611
  match[1] = match[1].slice(1, -1);
598
612
  value = getRenderValue(node, data, match[1], renderAs);
599
613
  } else if (match[1].startsWith('(') && match[1].endsWith(')')) { // {()} - CSS Selector and JSON Structure
@@ -632,7 +646,7 @@ async function renderValue(node, data, placeholder, renderAs, renderedNode) {
632
646
  console.error(error)
633
647
  }
634
648
 
635
- if (value || value === "") {
649
+ if (value || value === "" || value >= 0) {
636
650
  if (typeof value === "object") {
637
651
  value = JSON.stringify(value, null, 2);
638
652
  }