@cocreate/render 1.28.3 → 1.28.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 +17 -0
- package/package.json +6 -6
- package/src/index.js +45 -34
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
## [1.28.5](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.4...v1.28.5) (2023-10-16)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* render delete nodes ([1921e57](https://github.com/CoCreate-app/CoCreate-render/commit/1921e572051d62aa53513f5379538f3df3c76d93))
|
|
7
|
+
* update and delete for loop data.type ([cc5e4b5](https://github.com/CoCreate-app/CoCreate-render/commit/cc5e4b5ef33814de59159204f6af8648b6fdfbca))
|
|
8
|
+
|
|
9
|
+
## [1.28.4](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.3...v1.28.4) (2023-10-14)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* bump dependencies ([ac79266](https://github.com/CoCreate-app/CoCreate-render/commit/ac79266c1f0934c2e9321536626074e1d4090070))
|
|
15
|
+
* improved finding clones to update and delete ([9bafc8b](https://github.com/CoCreate-app/CoCreate-render/commit/9bafc8b56fc20a03da8963a5888164ceb5fe28fc))
|
|
16
|
+
* use tbody as new element to prevent lost of tr and td elements ([88ca483](https://github.com/CoCreate-app/CoCreate-render/commit/88ca483c30e5c66c54fc70a8064d90fa8bdadff9))
|
|
17
|
+
|
|
1
18
|
## [1.28.3](https://github.com/CoCreate-app/CoCreate-render/compare/v1.28.2...v1.28.3) (2023-10-09)
|
|
2
19
|
|
|
3
20
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocreate/render",
|
|
3
|
-
"version": "1.28.
|
|
3
|
+
"version": "1.28.5",
|
|
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.11.
|
|
62
|
-
"@cocreate/api": "^1.15.
|
|
63
|
-
"@cocreate/element-prototype": "^1.11.
|
|
64
|
-
"@cocreate/observer": "^1.11.
|
|
65
|
-
"@cocreate/utils": "^1.25.
|
|
61
|
+
"@cocreate/actions": "^1.11.6",
|
|
62
|
+
"@cocreate/api": "^1.15.4",
|
|
63
|
+
"@cocreate/element-prototype": "^1.11.5",
|
|
64
|
+
"@cocreate/observer": "^1.11.5",
|
|
65
|
+
"@cocreate/utils": "^1.25.3"
|
|
66
66
|
}
|
|
67
67
|
}
|
package/src/index.js
CHANGED
|
@@ -88,12 +88,19 @@ async function render({ source, element, data, key, index, currentIndex, update,
|
|
|
88
88
|
remove = remove || data.$filter.remove
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
+
let type = data.type
|
|
92
|
+
if (!type && data.method) {
|
|
93
|
+
type = data.method.split('.')[1]
|
|
94
|
+
} else if (type == 'key')
|
|
95
|
+
type = 'object'
|
|
96
|
+
|
|
97
|
+
|
|
91
98
|
if (!Array.isArray(element) && !(element instanceof HTMLCollection) && !(element instanceof NodeList))
|
|
92
99
|
element = [element]
|
|
93
100
|
|
|
94
101
|
for (let i = 0; i < element.length; i++) {
|
|
95
102
|
if (!key)
|
|
96
|
-
key = element[i].getAttribute('render')
|
|
103
|
+
key = element[i].getAttribute('render') || type
|
|
97
104
|
|
|
98
105
|
let renderedNode = renderedNodes.get(element[i])
|
|
99
106
|
if (source) {
|
|
@@ -104,47 +111,51 @@ async function render({ source, element, data, key, index, currentIndex, update,
|
|
|
104
111
|
}
|
|
105
112
|
|
|
106
113
|
if (remove) {
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
114
|
+
for (let j = 0; j < data[type].length; j++) {
|
|
115
|
+
let cloneKey
|
|
116
|
+
if (type === 'object') {
|
|
117
|
+
cloneKey = data[type][j]._id;
|
|
118
|
+
} else {
|
|
119
|
+
cloneKey = data[type][j].name;
|
|
112
120
|
}
|
|
113
|
-
}
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
122
|
+
let clone = renderedNode.clones.get(cloneKey)
|
|
123
|
+
if (!clone) return
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
125
|
+
renderedNode.clones.delete(cloneKey)
|
|
126
|
+
renderedNodes.delete(clone)
|
|
127
|
+
clone.remove()
|
|
128
|
+
}
|
|
121
129
|
} else if (key || Array.isArray(data)) {
|
|
122
130
|
if (update) {
|
|
123
|
-
let
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
131
|
+
for (let j = 0; j < data[type].length; j++) {
|
|
132
|
+
let clone
|
|
133
|
+
if (type === 'object') {
|
|
134
|
+
clone = renderedNode.clones.get(data[type][j]._id);
|
|
135
|
+
} else {
|
|
136
|
+
clone = renderedNode.clones.get(data[type][j].name);
|
|
137
|
+
}
|
|
127
138
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
else
|
|
131
|
-
clone = Array.from(renderedNode.clones)[index]
|
|
139
|
+
if (!currentIndex)
|
|
140
|
+
currentIndex = data.$filter.currentIndex
|
|
132
141
|
|
|
133
|
-
|
|
142
|
+
if (!clone) return
|
|
134
143
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
await renderValues(clone, { object: data[type][j] });
|
|
145
|
+
if (currentIndex >= 0)
|
|
146
|
+
insertElement(renderedNode, clone, index, currentIndex)
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
139
149
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
150
|
+
// TODO: if $auto here every subsequent clone will have same value, not replacing here will apply unique value to each clone
|
|
151
|
+
if (key === '$auto')
|
|
152
|
+
key = key.replace(/\$auto/g, uuid.generate(6));
|
|
143
153
|
|
|
144
|
-
|
|
145
|
-
|
|
154
|
+
if (key)
|
|
155
|
+
element[i].setAttribute('render', key);
|
|
146
156
|
|
|
147
|
-
|
|
157
|
+
renderTemplate(element[i], data, key, index);
|
|
158
|
+
}
|
|
148
159
|
} else
|
|
149
160
|
await renderValues(element[i], data);
|
|
150
161
|
|
|
@@ -153,8 +164,8 @@ async function render({ source, element, data, key, index, currentIndex, update,
|
|
|
153
164
|
}
|
|
154
165
|
|
|
155
166
|
async function renderTemplate(template, data, key, index, keyPath) {
|
|
156
|
-
if (!key)
|
|
157
|
-
|
|
167
|
+
// if (!key)
|
|
168
|
+
// key = template.getAttribute('render')
|
|
158
169
|
|
|
159
170
|
let templateData = renderedNodes.get(template)
|
|
160
171
|
if (!templateData) {
|
|
@@ -297,7 +308,7 @@ function cloneTemplate(template) {
|
|
|
297
308
|
}
|
|
298
309
|
|
|
299
310
|
if (typeof clone === 'string') {
|
|
300
|
-
let container = document.createElement('
|
|
311
|
+
let container = document.createElement('tbody');
|
|
301
312
|
container.innerHTML = clone;
|
|
302
313
|
clone = container.firstChild
|
|
303
314
|
container.remove()
|