neo.mjs 5.15.3 → 5.15.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/apps/ServiceWorker.mjs +2 -2
- package/apps/covid/view/country/Table.mjs +10 -7
- package/examples/ServiceWorker.mjs +2 -2
- package/package.json +6 -6
- package/src/DefaultConfig.mjs +2 -2
- package/src/main/DomEvents.mjs +16 -0
- package/src/main/mixin/DeltaUpdates.mjs +67 -44
- package/src/manager/DomEvent.mjs +1 -0
package/apps/ServiceWorker.mjs
CHANGED
@@ -121,18 +121,21 @@ class Table extends Container {
|
|
121
121
|
if (oldValue !== undefined) {
|
122
122
|
let me = this,
|
123
123
|
selectionModel = me.selectionModel,
|
124
|
+
view = me.getView(),
|
124
125
|
id;
|
125
126
|
|
126
|
-
if (
|
127
|
-
|
127
|
+
if (view) {
|
128
|
+
if (value) {
|
129
|
+
id = `${view.id}__tr__${value}`; // the store can not be loaded on the first selection
|
128
130
|
|
129
|
-
|
130
|
-
|
131
|
+
if (!selectionModel.isSelected(id)) {
|
132
|
+
selectionModel.select(id);
|
131
133
|
|
132
|
-
|
134
|
+
me.mounted && Neo.main.DomAccess.scrollToTableRow({id: id});
|
135
|
+
}
|
136
|
+
} else {
|
137
|
+
selectionModel.deselectAll();
|
133
138
|
}
|
134
|
-
} else {
|
135
|
-
selectionModel.deselectAll();
|
136
139
|
}
|
137
140
|
}
|
138
141
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "neo.mjs",
|
3
|
-
"version": "5.15.
|
3
|
+
"version": "5.15.5",
|
4
4
|
"description": "The webworkers driven UI framework",
|
5
5
|
"type": "module",
|
6
6
|
"repository": {
|
@@ -44,7 +44,7 @@
|
|
44
44
|
"@fortawesome/fontawesome-free": "^6.4.2",
|
45
45
|
"@material/mwc-button": "^0.27.0",
|
46
46
|
"@material/mwc-textfield": "^0.27.0",
|
47
|
-
"autoprefixer": "^10.4.
|
47
|
+
"autoprefixer": "^10.4.15",
|
48
48
|
"chalk": "^5.3.0",
|
49
49
|
"clean-webpack-plugin": "^4.0.0",
|
50
50
|
"commander": "^11.0.0",
|
@@ -52,11 +52,11 @@
|
|
52
52
|
"envinfo": "^7.10.0",
|
53
53
|
"fs-extra": "^11.1.1",
|
54
54
|
"highlightjs-line-numbers.js": "^2.8.0",
|
55
|
-
"inquirer": "^9.2.
|
56
|
-
"neo-jsdoc": "
|
57
|
-
"neo-jsdoc-x": "
|
55
|
+
"inquirer": "^9.2.10",
|
56
|
+
"neo-jsdoc": "1.0.1",
|
57
|
+
"neo-jsdoc-x": "1.0.5",
|
58
58
|
"postcss": "^8.4.27",
|
59
|
-
"sass": "^1.
|
59
|
+
"sass": "^1.65.1",
|
60
60
|
"webpack": "^5.88.2",
|
61
61
|
"webpack-cli": "^5.1.4",
|
62
62
|
"webpack-dev-server": "4.15.1",
|
package/src/DefaultConfig.mjs
CHANGED
@@ -245,12 +245,12 @@ const DefaultConfig = {
|
|
245
245
|
useVdomWorker: true,
|
246
246
|
/**
|
247
247
|
* buildScripts/injectPackageVersion.mjs will update this value
|
248
|
-
* @default '5.15.
|
248
|
+
* @default '5.15.5'
|
249
249
|
* @memberOf! module:Neo
|
250
250
|
* @name config.version
|
251
251
|
* @type String
|
252
252
|
*/
|
253
|
-
version: '5.15.
|
253
|
+
version: '5.15.5'
|
254
254
|
};
|
255
255
|
|
256
256
|
Object.assign(DefaultConfig, {
|
package/src/main/DomEvents.mjs
CHANGED
@@ -17,6 +17,7 @@ const globalDomEvents = [
|
|
17
17
|
{name: 'mouseenter', handler: 'onMouseEnter', options: {capture: true}},
|
18
18
|
{name: 'mouseleave', handler: 'onMouseLeave', options: {capture: true}},
|
19
19
|
{name: 'mouseup', handler: 'onMouseUp'},
|
20
|
+
{name: 'scroll', handler: 'onScroll', options: {capture: true}},
|
20
21
|
{name: 'wheel', handler: 'onWheel', options: {passive: false}}
|
21
22
|
];
|
22
23
|
|
@@ -572,6 +573,21 @@ class DomEvents extends Base {
|
|
572
573
|
this.sendMessageToApp(this.getMouseEventData(event))
|
573
574
|
}
|
574
575
|
|
576
|
+
/**
|
577
|
+
* @param {Event} event
|
578
|
+
*/
|
579
|
+
onScroll(event) {
|
580
|
+
let target = event.target;
|
581
|
+
|
582
|
+
this.sendMessageToApp({
|
583
|
+
...this.getEventData(event),
|
584
|
+
clientHeight: target.clientHeight,
|
585
|
+
clientWidth : target.clientWidth,
|
586
|
+
scrollLeft : target.scrollLeft,
|
587
|
+
scrollTop : target.scrollTop
|
588
|
+
})
|
589
|
+
}
|
590
|
+
|
575
591
|
/**
|
576
592
|
* @param {Object} event
|
577
593
|
*/
|
@@ -15,12 +15,33 @@ class DeltaUpdates extends Base {
|
|
15
15
|
className: 'Neo.main.mixin.DeltaUpdates'
|
16
16
|
}
|
17
17
|
|
18
|
+
/**
|
19
|
+
* @param {HTMLElement} node
|
20
|
+
* @param {String} nodeName
|
21
|
+
*/
|
22
|
+
du_changeNodeName(node, nodeName) {
|
23
|
+
let attributes = node.attributes,
|
24
|
+
clone = document.createElement(nodeName),
|
25
|
+
i = 0,
|
26
|
+
len = attributes.length,
|
27
|
+
attribute;
|
28
|
+
|
29
|
+
for (; i < len; i++) {
|
30
|
+
attribute = attributes.item(i);
|
31
|
+
clone.setAttribute(attribute.nodeName, attribute.nodeValue)
|
32
|
+
}
|
33
|
+
|
34
|
+
clone.innerHTML= node.innerHTML;
|
35
|
+
|
36
|
+
node.parentNode.replaceChild(clone, node)
|
37
|
+
}
|
38
|
+
|
18
39
|
/**
|
19
40
|
* @param {Object} delta
|
20
41
|
* @param {String} delta.id
|
21
42
|
*/
|
22
43
|
du_focusNode(delta) {
|
23
|
-
this.getElement(delta.id).focus()
|
44
|
+
this.getElement(delta.id).focus()
|
24
45
|
}
|
25
46
|
|
26
47
|
/**
|
@@ -55,10 +76,10 @@ class DeltaUpdates extends Base {
|
|
55
76
|
for (; i < countChildren; i++) {
|
56
77
|
if (parentNode.childNodes[i].nodeType === 8) { // ignore comments
|
57
78
|
if (i < realIndex) {
|
58
|
-
realIndex
|
79
|
+
realIndex++
|
59
80
|
}
|
60
81
|
|
61
|
-
hasComments = true
|
82
|
+
hasComments = true
|
62
83
|
}
|
63
84
|
}
|
64
85
|
}
|
@@ -68,23 +89,23 @@ class DeltaUpdates extends Base {
|
|
68
89
|
|
69
90
|
if (index > 0 && index >= countChildren) {
|
70
91
|
parentNode.insertAdjacentHTML('beforeend', delta.outerHTML);
|
71
|
-
return
|
92
|
+
return
|
72
93
|
}
|
73
94
|
|
74
95
|
if (countChildren > 0 && countChildren > index) {
|
75
|
-
parentNode.children[index].insertAdjacentHTML('beforebegin', delta.outerHTML)
|
96
|
+
parentNode.children[index].insertAdjacentHTML('beforebegin', delta.outerHTML)
|
76
97
|
} else if (countChildren > 0) {
|
77
|
-
parentNode.children[countChildren - 1].insertAdjacentHTML('afterend', delta.outerHTML)
|
98
|
+
parentNode.children[countChildren - 1].insertAdjacentHTML('afterend', delta.outerHTML)
|
78
99
|
} else {
|
79
|
-
parentNode.insertAdjacentHTML('beforeend', delta.outerHTML)
|
100
|
+
parentNode.insertAdjacentHTML('beforeend', delta.outerHTML)
|
80
101
|
}
|
81
102
|
} else {
|
82
103
|
node = this.htmlStringToElement(delta.outerHTML);
|
83
104
|
|
84
105
|
if (countChildren > 0 && countChildren > realIndex) {
|
85
|
-
parentNode.insertBefore(node, parentNode.childNodes[realIndex])
|
106
|
+
parentNode.insertBefore(node, parentNode.childNodes[realIndex])
|
86
107
|
} else {
|
87
|
-
parentNode.appendChild(node)
|
108
|
+
parentNode.appendChild(node)
|
88
109
|
}
|
89
110
|
}
|
90
111
|
}
|
@@ -102,11 +123,11 @@ class DeltaUpdates extends Base {
|
|
102
123
|
parentNode = this.getElement(delta.parentId);
|
103
124
|
|
104
125
|
if (index >= parentNode.children.length) {
|
105
|
-
parentNode.appendChild(node)
|
126
|
+
parentNode.appendChild(node)
|
106
127
|
} else {
|
107
128
|
//index++; // todo?: increase the index in case same parent, oldIndex < newIndex, direct swap
|
108
129
|
if (node && parentNode.children[index].id !== delta.id) {
|
109
|
-
parentNode.insertBefore(node, parentNode.children[index])
|
130
|
+
parentNode.insertBefore(node, parentNode.children[index])
|
110
131
|
}
|
111
132
|
}
|
112
133
|
}
|
@@ -124,12 +145,10 @@ class DeltaUpdates extends Base {
|
|
124
145
|
node = this.getElementOrBody(delta.parentId);
|
125
146
|
|
126
147
|
if (node) {
|
127
|
-
startTag
|
128
|
-
reg
|
148
|
+
startTag = `<!-- ${delta.id} -->`;
|
149
|
+
reg = new RegExp(startTag + '[\\s\\S]*?<!-- \/neo-vtext -->');
|
129
150
|
|
130
151
|
node.innerHTML = node.innerHTML.replace(reg, '')
|
131
|
-
} else {
|
132
|
-
// console.warn('du_removeNode: dom node not found for id', delta.id);
|
133
152
|
}
|
134
153
|
} else {
|
135
154
|
node.remove()
|
@@ -146,7 +165,7 @@ class DeltaUpdates extends Base {
|
|
146
165
|
let me = this,
|
147
166
|
node = me.getElement(delta.parentId);
|
148
167
|
|
149
|
-
node.replaceChild(me.getElement(delta.toId), me.getElement(delta.fromId))
|
168
|
+
node.replaceChild(me.getElement(delta.toId), me.getElement(delta.fromId))
|
150
169
|
}
|
151
170
|
|
152
171
|
/**
|
@@ -158,7 +177,7 @@ class DeltaUpdates extends Base {
|
|
158
177
|
let me = this,
|
159
178
|
node = me.getElement(delta.id);
|
160
179
|
|
161
|
-
node.textContent = delta.value
|
180
|
+
node.textContent = delta.value
|
162
181
|
}
|
163
182
|
|
164
183
|
/**
|
@@ -171,47 +190,51 @@ class DeltaUpdates extends Base {
|
|
171
190
|
* @param {Object} [delta.style]
|
172
191
|
*/
|
173
192
|
du_updateNode(delta) {
|
174
|
-
let
|
193
|
+
let me = this,
|
194
|
+
node = me.getElementOrBody(delta.id);
|
175
195
|
|
176
196
|
if (!node) {
|
177
|
-
console.warn('du_updateNode: node not found for id', delta.id)
|
197
|
+
console.warn('du_updateNode: node not found for id', delta.id)
|
178
198
|
} else {
|
179
199
|
Object.entries(delta).forEach(([prop, value]) => {
|
180
200
|
switch(prop) {
|
181
201
|
case 'attributes':
|
182
202
|
Object.entries(value).forEach(([key, val]) => {
|
183
|
-
if (
|
184
|
-
node[key] = val === 'true'
|
203
|
+
if (me.voidAttributes.includes(key)) {
|
204
|
+
node[key] = val === 'true' // vnode attribute values get converted into strings
|
185
205
|
} else if (val === null || val === '') {
|
186
206
|
if (key === 'value') {
|
187
|
-
node[key] = ''
|
207
|
+
node[key] = '' // input fields => pseudo attribute can not be removed
|
188
208
|
} else {
|
189
|
-
node.removeAttribute(key)
|
209
|
+
node.removeAttribute(key)
|
190
210
|
}
|
191
211
|
} else if (key === 'id') {
|
192
|
-
node[Neo.config.useDomIds ? 'id' : 'data-neo-id'] = val
|
212
|
+
node[Neo.config.useDomIds ? 'id' : 'data-neo-id'] = val
|
193
213
|
} else if (key === 'spellcheck' && val === 'false') {
|
194
214
|
// see https://github.com/neomjs/neo/issues/1922
|
195
|
-
node[key] = false
|
215
|
+
node[key] = false
|
196
216
|
} else {
|
197
217
|
if (key === 'value') {
|
198
|
-
node[key] = val
|
218
|
+
node[key] = val
|
199
219
|
} else {
|
200
|
-
node.setAttribute(key, val)
|
220
|
+
node.setAttribute(key, val)
|
201
221
|
}
|
202
222
|
}
|
203
223
|
});
|
204
|
-
break
|
224
|
+
break
|
205
225
|
case 'cls':
|
206
226
|
node.classList.add(...value.add || []);
|
207
227
|
node.classList.remove(...value.remove || []);
|
208
|
-
break
|
228
|
+
break
|
209
229
|
case 'innerHTML':
|
210
230
|
node.innerHTML = value || '';
|
211
|
-
break
|
231
|
+
break
|
232
|
+
case 'nodeName':
|
233
|
+
me.du_changeNodeName(node, value);
|
234
|
+
break
|
212
235
|
case 'outerHTML':
|
213
236
|
node.outerHTML = value || '';
|
214
|
-
break
|
237
|
+
break
|
215
238
|
case 'style':
|
216
239
|
if (Neo.isObject(value)) {
|
217
240
|
Object.entries(value).forEach(([key, val]) => {
|
@@ -219,15 +242,15 @@ class DeltaUpdates extends Base {
|
|
219
242
|
|
220
243
|
if (Neo.isString(val) && val.includes('!important')) {
|
221
244
|
val = val.replace('!important', '').trim();
|
222
|
-
important = 'important'
|
245
|
+
important = 'important'
|
223
246
|
}
|
224
247
|
|
225
|
-
node.style.setProperty(Neo.decamel(key), val, important)
|
226
|
-
})
|
248
|
+
node.style.setProperty(Neo.decamel(key), val, important)
|
249
|
+
})
|
227
250
|
}
|
228
|
-
break
|
251
|
+
break
|
229
252
|
}
|
230
|
-
})
|
253
|
+
})
|
231
254
|
}
|
232
255
|
}
|
233
256
|
|
@@ -244,7 +267,7 @@ class DeltaUpdates extends Base {
|
|
244
267
|
startTag = `<!-- ${delta.id} -->`,
|
245
268
|
reg = new RegExp(startTag + '[\\s\\S]*?<!-- \/neo-vtext -->');
|
246
269
|
|
247
|
-
node.innerHTML = innerHTML.replace(reg, delta.value)
|
270
|
+
node.innerHTML = innerHTML.replace(reg, delta.value)
|
248
271
|
}
|
249
272
|
|
250
273
|
/**
|
@@ -254,7 +277,7 @@ class DeltaUpdates extends Base {
|
|
254
277
|
htmlStringToElement(html) {
|
255
278
|
const template = document.createElement('template');
|
256
279
|
template.innerHTML = html;
|
257
|
-
return template.content
|
280
|
+
return template.content
|
258
281
|
}
|
259
282
|
|
260
283
|
/**
|
@@ -267,7 +290,7 @@ class DeltaUpdates extends Base {
|
|
267
290
|
let me = this,
|
268
291
|
deltas = data.deltas,
|
269
292
|
i = 0,
|
270
|
-
len;
|
293
|
+
len, map;
|
271
294
|
|
272
295
|
deltas = Array.isArray(deltas) ? deltas : [deltas];
|
273
296
|
len = deltas.length;
|
@@ -275,14 +298,14 @@ class DeltaUpdates extends Base {
|
|
275
298
|
if (Neo.config.logDeltaUpdates && len > 0) {
|
276
299
|
me.countDeltas += len;
|
277
300
|
me.countUpdates++;
|
278
|
-
console.log('update ' + me.countUpdates, 'total deltas ', me.countDeltas, Neo.clone(data, true))
|
301
|
+
console.log('update ' + me.countUpdates, 'total deltas ', me.countDeltas, Neo.clone(data, true))
|
279
302
|
}
|
280
303
|
|
281
304
|
if (Neo.config.renderCountDeltas && len > 0) {
|
282
|
-
me.countDeltasPer250ms += len
|
305
|
+
me.countDeltasPer250ms += len
|
283
306
|
}
|
284
307
|
|
285
|
-
|
308
|
+
map = {
|
286
309
|
focusNode : me.du_focusNode,
|
287
310
|
insertNode : me.du_insertNode,
|
288
311
|
moveNode : me.du_moveNode,
|
@@ -294,14 +317,14 @@ class DeltaUpdates extends Base {
|
|
294
317
|
};
|
295
318
|
|
296
319
|
for (; i < len; i++) {
|
297
|
-
(map[deltas[i].action] || map['default']).call(me, deltas[i])
|
320
|
+
(map[deltas[i].action] || map['default']).call(me, deltas[i])
|
298
321
|
}
|
299
322
|
|
300
323
|
Neo.worker.Manager.sendMessage(data.origin || 'app', {
|
301
324
|
action : 'reply',
|
302
325
|
replyId: data.id,
|
303
326
|
success: true
|
304
|
-
})
|
327
|
+
})
|
305
328
|
}
|
306
329
|
}
|
307
330
|
|