neo.mjs 6.34.0 → 6.35.0

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.
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.34.0'
23
+ * @member {String} version='6.35.0'
24
24
  */
25
- version: '6.34.0'
25
+ version: '6.35.0'
26
26
  }
27
27
 
28
28
  /**
@@ -25,6 +25,12 @@ class List extends BaseList {
25
25
  * @member {String[]} baseCls=['portal-blog-list','neo-list']
26
26
  */
27
27
  baseCls: ['portal-blog-list', 'neo-list'],
28
+ /**
29
+ * Specify the amount of delayed observe() calls, in case the IntersectionObserver does not find targets.
30
+ * This can happen when moving the component inside the DOM (e.g. cube layout)
31
+ * @member {Number} intersectionObserverReconnects=5
32
+ */
33
+ intersectionObserverReconnects: 5,
28
34
  /**
29
35
  * Specify how many blog item images to preload when intersecting
30
36
  * @member {Number} preloadImages=5
@@ -88,18 +94,7 @@ class List extends BaseList {
88
94
  */
89
95
  afterSetMounted(value, oldValue) {
90
96
  super.afterSetMounted(value, oldValue);
91
-
92
- let me = this;
93
-
94
- value && me.timeout(50).then(() => {
95
- Neo.main.addon.IntersectionObserver.register({
96
- callback: 'isVisible',
97
- id : me.id,
98
- observe : ['.content'],
99
- root : `#${me.parentId}`,
100
- windowId: me.windowId
101
- })
102
- })
97
+ value && this.registerIntersectionObserver()
103
98
  }
104
99
 
105
100
  /**
@@ -243,6 +238,37 @@ class List extends BaseList {
243
238
 
244
239
  needsUpdate && me.update()
245
240
  }
241
+
242
+ /**
243
+ *
244
+ */
245
+ async registerIntersectionObserver() {
246
+ let me = this,
247
+ opts = {id: me.id, observe: ['.content'], windowId: me.windowId},
248
+ i = 0,
249
+ len = me.intersectionObserverReconnects,
250
+ data;
251
+
252
+ await me.timeout(50);
253
+
254
+ data = await Neo.main.addon.IntersectionObserver.register({
255
+ ...opts,
256
+ callback: 'isVisible',
257
+ root : `#${me.parentId}`
258
+ });
259
+
260
+ if (data.countTargets < 1) {
261
+ for (; i < len; i++) {
262
+ await me.timeout(100);
263
+
264
+ data = await Neo.main.addon.IntersectionObserver.observe(opts);
265
+
266
+ if (data.countTargets > 0) {
267
+ break
268
+ }
269
+ }
270
+ }
271
+ }
246
272
  }
247
273
 
248
274
  Neo.setupClass(List);
@@ -20,9 +20,9 @@ class ServiceWorker extends ServiceBase {
20
20
  */
21
21
  singleton: true,
22
22
  /**
23
- * @member {String} version='6.34.0'
23
+ * @member {String} version='6.35.0'
24
24
  */
25
- version: '6.34.0'
25
+ version: '6.35.0'
26
26
  }
27
27
 
28
28
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo.mjs",
3
- "version": "6.34.0",
3
+ "version": "6.35.0",
4
4
  "description": "The webworkers driven UI framework",
5
5
  "type": "module",
6
6
  "repository": {
@@ -53,7 +53,7 @@
53
53
  "fs-extra": "^11.2.0",
54
54
  "highlightjs-line-numbers.js": "^2.8.0",
55
55
  "inquirer": "^10.1.8",
56
- "marked": "^13.0.3",
56
+ "marked": "^14.0.0",
57
57
  "monaco-editor": "^0.50.0",
58
58
  "neo-jsdoc": "1.0.1",
59
59
  "neo-jsdoc-x": "1.0.5",
@@ -4,11 +4,4 @@
4
4
  flex-direction: column;
5
5
  }
6
6
  }
7
-
8
- @media (max-width: 600px) {
9
- .portal-content-wrapper {
10
- max-height: 46em;
11
- min-height: 46em;
12
- }
13
- }
14
7
  }
@@ -260,12 +260,12 @@ const DefaultConfig = {
260
260
  useVdomWorker: true,
261
261
  /**
262
262
  * buildScripts/injectPackageVersion.mjs will update this value
263
- * @default '6.34.0'
263
+ * @default '6.35.0'
264
264
  * @memberOf! module:Neo
265
265
  * @name config.version
266
266
  * @type String
267
267
  */
268
- version: '6.34.0'
268
+ version: '6.35.0'
269
269
  };
270
270
 
271
271
  Object.assign(DefaultConfig, {
@@ -275,9 +275,9 @@ class Base extends CoreBase {
275
275
  parentComponent_: null,
276
276
  /**
277
277
  * The parent component id or document.body
278
- * @member {String} parentId='document.body'
278
+ * @member {String} parentId_='document.body'
279
279
  */
280
- parentId: 'document.body',
280
+ parentId_: 'document.body',
281
281
  /**
282
282
  * Array of Plugin Modules and / or config objects
283
283
  * @member {Array|null} plugins_=null
@@ -102,11 +102,14 @@ class NeoIntersectionObserver extends Base {
102
102
  * @param {Boolean} [data.disconnect=false] true removes all currently observed targets
103
103
  * @param {String} data.id
104
104
  * @param {String|String[]} data.observe The querySelector to match elements
105
- * @returns {Boolean} true in case the targets got observed, false in case they got cached prior to a register() call
105
+ * @returns {Object} opts
106
+ * {Boolean} opts.cached : true in case the observer is not registered yet
107
+ * {Number} opts.countTargets: amount of found target nodes inside the DOM
106
108
  */
107
109
  observe(data) {
108
110
  let me = this,
109
111
  cache = me.cache,
112
+ cached = false,
110
113
  {id, observe} = data,
111
114
  observer = me.map[data.id],
112
115
  targets = [];
@@ -126,6 +129,8 @@ class NeoIntersectionObserver extends Base {
126
129
  observer.observe(target)
127
130
  })
128
131
  } else {
132
+ cached = true;
133
+
129
134
  if (!cache[id]) {
130
135
  cache[id] = []
131
136
  }
@@ -133,7 +138,10 @@ class NeoIntersectionObserver extends Base {
133
138
  cache[id].push(data);
134
139
  }
135
140
 
136
- return !!observer
141
+ return {
142
+ cached,
143
+ countTargets: targets.length
144
+ }
137
145
  }
138
146
 
139
147
  /**
@@ -144,11 +152,15 @@ class NeoIntersectionObserver extends Base {
144
152
  * @param {String} data.root
145
153
  * @param {String} data.rootMargin='0px'
146
154
  * @param {Number|Number[]} data.threshold=0.0
155
+ * @returns {Boolean}
156
+ * if data.observe is passed: true in case there is at least one found target node inside the DOM
157
+ * if data.observe is not passed: true
147
158
  */
148
159
  register(data) {
149
160
  let me = this,
150
161
  {cache} = me,
151
162
  {id, observe} = data,
163
+ returnValue = true,
152
164
  observer;
153
165
 
154
166
  me.map[id] = observer = new IntersectionObserver(me[data.callback].bind(me), {
@@ -159,12 +171,16 @@ class NeoIntersectionObserver extends Base {
159
171
 
160
172
  observer.rootId = data.id; // storing the component id
161
173
 
162
- observe && me.observe({id, observe});
174
+ if (observe) {
175
+ returnValue = me.observe({id, observe})
176
+ }
163
177
 
164
178
  if (cache[id]) {
165
179
  cache[id].forEach(item => me.observe(item));
166
180
  delete cache[id]
167
181
  }
182
+
183
+ return returnValue
168
184
  }
169
185
 
170
186
  /**