@cocreate/render 1.41.5 → 1.42.1
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 +15 -0
- package/package.json +1 -1
- package/src/index.js +62 -17
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
## [1.42.1](https://github.com/CoCreate-app/CoCreate-render/compare/v1.42.0...v1.42.1) (2024-11-02)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* handeling of render-as $auto ([017dd71](https://github.com/CoCreate-app/CoCreate-render/commit/017dd71b400ed202aacd425eb63d76fdb7f9a968))
|
|
7
|
+
* observer taget has been renamed to selector ([adbd2c9](https://github.com/CoCreate-app/CoCreate-render/commit/adbd2c9768f439189da40ae1fcdaa333fff2f2da))
|
|
8
|
+
|
|
9
|
+
# [1.42.0](https://github.com/CoCreate-app/CoCreate-render/compare/v1.41.5...v1.42.0) (2024-09-21)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
* render-reverse attribute to trigger reverse rendering for chats , etc ([f688f61](https://github.com/CoCreate-app/CoCreate-render/commit/f688f61ae4446a18356515c6d88d6bd8cc0be142))
|
|
15
|
+
|
|
1
16
|
## [1.41.5](https://github.com/CoCreate-app/CoCreate-render/compare/v1.41.4...v1.41.5) (2024-08-24)
|
|
2
17
|
|
|
3
18
|
|
package/package.json
CHANGED
package/src/index.js
CHANGED
|
@@ -283,6 +283,13 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
283
283
|
if (templateData.source && templateData.source.element)
|
|
284
284
|
renderType = templateData.source.element.getAttribute('render-type');
|
|
285
285
|
|
|
286
|
+
let renderReverse
|
|
287
|
+
if (templateData.source && templateData.source.element) {
|
|
288
|
+
renderReverse = templateData.source.element.getAttribute('render-reverse');
|
|
289
|
+
if (!renderReverse)
|
|
290
|
+
renderReverse = template.element.getAttribute('render-reverse');
|
|
291
|
+
}
|
|
292
|
+
|
|
286
293
|
if (key && !Array.isArray(renderData) || renderType === "object") {
|
|
287
294
|
if (renderType && Array.isArray(renderData) && renderData.length === 1)
|
|
288
295
|
renderData = renderData[0]
|
|
@@ -342,6 +349,11 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
342
349
|
|
|
343
350
|
for (let i = 0; i < renderData.length; i++) {
|
|
344
351
|
let clone = cloneTemplate(template);
|
|
352
|
+
|
|
353
|
+
let test = clone.element.getAttribute('render-as')
|
|
354
|
+
if (test)
|
|
355
|
+
renderAs = test
|
|
356
|
+
|
|
345
357
|
clone.keyPath = template.keyPath || '' + `[${i}]`
|
|
346
358
|
|
|
347
359
|
let object
|
|
@@ -356,7 +368,7 @@ async function renderTemplate(template, data, key, index, keyPath) {
|
|
|
356
368
|
if (key !== 'data')
|
|
357
369
|
index = i
|
|
358
370
|
await renderValues(clone.element, object, key, renderAs, null, null, index);
|
|
359
|
-
insertElement(template, clone.element, index);
|
|
371
|
+
insertElement(template, clone.element, index, '', data, renderReverse);
|
|
360
372
|
}
|
|
361
373
|
}
|
|
362
374
|
}
|
|
@@ -379,7 +391,8 @@ function cloneTemplate(template) {
|
|
|
379
391
|
clone.setAttribute('render-clone', '');
|
|
380
392
|
|
|
381
393
|
let renderAs = clone.getAttribute('render-as')
|
|
382
|
-
if (renderAs) {
|
|
394
|
+
if (renderAs === '$auto') {
|
|
395
|
+
renderAs = uuid.generate(6)
|
|
383
396
|
clone = clone.outerHTML.replace(/\$auto/g, renderAs);
|
|
384
397
|
}
|
|
385
398
|
|
|
@@ -400,7 +413,7 @@ function cloneTemplate(template) {
|
|
|
400
413
|
return renderedNode;
|
|
401
414
|
}
|
|
402
415
|
|
|
403
|
-
function insertElement(template, element, index, currentIndex) {
|
|
416
|
+
function insertElement(template, element, index, currentIndex, data, renderReverse) {
|
|
404
417
|
let eid = element.getAttribute('eid')
|
|
405
418
|
if (!eid) {
|
|
406
419
|
eid = uuid.generate(6)
|
|
@@ -410,22 +423,54 @@ function insertElement(template, element, index, currentIndex) {
|
|
|
410
423
|
if (index !== null && index >= 0) {
|
|
411
424
|
if (!template.clones)
|
|
412
425
|
template = template.template
|
|
413
|
-
const clones = Array.from(template.clones);
|
|
426
|
+
// const clones = Array.from(template.clones);
|
|
414
427
|
|
|
415
428
|
let item
|
|
416
|
-
if (currentIndex) {
|
|
429
|
+
if (!currentIndex && currentIndex !== 0) {
|
|
430
|
+
if (template.clones.has(eid))
|
|
431
|
+
return
|
|
432
|
+
item = [eid, element];
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
const clones = Array.from(template.clones);
|
|
436
|
+
|
|
437
|
+
if (currentIndex || currentIndex === 0) {
|
|
417
438
|
item = clones.splice(currentIndex, 1)[0];
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
if (data && data.$filter && data.$filter.startingIndex)
|
|
442
|
+
index += data.$filter.startingIndex
|
|
443
|
+
clones.splice(index, 0, item); // Insert item into clones at the specified index
|
|
444
|
+
|
|
445
|
+
if (renderReverse) {
|
|
446
|
+
// Chat-specific logic: reverse rendering but still inserting based on sorting
|
|
447
|
+
|
|
448
|
+
// If we're rendering in reverse order, we want to respect the insertion index
|
|
449
|
+
if (clones[index + 1] && clones[index + 1][1] !== element) {
|
|
450
|
+
// Insert before the next element (reverse order means newer items come before older ones)
|
|
451
|
+
clones[index + 1][1].insertAdjacentElement('afterend', element);
|
|
452
|
+
} else if (clones[index] && clones[index][1] !== element) {
|
|
453
|
+
// Insert after the current element if there's no next element
|
|
454
|
+
clones[index][1].insertAdjacentElement('beforeend', element);
|
|
455
|
+
} else {
|
|
456
|
+
// Fallback: insert before the template if clones are empty or undefined
|
|
457
|
+
template.element.insertAdjacentElement('afterend', element);
|
|
458
|
+
}
|
|
459
|
+
|
|
418
460
|
} else {
|
|
419
|
-
|
|
461
|
+
// Non-chat logic: handle ascending or descending order as usual
|
|
462
|
+
if (clones[index + 1] && clones[index + 1][1] !== element) {
|
|
463
|
+
// Insert before the next element
|
|
464
|
+
clones[index + 1][1].insertAdjacentElement('beforebegin', element);
|
|
465
|
+
} else if (clones[index] && clones[index][1] !== element) {
|
|
466
|
+
// Insert after the current element if there's no next element
|
|
467
|
+
clones[index][1].insertAdjacentElement('afterend', element);
|
|
468
|
+
} else {
|
|
469
|
+
// Fallback: insert before the template if clones are empty or undefined
|
|
470
|
+
template.element.insertAdjacentElement('beforebegin', element);
|
|
471
|
+
}
|
|
420
472
|
}
|
|
421
473
|
|
|
422
|
-
clones.splice(index, 0, item);
|
|
423
|
-
if (clones[index + 1] && clones[index][1] !== element)
|
|
424
|
-
clones[index][1].insertAdjacentElement('beforebegin', element);
|
|
425
|
-
else if (clones[index] && clones[index][1] !== element)
|
|
426
|
-
clones[index][1].insertAdjacentElement('afterend', element);
|
|
427
|
-
else
|
|
428
|
-
template.element.insertAdjacentElement('beforebegin', element);
|
|
429
474
|
template.clones = new Map(clones);
|
|
430
475
|
} else {
|
|
431
476
|
template.clones.set(eid, element)
|
|
@@ -841,7 +886,7 @@ Actions.init({
|
|
|
841
886
|
Observer.init({
|
|
842
887
|
name: 'render',
|
|
843
888
|
observe: ['addedNodes'],
|
|
844
|
-
|
|
889
|
+
selector: elementSelector,
|
|
845
890
|
callback: function (mutation) {
|
|
846
891
|
init(mutation.target)
|
|
847
892
|
}
|
|
@@ -862,7 +907,7 @@ Observer.init({
|
|
|
862
907
|
Observer.init({
|
|
863
908
|
name: 'render',
|
|
864
909
|
observe: ['addedNodes'],
|
|
865
|
-
|
|
910
|
+
selector: '[render]',
|
|
866
911
|
callback: function (mutation) {
|
|
867
912
|
if (mutation.target.hasAttribute('render-clone'))
|
|
868
913
|
return
|
|
@@ -884,7 +929,7 @@ Observer.init({
|
|
|
884
929
|
// Observer.init({
|
|
885
930
|
// name: 'render',
|
|
886
931
|
// observe: ['addedNodes'],
|
|
887
|
-
//
|
|
932
|
+
// selector: '[render-clone]',
|
|
888
933
|
// callback: function (mutation) {
|
|
889
934
|
// let renderedNode = renderedNodes.get(mutation.target)
|
|
890
935
|
// if (!renderedNode) return
|
|
@@ -917,7 +962,7 @@ Observer.init({
|
|
|
917
962
|
Observer.init({
|
|
918
963
|
name: 'renderNodesRemoved',
|
|
919
964
|
observe: ['removedNodes'],
|
|
920
|
-
|
|
965
|
+
selector: '[render-clone]',
|
|
921
966
|
callback: function (mutation) {
|
|
922
967
|
if (mutation.target.parentElement) return
|
|
923
968
|
let renderedNode = renderedNodes.get(mutation.target)
|