@cocreate/render 1.45.4 → 1.45.5
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 +94 -51
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
## [1.45.5](https://github.com/CoCreate-app/CoCreate-render/compare/v1.45.4...v1.45.5) (2025-11-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* improve template rendering logic and error handling in renderTemplate function ([decd034](https://github.com/CoCreate-app/CoCreate-render/commit/decd034e0087981dac3abc15a9f3ee79e7d0870a))
|
|
7
|
+
|
|
1
8
|
## [1.45.4](https://github.com/CoCreate-app/CoCreate-render/compare/v1.45.3...v1.45.4) (2025-09-01)
|
|
2
9
|
|
|
3
10
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -195,7 +195,7 @@ async function render({
|
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
let clones = renderedNode.clones; // || renderedNode.template.clones..
|
|
198
|
-
if (!clones) {
|
|
198
|
+
if (!clones && renderedNode.template) {
|
|
199
199
|
clones = renderedNode.template.clones;
|
|
200
200
|
console.log("renderedNode.template.clones", clones);
|
|
201
201
|
}
|
|
@@ -273,17 +273,25 @@ async function render({
|
|
|
273
273
|
async function renderTemplate(template, data, key, index, keyPath) {
|
|
274
274
|
// if (!key)
|
|
275
275
|
// key = template.getAttribute('render')
|
|
276
|
-
|
|
276
|
+
if (!(template instanceof HTMLElement)) {
|
|
277
|
+
console.log("template not an element but should be")
|
|
278
|
+
}
|
|
277
279
|
let templateData = renderedNodes.get(template);
|
|
278
280
|
if (!templateData) {
|
|
279
|
-
templateData = {
|
|
281
|
+
templateData = {element: template, clones: new Map() };
|
|
280
282
|
renderedNodes.set(template, templateData);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
if (!templateData.parent && !templateData.source) {
|
|
286
|
+
let parentRender = template.parentElement.closest("[render]")
|
|
287
|
+
if (parentRender || template.source)
|
|
288
|
+
templateData.parent = renderedNodes.get(parentRender) || template.source
|
|
289
|
+
else
|
|
290
|
+
console.log("template parent missing is there no parent or is this an error? and source is", templateData.source)
|
|
281
291
|
}
|
|
282
292
|
|
|
283
|
-
templateData.parent
|
|
284
|
-
|
|
285
|
-
if (templateData.parent) {
|
|
286
|
-
templateData.parent = renderedNodes.get(templateData.parent);
|
|
293
|
+
if(!templateData.source && templateData.parent && templateData.parent.source){
|
|
294
|
+
templateData.source = templateData.parent.source
|
|
287
295
|
}
|
|
288
296
|
|
|
289
297
|
if (!templateData.keyPath) {
|
|
@@ -296,28 +304,41 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
296
304
|
}
|
|
297
305
|
}
|
|
298
306
|
|
|
299
|
-
template = templateData;
|
|
300
|
-
|
|
301
307
|
let renderData;
|
|
302
308
|
if (key) {
|
|
303
|
-
renderData = getRenderValue(
|
|
304
|
-
}
|
|
309
|
+
renderData = getRenderValue(templateData.element, data, key);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (!renderData) {
|
|
305
313
|
renderData = data;
|
|
306
314
|
}
|
|
315
|
+
|
|
316
|
+
// else if (Array.isArray(data)) {
|
|
317
|
+
// renderData = data;
|
|
318
|
+
// }
|
|
319
|
+
|
|
320
|
+
// if (!renderData && data) {
|
|
321
|
+
// if (Array.isArray(data)) {
|
|
322
|
+
// renderData = data;
|
|
323
|
+
// } else {
|
|
324
|
+
// renderData = [data];
|
|
325
|
+
// }
|
|
326
|
+
// } else return;
|
|
327
|
+
|
|
328
|
+
templateData.renderData = renderData;
|
|
329
|
+
let el = templateData.element;
|
|
330
|
+
if (el.nodeType !== 1) {
|
|
331
|
+
el = templateData.parent.element;
|
|
332
|
+
}
|
|
307
333
|
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
let renderAs =
|
|
317
|
-
template.element.getAttribute("render-as") ||
|
|
318
|
-
template.source.element.getAttribute("render-as") ||
|
|
319
|
-
key;
|
|
320
|
-
template.renderAs = renderAs;
|
|
334
|
+
let renderAs = templateData.renderAs
|
|
335
|
+
if (!templateData.renderAs) {
|
|
336
|
+
renderAs =
|
|
337
|
+
el.getAttribute("render-as") ||
|
|
338
|
+
el.getAttribute("render") ||
|
|
339
|
+
key;
|
|
340
|
+
templateData.renderAs = renderAs;
|
|
341
|
+
}
|
|
321
342
|
|
|
322
343
|
let renderType;
|
|
323
344
|
if (templateData.source && templateData.source.element)
|
|
@@ -328,28 +349,40 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
328
349
|
renderReverse =
|
|
329
350
|
templateData.source.element.getAttribute("render-reverse");
|
|
330
351
|
if (!renderReverse)
|
|
331
|
-
renderReverse =
|
|
352
|
+
renderReverse = el.getAttribute("render-reverse");
|
|
332
353
|
}
|
|
333
354
|
|
|
334
|
-
let exclude =
|
|
355
|
+
let exclude = el.getAttribute("render-exclude") || "";
|
|
335
356
|
if (exclude) {
|
|
336
357
|
exclude = exclude.replace(/ /g, "").split(",");
|
|
337
358
|
}
|
|
338
|
-
let reference =
|
|
359
|
+
let reference = el.getAttribute("render-reference");
|
|
339
360
|
|
|
340
361
|
let isInsert = data.$filter && (data.$filter.create || data.$filter.update);
|
|
341
362
|
if (renderType !== "object") {
|
|
342
363
|
if ((!isInsert && !index) || data.$filter.overwrite) {
|
|
343
|
-
if (!
|
|
344
|
-
|
|
364
|
+
if (!templateData.clones) {
|
|
365
|
+
return
|
|
366
|
+
if (templateData.template) {
|
|
367
|
+
templateData.clones = templateData.template.clones
|
|
368
|
+
} else if (templateData.parent && templateData.parent.template) {
|
|
369
|
+
templateData.clones = templateData.parent.template.clones
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// if (!templateData.clones) {
|
|
374
|
+
// templateData
|
|
375
|
+
// templateData = templateData.templateData;
|
|
376
|
+
// }
|
|
377
|
+
for (const [key, element] of templateData.clones) {
|
|
345
378
|
renderedNodes.delete(element);
|
|
346
379
|
element.remove();
|
|
347
|
-
|
|
380
|
+
templateData.clones.delete(key);
|
|
348
381
|
}
|
|
349
382
|
} //
|
|
350
383
|
// else if (index) {
|
|
351
384
|
// updates data that has already been rendered
|
|
352
|
-
//
|
|
385
|
+
// templateData.data = dotNotationToObject(renderData, templateData.data)
|
|
353
386
|
// }
|
|
354
387
|
}
|
|
355
388
|
|
|
@@ -359,7 +392,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
359
392
|
|
|
360
393
|
const keys = Object.keys(renderData);
|
|
361
394
|
for (let i = 0; i < keys.length; i++) {
|
|
362
|
-
let clone =
|
|
395
|
+
let clone = templateData.clones.get(keys[i]);
|
|
363
396
|
clone = renderedNodes.get(clone);
|
|
364
397
|
|
|
365
398
|
if (
|
|
@@ -370,7 +403,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
370
403
|
if (clone) {
|
|
371
404
|
renderedNodes.delete(clone.element);
|
|
372
405
|
clone.element.remove();
|
|
373
|
-
|
|
406
|
+
templateData.clones.delete(keys[i]);
|
|
374
407
|
}
|
|
375
408
|
continue;
|
|
376
409
|
}
|
|
@@ -384,26 +417,26 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
384
417
|
let Data = { [renderAs]: { key: keys[i], value, type } };
|
|
385
418
|
|
|
386
419
|
if (!clone) {
|
|
387
|
-
clone = cloneTemplate(
|
|
420
|
+
clone = cloneTemplate(templateData);
|
|
388
421
|
} else {
|
|
389
422
|
if (clone.renderedValue === value) {
|
|
390
423
|
continue;
|
|
391
424
|
}
|
|
392
425
|
}
|
|
393
426
|
clone.renderedValue = value;
|
|
394
|
-
// let clone = cloneTemplate(
|
|
427
|
+
// let clone = cloneTemplate(templateData);
|
|
395
428
|
|
|
396
429
|
let renderedKey = key.split(".");
|
|
397
430
|
renderedKey = renderedKey[renderedKey.length - 1];
|
|
398
431
|
//renderedKey needs to remove the parent.renderAs/key
|
|
399
432
|
|
|
400
433
|
clone.key = keys[i];
|
|
401
|
-
clone.keyPath =
|
|
434
|
+
clone.keyPath = templateData.keyPath + "." + renderedKey;
|
|
402
435
|
clone.parentKey = renderedKey;
|
|
403
436
|
clone.renderKey = key;
|
|
404
437
|
clone.element.setAttribute("renderedKey", keys[i]);
|
|
405
438
|
await renderValues(clone.element, Data, keys[i], renderAs);
|
|
406
|
-
insertElement(
|
|
439
|
+
insertElement(templateData, clone.element, index);
|
|
407
440
|
}
|
|
408
441
|
} else {
|
|
409
442
|
if (!key && !Array.isArray(renderData)) {
|
|
@@ -413,20 +446,20 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
413
446
|
}
|
|
414
447
|
|
|
415
448
|
if (!renderData) {
|
|
416
|
-
let clone = cloneTemplate(
|
|
417
|
-
clone.keyPath =
|
|
449
|
+
let clone = cloneTemplate(templateData);
|
|
450
|
+
clone.keyPath = templateData.keyPath;
|
|
418
451
|
await renderValues(clone.element, data, key, renderAs);
|
|
419
|
-
insertElement(
|
|
452
|
+
insertElement(templateData, clone.element, index);
|
|
420
453
|
} else {
|
|
421
454
|
if (!Array.isArray(renderData)) renderData = [renderData];
|
|
422
455
|
|
|
423
456
|
for (let i = 0; i < renderData.length; i++) {
|
|
424
|
-
let clone = cloneTemplate(
|
|
457
|
+
let clone = cloneTemplate(templateData);
|
|
425
458
|
|
|
426
459
|
let test = clone.element.getAttribute("render-as");
|
|
427
460
|
if (test) renderAs = test;
|
|
428
461
|
|
|
429
|
-
clone.keyPath =
|
|
462
|
+
clone.keyPath = templateData.keyPath || "" + `[${i}]`;
|
|
430
463
|
|
|
431
464
|
let object;
|
|
432
465
|
if (
|
|
@@ -455,6 +488,9 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
455
488
|
|
|
456
489
|
let index;
|
|
457
490
|
if (key !== "data") index = i;
|
|
491
|
+
|
|
492
|
+
clone.renderData = object
|
|
493
|
+
clone.index = index
|
|
458
494
|
await renderValues(
|
|
459
495
|
clone.element,
|
|
460
496
|
object,
|
|
@@ -465,7 +501,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
465
501
|
index
|
|
466
502
|
);
|
|
467
503
|
insertElement(
|
|
468
|
-
|
|
504
|
+
templateData,
|
|
469
505
|
clone.element,
|
|
470
506
|
index,
|
|
471
507
|
"",
|
|
@@ -713,8 +749,9 @@ async function renderValues(node, data, key, renderAs, keyPath, parent, index) {
|
|
|
713
749
|
return;
|
|
714
750
|
}
|
|
715
751
|
}
|
|
716
|
-
if (node.
|
|
717
|
-
|
|
752
|
+
if (node.hasAttribute("render") && !node.hasAttribute("render-clone")) {
|
|
753
|
+
let renderKey = node.getAttribute("render") || key
|
|
754
|
+
renderTemplate(node, data, renderKey);
|
|
718
755
|
} else if (node.childNodes.length > 0) {
|
|
719
756
|
// Array.from(node.childNodes).forEach(childNode => {
|
|
720
757
|
for (let childNode of node.childNodes) {
|
|
@@ -1157,14 +1194,20 @@ Observer.init({
|
|
|
1157
1194
|
|
|
1158
1195
|
let renderedNode = renderedNodes.get(parentElement);
|
|
1159
1196
|
let data;
|
|
1160
|
-
if (renderedNode
|
|
1161
|
-
|
|
1197
|
+
if (renderedNode) {
|
|
1198
|
+
if (renderedNode.renderData) {
|
|
1199
|
+
data = renderedNode.renderData;
|
|
1200
|
+
}
|
|
1201
|
+
} else {
|
|
1202
|
+
let sourceElement = mutation.target.parentElement.closest("[render-query]")
|
|
1203
|
+
let sourceData = sources.get(sourceElement);
|
|
1204
|
+
if (sourceData) {
|
|
1205
|
+
data = sourceData.data;
|
|
1206
|
+
}
|
|
1162
1207
|
}
|
|
1163
|
-
if (
|
|
1164
|
-
|
|
1208
|
+
if (data) {
|
|
1209
|
+
// render({ element: mutation.target, data });
|
|
1165
1210
|
}
|
|
1166
|
-
|
|
1167
|
-
render({ element: mutation.target, data });
|
|
1168
1211
|
}
|
|
1169
1212
|
});
|
|
1170
1213
|
|