neo.mjs 4.3.14 → 4.3.16

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "4.3.14",
3
+ "version": "4.3.16",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "homepage": "https://neomjs.github.io/pages/",
43
43
  "dependencies": {
44
- "@fortawesome/fontawesome-free": "^6.2.0",
44
+ "@fortawesome/fontawesome-free": "^6.2.1",
45
45
  "@material/mwc-button": "^0.27.0",
46
46
  "@material/mwc-textfield": "^0.27.0",
47
47
  "autoprefixer": "^10.4.13",
@@ -55,10 +55,10 @@
55
55
  "inquirer": "^9.1.4",
56
56
  "neo-jsdoc": "^1.0.1",
57
57
  "neo-jsdoc-x": "^1.0.4",
58
- "postcss": "^8.4.18",
59
- "sass": "^1.56.0",
60
- "webpack": "^5.74.0",
61
- "webpack-cli": "^4.10.0",
58
+ "postcss": "^8.4.19",
59
+ "sass": "^1.56.1",
60
+ "webpack": "^5.75.0",
61
+ "webpack-cli": "^5.0.0",
62
62
  "webpack-dev-server": "4.11.1",
63
63
  "webpack-hook-plugin": "^1.0.7",
64
64
  "webpack-node-externals": "^3.0.0"
@@ -447,12 +447,16 @@ class Base extends CoreBase {
447
447
 
448
448
  /**
449
449
  * Registers the domListeners inside the Neo.manager.DomEvent
450
- * @param {Array} value
451
- * @param {Array} oldValue
450
+ * @param {Object[]} value
451
+ * @param {Object[]} oldValue
452
452
  * @protected
453
453
  */
454
454
  afterSetDomListeners(value, oldValue) {
455
- DomEventManager.updateDomListeners(this, value, oldValue);
455
+ let me = this;
456
+
457
+ me.getController()?.parseDomListeners(me);
458
+
459
+ DomEventManager.updateDomListeners(me, value, oldValue);
456
460
  }
457
461
 
458
462
  /**
@@ -20,7 +20,7 @@ class Component extends Base {
20
20
  */
21
21
  ntype: 'component-controller',
22
22
  /**
23
- * @member {Object} component=null
23
+ * @member {Neo.component.Base|null} component=null
24
24
  * @protected
25
25
  */
26
26
  component: null,
@@ -135,49 +135,13 @@ class Component extends Base {
135
135
  onComponentConstructed() {}
136
136
 
137
137
  /**
138
- * @param {Neo.component.Base} [component=this.component]
138
+ * @param {Neo.component.Base} component=this.component
139
139
  */
140
140
  parseConfig(component=this.component) {
141
- let me = this,
142
- domListeners = component.domListeners,
143
- listeners = component.listeners,
144
- reference = component.reference,
145
- eventHandler, fn, handlerScope, parentController;
146
-
147
- if (domListeners) {
148
- domListeners.forEach(domListener => {
149
- Object.entries(domListener).forEach(([key, value]) => {
150
- eventHandler = null;
151
-
152
- if (key !== 'scope' && key !== 'delegate') {
153
- if (Neo.isString(value)) {
154
- eventHandler = value;
155
- } else if (Neo.isObject(value) && value.hasOwnProperty('fn') && Neo.isString(value.fn)) {
156
- eventHandler = value.fn;
157
- }
158
-
159
- if (eventHandler) {
160
- handlerScope = me.getHandlerScope(eventHandler);
161
-
162
- if (!handlerScope) {
163
- Logger.logError('Unknown domEvent handler for', eventHandler, component);
164
- } else {
165
- fn = handlerScope[eventHandler].bind(handlerScope);
166
- domListener[key] = fn;
167
-
168
- DomEventManager.updateListenerPlaceholder({
169
- componentId : component.id,
170
- eventHandlerMethod: fn,
171
- eventHandlerName : eventHandler,
172
- eventName : key,
173
- scope : parentController
174
- });
175
- }
176
- }
177
- }
178
- });
179
- });
180
- }
141
+ let me = this,
142
+ listeners = component.listeners,
143
+ reference = component.reference,
144
+ eventHandler, handlerScope;
181
145
 
182
146
  if (listeners) {
183
147
  Object.entries(listeners).forEach(([key, value]) => {
@@ -215,6 +179,41 @@ class Component extends Base {
215
179
  }
216
180
  }
217
181
 
182
+ /**
183
+ * @param {Neo.component.Base} component=this.component
184
+ */
185
+ parseDomListeners(component=this.component) {
186
+ let me = this,
187
+ domListeners = component.domListeners,
188
+ eventHandler, scope;
189
+
190
+ if (domListeners) {
191
+ domListeners.forEach(domListener => {
192
+ Object.entries(domListener).forEach(([key, value]) => {
193
+ eventHandler = null;
194
+
195
+ if (key !== 'scope' && key !== 'delegate') {
196
+ if (Neo.isString(value)) {
197
+ eventHandler = value;
198
+ } else if (Neo.isObject(value) && value.hasOwnProperty('fn') && Neo.isString(value.fn)) {
199
+ eventHandler = value.fn;
200
+ }
201
+
202
+ if (eventHandler) {
203
+ scope = me.getHandlerScope(eventHandler);
204
+
205
+ if (!scope) {
206
+ Logger.logError('Unknown domEvent handler for', eventHandler, component);
207
+ } else {
208
+ domListener[key] = scope[eventHandler].bind(scope);
209
+ }
210
+ }
211
+ }
212
+ });
213
+ });
214
+ }
215
+ }
216
+
218
217
  /**
219
218
  * Will get called by component.Base: destroy() in case the component has a reference config
220
219
  * @param {Neo.component.Base} component
package/src/core/Base.mjs CHANGED
@@ -299,7 +299,8 @@ class Base {
299
299
  * @param {Object|Object[]} items
300
300
  */
301
301
  parseItemConfigs(items) {
302
- let me = this;
302
+ let me = this,
303
+ ns, nsArray, nsKey, symbolNs;
303
304
 
304
305
  if (items) {
305
306
  if (!Array.isArray(items)) {
@@ -311,14 +312,22 @@ class Base {
311
312
  if (Array.isArray(value)) {
312
313
  me.parseItemConfigs(value);
313
314
  } else if (typeof value === 'string' && value.startsWith('@config:')) {
314
- value = value.substr(8).trim();
315
+ nsArray = value.substring(8).trim().split('.');
316
+ nsKey = nsArray.pop();
317
+ ns = Neo.ns(nsArray, false, me);
315
318
 
316
- if (!me[value] && !me.hasOwnProperty(value)) {
317
- console.error('The used @config does not exist:', value, me);
319
+ if (!Object.hasOwn(ns, nsKey)) {
320
+ console.error('The used @config does not exist:', nsKey, nsArray.join('.'));
318
321
  } else {
322
+ symbolNs = Neo.ns(nsArray, false, me[configSymbol]);
323
+
319
324
  // The config might not be processed yet, especially for configs
320
325
  // not ending with an underscore, so we need to check the configSymbol first.
321
- item[key] = me[configSymbol][value] || me[value];
326
+ if (symbolNs && Object.hasOwn(symbolNs, nsKey)) {
327
+ item[key] = symbolNs[nsKey];
328
+ } else {
329
+ item[key] = ns[nsKey];
330
+ }
322
331
  }
323
332
  }
324
333
  });
@@ -306,6 +306,7 @@ class RecordFactory extends Base {
306
306
 
307
307
  if (!Neo.isEqual(oldValue, value)) {
308
308
  record[Symbol.for(key)] = value; // silent update
309
+ record._isModified = true;
309
310
  changedFields.push({name: key, oldValue, value});
310
311
  }
311
312
  });
@@ -405,34 +405,6 @@ class DomEvent extends Base {
405
405
  }
406
406
  }
407
407
 
408
- /**
409
- * Intended for Neo.controller.Component to replace listener placeholders provided as a string
410
- * @param {Object} config
411
- * @param {String} config.componentId
412
- * @param {Function} config.eventHandlerMethod
413
- * @param {String} config.eventHandlerName
414
- * @param {String} config.eventName
415
- * @param {Neo.core.Base} config.scope
416
- */
417
- updateListenerPlaceholder(config) {
418
- let me = this,
419
- items = me.items[config.componentId] || {},
420
- eventListeners = items[config.eventName] || [],
421
- i = 0,
422
- len = eventListeners.length,
423
- listener;
424
-
425
- for (; i < len; i++) {
426
- listener = eventListeners[i];
427
-
428
- if (listener.fn === config.eventHandlerName) {
429
- listener.fn = config.eventHandlerMethod;
430
- listener.scope = config.scope;
431
- break;
432
- }
433
- }
434
- }
435
-
436
408
  /**
437
409
  * @param {Object} listener
438
410
  * @param {Array} path