@cocreate/render 1.40.4 → 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 +7 -0
- package/package.json +1 -1
- package/src/index.js +25 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
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
|
+
|
|
1
8
|
## [1.40.4](https://github.com/CoCreate-app/CoCreate-render/compare/v1.40.3...v1.40.4) (2024-04-29)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|