nanosplash 3.0.1 → 3.0.2

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.
Files changed (66) hide show
  1. package/.github/workflows/ci.yml +50 -44
  2. package/.github/workflows/vitepress.yml +69 -0
  3. package/.prettierignore +1 -0
  4. package/.prettierrc +10 -10
  5. package/README.md +11 -172
  6. package/bun.lockb +0 -0
  7. package/coverage/{core/Dom.ts.html → DomUtilities.ts.html} +141 -138
  8. package/coverage/{core/Service.ts.html → Service.ts.html} +250 -322
  9. package/coverage/{core/Splash.ts.html → Splash.ts.html} +145 -154
  10. package/coverage/SplashQueue.ts.html +232 -0
  11. package/coverage/clover.xml +557 -552
  12. package/coverage/coverage-final.json +5 -9043
  13. package/coverage/index.html +53 -23
  14. package/dist/cjs/ns.cjs +2 -0
  15. package/dist/es/ns.js +342 -0
  16. package/dist/iife/ns.iife.js +2 -0
  17. package/docs/.vitepress/config.ts +75 -0
  18. package/docs/.vitepress/theme/css/style.css +157 -0
  19. package/docs/.vitepress/theme/index.ts +16 -0
  20. package/docs/.vitepress/theme/vue/Card.vue +31 -0
  21. package/docs/.vitepress/theme/vue/CardGrid.vue +17 -0
  22. package/docs/.vitepress/theme/vue/Exe.vue +86 -0
  23. package/docs/.vitepress/theme/vue/PlayGround.vue +50 -0
  24. package/docs/api/doc/hide.md +69 -0
  25. package/docs/api/doc/show.md +47 -0
  26. package/docs/api/start/features.md +17 -0
  27. package/docs/api/start/install.md +53 -0
  28. package/docs/api/start/playground.md +11 -0
  29. package/docs/api/start/usage.md +25 -0
  30. package/docs/index.md +30 -0
  31. package/package.json +86 -87
  32. package/src/style/ns.sass +95 -0
  33. package/src/ts/core/{Dom.ts → DomUtilities.ts} +58 -57
  34. package/src/ts/core/Service.ts +66 -90
  35. package/src/ts/core/ServiceInterface.ts +5 -7
  36. package/src/ts/core/Splash.ts +23 -26
  37. package/src/ts/core/SplashInterface.ts +12 -20
  38. package/src/ts/core/SplashQueue.ts +49 -0
  39. package/src/ts/types/Types.ts +0 -9
  40. package/tests/{Dom.spec.ts → DomUtilities.spec.ts} +13 -23
  41. package/tests/Guid.spec.ts +3 -3
  42. package/tests/Service.spec.ts +146 -67
  43. package/tests/Splash.spec.ts +26 -26
  44. package/tests/TestUtilities.ts +48 -0
  45. package/tsconfig.json +1 -0
  46. package/vite.config.ts +1 -15
  47. package/coverage/core/index.html +0 -146
  48. package/coverage/types/Types.ts.html +0 -121
  49. package/coverage/types/index.html +0 -116
  50. package/dist/latest/cjs/ns.cjs +0 -1
  51. package/dist/latest/cjs/style.css +0 -1
  52. package/dist/latest/es/ns.js +0 -306
  53. package/dist/latest/es/style.css +0 -1
  54. package/dist/latest/iife/ns.iife.js +0 -4
  55. package/dist/versioned/3.0.1/cjs/ns.cjs +0 -1
  56. package/dist/versioned/3.0.1/cjs/style.css +0 -1
  57. package/dist/versioned/3.0.1/es/ns.js +0 -306
  58. package/dist/versioned/3.0.1/es/style.css +0 -1
  59. package/dist/versioned/3.0.1/iife/ns.iife.js +0 -2
  60. package/docs/index.6d66a821.js +0 -1
  61. package/docs/index.74dbd99e.css +0 -1
  62. package/docs/index.f34144dc.js +0 -1
  63. package/docs/index.html +0 -107
  64. package/index.html +0 -105
  65. package/src/sass/ns.sass +0 -95
  66. package/vite.demo.config.ts +0 -16
@@ -3,15 +3,15 @@
3
3
  <html lang="en">
4
4
 
5
5
  <head>
6
- <title>Code coverage report for core/Dom.ts</title>
6
+ <title>Code coverage report for DomUtilities.ts</title>
7
7
  <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
11
  <meta name="viewport" content="width=device-width, initial-scale=1" />
12
12
  <style type='text/css'>
13
13
  .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
14
+ background-image: url(sort-arrow-sprite.png);
15
15
  }
16
16
  </style>
17
17
  </head>
@@ -19,34 +19,34 @@
19
19
  <body>
20
20
  <div class='wrapper'>
21
21
  <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">core</a> Dom.ts</h1>
22
+ <h1><a href="index.html">All files</a> DomUtilities.ts</h1>
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">100% </span>
26
+ <span class="strong">96.89% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>160/160</span>
28
+ <span class='fraction'>156/161</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">86.36% </span>
33
+ <span class="strong">78.26% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>19/22</span>
35
+ <span class='fraction'>18/23</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>11/11</span>
42
+ <span class='fraction'>10/10</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">100% </span>
47
+ <span class="strong">96.89% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>160/160</span>
49
+ <span class='fraction'>156/161</span>
50
50
  </div>
51
51
 
52
52
 
@@ -223,7 +223,8 @@
223
223
  <a name='L158'></a><a href='#L158'>158</a>
224
224
  <a name='L159'></a><a href='#L159'>159</a>
225
225
  <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
227
228
  <span class="cline-any cline-yes">1x</span>
228
229
  <span class="cline-any cline-yes">1x</span>
229
230
  <span class="cline-any cline-yes">1x</span>
@@ -241,17 +242,22 @@
241
242
  <span class="cline-any cline-yes">1x</span>
242
243
  <span class="cline-any cline-yes">1x</span>
243
244
  <span class="cline-any cline-yes">1x</span>
245
+ <span class="cline-any cline-yes">28x</span>
246
+ <span class="cline-any cline-yes">28x</span>
247
+ <span class="cline-any cline-yes">28x</span>
248
+ <span class="cline-any cline-yes">28x</span>
249
+ <span class="cline-any cline-yes">28x</span>
250
+ <span class="cline-any cline-yes">28x</span>
244
251
  <span class="cline-any cline-yes">1x</span>
245
- <span class="cline-any cline-yes">23x</span>
246
- <span class="cline-any cline-yes">23x</span>
247
- <span class="cline-any cline-yes">23x</span>
248
- <span class="cline-any cline-yes">23x</span>
249
- <span class="cline-any cline-yes">23x</span>
250
252
  <span class="cline-any cline-yes">1x</span>
251
253
  <span class="cline-any cline-yes">1x</span>
252
254
  <span class="cline-any cline-yes">1x</span>
253
255
  <span class="cline-any cline-yes">1x</span>
254
256
  <span class="cline-any cline-yes">1x</span>
257
+ <span class="cline-any cline-yes">25x</span>
258
+ <span class="cline-any cline-yes">25x</span>
259
+ <span class="cline-any cline-yes">25x</span>
260
+ <span class="cline-any cline-yes">25x</span>
255
261
  <span class="cline-any cline-yes">1x</span>
256
262
  <span class="cline-any cline-yes">1x</span>
257
263
  <span class="cline-any cline-yes">1x</span>
@@ -259,20 +265,21 @@
259
265
  <span class="cline-any cline-yes">1x</span>
260
266
  <span class="cline-any cline-yes">1x</span>
261
267
  <span class="cline-any cline-yes">1x</span>
262
- <span class="cline-any cline-yes">13x</span>
263
- <span class="cline-any cline-yes">13x</span>
264
- <span class="cline-any cline-yes">13x</span>
265
- <span class="cline-any cline-yes">13x</span>
266
- <span class="cline-any cline-yes">13x</span>
267
268
  <span class="cline-any cline-yes">1x</span>
268
- <span class="cline-any cline-yes">13x</span>
269
- <span class="cline-any cline-yes">12x</span>
270
- <span class="cline-any cline-yes">12x</span>
271
- <span class="cline-any cline-yes">13x</span>
272
269
  <span class="cline-any cline-yes">1x</span>
273
270
  <span class="cline-any cline-yes">1x</span>
274
271
  <span class="cline-any cline-yes">1x</span>
275
272
  <span class="cline-any cline-yes">1x</span>
273
+ <span class="cline-any cline-yes">21x</span>
274
+ <span class="cline-any cline-yes">21x</span>
275
+ <span class="cline-any cline-yes">21x</span>
276
+ <span class="cline-any cline-yes">21x</span>
277
+ <span class="cline-any cline-yes">21x</span>
278
+ <span class="cline-any cline-yes">6x</span>
279
+ <span class="cline-any cline-yes">21x</span>
280
+ <span class="cline-any cline-yes">15x</span>
281
+ <span class="cline-any cline-yes">15x</span>
282
+ <span class="cline-any cline-yes">21x</span>
276
283
  <span class="cline-any cline-yes">1x</span>
277
284
  <span class="cline-any cline-yes">1x</span>
278
285
  <span class="cline-any cline-yes">1x</span>
@@ -280,13 +287,10 @@
280
287
  <span class="cline-any cline-yes">1x</span>
281
288
  <span class="cline-any cline-yes">1x</span>
282
289
  <span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-yes">35x</span>
284
- <span class="cline-any cline-yes">35x</span>
285
- <span class="cline-any cline-yes">35x</span>
286
- <span class="cline-any cline-yes">35x</span>
287
- <span class="cline-any cline-yes">35x</span>
288
290
  <span class="cline-any cline-yes">1x</span>
289
291
  <span class="cline-any cline-yes">1x</span>
292
+ <span class="cline-any cline-yes">21x</span>
293
+ <span class="cline-any cline-yes">21x</span>
290
294
  <span class="cline-any cline-yes">1x</span>
291
295
  <span class="cline-any cline-yes">1x</span>
292
296
  <span class="cline-any cline-yes">1x</span>
@@ -296,6 +300,8 @@
296
300
  <span class="cline-any cline-yes">1x</span>
297
301
  <span class="cline-any cline-yes">1x</span>
298
302
  <span class="cline-any cline-yes">1x</span>
303
+ <span class="cline-any cline-yes">32x</span>
304
+ <span class="cline-any cline-yes">32x</span>
299
305
  <span class="cline-any cline-yes">1x</span>
300
306
  <span class="cline-any cline-yes">1x</span>
301
307
  <span class="cline-any cline-yes">1x</span>
@@ -303,9 +309,9 @@
303
309
  <span class="cline-any cline-yes">1x</span>
304
310
  <span class="cline-any cline-yes">1x</span>
305
311
  <span class="cline-any cline-yes">1x</span>
306
- <span class="cline-any cline-yes">10x</span>
307
- <span class="cline-any cline-yes">10x</span>
308
312
  <span class="cline-any cline-yes">1x</span>
313
+ <span class="cline-any cline-yes">17x</span>
314
+ <span class="cline-any cline-yes">17x</span>
309
315
  <span class="cline-any cline-yes">1x</span>
310
316
  <span class="cline-any cline-yes">1x</span>
311
317
  <span class="cline-any cline-yes">1x</span>
@@ -313,18 +319,10 @@
313
319
  <span class="cline-any cline-yes">1x</span>
314
320
  <span class="cline-any cline-yes">1x</span>
315
321
  <span class="cline-any cline-yes">1x</span>
316
- <span class="cline-any cline-yes">11x</span>
317
- <span class="cline-any cline-yes">11x</span>
318
- <span class="cline-any cline-yes">1x</span>
319
- <span class="cline-any cline-yes">1x</span>
320
- <span class="cline-any cline-yes">1x</span>
321
- <span class="cline-any cline-yes">1x</span>
322
- <span class="cline-any cline-yes">1x</span>
323
- <span class="cline-any cline-yes">1x</span>
324
322
  <span class="cline-any cline-yes">1x</span>
323
+ <span class="cline-any cline-yes">21x</span>
324
+ <span class="cline-any cline-yes">21x</span>
325
325
  <span class="cline-any cline-yes">1x</span>
326
- <span class="cline-any cline-yes">16x</span>
327
- <span class="cline-any cline-yes">16x</span>
328
326
  <span class="cline-any cline-yes">1x</span>
329
327
  <span class="cline-any cline-yes">1x</span>
330
328
  <span class="cline-any cline-yes">1x</span>
@@ -335,20 +333,22 @@
335
333
  <span class="cline-any cline-yes">1x</span>
336
334
  <span class="cline-any cline-yes">1x</span>
337
335
  <span class="cline-any cline-yes">1x</span>
338
- <span class="cline-any cline-yes">1x</span>
339
- <span class="cline-any cline-yes">14x</span>
340
- <span class="cline-any cline-yes">14x</span>
341
- <span class="cline-any cline-yes">1x</span>
342
- <span class="cline-any cline-yes">1x</span>
343
- <span class="cline-any cline-yes">1x</span>
344
- <span class="cline-any cline-yes">1x</span>
345
- <span class="cline-any cline-yes">1x</span>
346
- <span class="cline-any cline-yes">1x</span>
347
- <span class="cline-any cline-yes">1x</span>
348
- <span class="cline-any cline-yes">1x</span>
349
- <span class="cline-any cline-yes">1x</span>
350
- <span class="cline-any cline-yes">4x</span>
351
- <span class="cline-any cline-yes">4x</span>
336
+ <span class="cline-any cline-yes">23x</span>
337
+ <span class="cline-any cline-yes">23x</span>
338
+ <span class="cline-any cline-yes">11x</span>
339
+ <span class="cline-any cline-yes">11x</span>
340
+ <span class="cline-any cline-yes">11x</span>
341
+ <span class="cline-any cline-yes">11x</span>
342
+ <span class="cline-any cline-yes">11x</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
346
+ <span class="cline-any cline-yes">23x</span>
347
+ <span class="cline-any cline-yes">12x</span>
348
+ <span class="cline-any cline-yes">23x</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-yes">23x</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
352
  <span class="cline-any cline-yes">1x</span>
353
353
  <span class="cline-any cline-yes">1x</span>
354
354
  <span class="cline-any cline-yes">1x</span>
@@ -357,12 +357,12 @@
357
357
  <span class="cline-any cline-yes">1x</span>
358
358
  <span class="cline-any cline-yes">1x</span>
359
359
  <span class="cline-any cline-yes">1x</span>
360
- <span class="cline-any cline-yes">11x</span>
361
- <span class="cline-any cline-yes">11x</span>
362
- <span class="cline-any cline-yes">11x</span>
363
- <span class="cline-any cline-yes">11x</span>
364
- <span class="cline-any cline-yes">11x</span>
365
- <span class="cline-any cline-yes">11x</span>
360
+ <span class="cline-any cline-yes">19x</span>
361
+ <span class="cline-any cline-yes">19x</span>
362
+ <span class="cline-any cline-yes">19x</span>
363
+ <span class="cline-any cline-yes">19x</span>
364
+ <span class="cline-any cline-yes">19x</span>
365
+ <span class="cline-any cline-yes">19x</span>
366
366
  <span class="cline-any cline-yes">1x</span>
367
367
  <span class="cline-any cline-yes">1x</span>
368
368
  <span class="cline-any cline-yes">1x</span>
@@ -372,20 +372,20 @@
372
372
  <span class="cline-any cline-yes">1x</span>
373
373
  <span class="cline-any cline-yes">1x</span>
374
374
  <span class="cline-any cline-yes">1x</span>
375
- <span class="cline-any cline-yes">13x</span>
376
- <span class="cline-any cline-yes">13x</span>
377
- <span class="cline-any cline-yes">13x</span>
378
- <span class="cline-any cline-yes">13x</span>
379
- <span class="cline-any cline-yes">2x</span>
380
- <span class="cline-any cline-yes">2x</span>
381
- <span class="cline-any cline-yes">2x</span>
382
- <span class="cline-any cline-yes">2x</span>
383
- <span class="cline-any cline-yes">11x</span>
384
- <span class="cline-any cline-yes">11x</span>
385
- <span class="cline-any cline-yes">11x</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">// @ts-strict
387
- &nbsp;
388
- import { Reference, GUIDString, ClassListAction } from '../types/Types'
375
+ <span class="cline-any cline-yes">20x</span>
376
+ <span class="cline-any cline-yes">20x</span>
377
+ <span class="cline-any cline-yes">20x</span>
378
+ <span class="cline-any cline-yes">20x</span>
379
+ <span class="cline-any cline-yes">20x</span>
380
+ <span class="cline-any cline-yes">7x</span>
381
+ <span class="cline-any cline-yes">7x</span>
382
+ <span class="cline-any cline-yes">7x</span>
383
+ <span class="cline-any cline-yes">7x</span>
384
+ <span class="cline-any cline-yes">7x</span>
385
+ <span class="cline-any cline-yes">7x</span>
386
+ <span class="cline-any cline-yes">20x</span>
387
+ <span class="cline-any cline-yes">20x</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Reference } from '../types/Types'
389
389
  import { Service } from './Service'
390
390
  import { Splash } from './Splash'
391
391
  &nbsp;
@@ -397,15 +397,27 @@ import { Splash } from './Splash'
397
397
  * @author Isak K. Hauge &lt;isakhauge@icloud.com&gt;
398
398
  */
399
399
  &nbsp;
400
+ /**
401
+ * # Render
402
+ * @param html HTML string to render.
403
+ * @returns Rendered HTML element.
404
+ */
405
+ export function render(html: string): HTMLElement {
406
+ return (div =&gt;
407
+ // @ts-ignore
408
+ (() =&gt; div.firstChild as HTMLElement)((div.innerHTML = html)))(
409
+ document.createElement('div')
410
+ )
411
+ }
412
+ &nbsp;
400
413
  /**
401
414
  * # Create Element
402
415
  * Return the main Nanosplash element.
403
416
  */
404
417
  export function createElement(): HTMLDivElement {
405
- return new DOMParser().parseFromString(
406
- '&lt;div class=ns&gt;&lt;div class=nsc&gt;&lt;div class=nst&gt;&lt;/div&gt;&lt;div class=nss&gt;&lt;svg viewBox="0 0 50 50"&gt;&lt;circle class=path cx=25 cy=25 r=20 fill=none&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;',
407
- 'text/html'
408
- ).body.firstChild as HTMLDivElement
418
+ return render(
419
+ '&lt;div class=ns&gt;&lt;div class=nsc&gt;&lt;div class=nst&gt;&lt;/div&gt;&lt;div class=nss&gt;&lt;svg viewBox="0 0 50 50"&gt;&lt;circle class=path cx=25 cy=25 r=20 fill=none&gt;&lt;/circle&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;'
420
+ ) as HTMLDivElement
409
421
  }
410
422
  &nbsp;
411
423
  /**
@@ -431,39 +443,25 @@ export function injectAsFirstChild(
431
443
  }
432
444
  &nbsp;
433
445
  /**
434
- * # Set NS Host Class
435
- * Add or remove the `nsHostClassName` class to the `element`.
436
- * @param element Element to which the `nsHostClassName` class will be added or removed.
437
- * @param action Action to perform ('add' or 'remove').
446
+ * # Add NS Host Class
447
+ * Add the `nsHostClassName` class to the `element`.
448
+ * @param element Element to which the `nsHostClassName` class will be added.
438
449
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
439
450
  * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/add
440
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove
441
- */
442
- export function setNSHostClass(
443
- element: Element | null,
444
- action: ClassListAction
445
- ): void {
446
- element?.classList[action](Splash.NSHostClass)
447
- }
448
- &nbsp;
449
- /**
450
- * # Prepare Parent Of
451
- * Add the `nsHostClassName` class to the parent of the `ns` element.
452
- * @param ns Nanosplash instance.
453
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/parentElement
454
451
  */
455
- export function prepareParentOf(ns: Splash): void {
456
- setNSHostClass(ns.getNSElement().parentElement, ClassListAction.Add)
452
+ export function addNSHostClass(element: Element | null): void {
453
+ element?.classList.add(Splash.NSHostClass)
457
454
  }
458
455
  &nbsp;
459
456
  /**
460
- * # Clean NS Parent Of
461
- * Remove the `nsHostClassName` class from the parent of the `ns` element.
462
- * @param ns Nanosplash instance.
463
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/parentElement
457
+ * # Remove NS Host Class
458
+ * Remove the `nsHostClassName` class from the `element`.
459
+ * @param element Element from which the `nsHostClassName` class will be removed.
460
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/classList
461
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/remove
464
462
  */
465
- export function cleanNSParentOf(ns: Splash): void {
466
- setNSHostClass(ns.getNSElement().parentElement, ClassListAction.Remove)
463
+ export function removeNSHostClass(element: Element | null): void {
464
+ element?.classList.remove(Splash.NSHostClass)
467
465
  }
468
466
  &nbsp;
469
467
  /**
@@ -496,19 +494,22 @@ export function hideElement(element: HTMLElement): void {
496
494
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Node
497
495
  */
498
496
  export function elementFrom(ref: Reference): Element | null {
499
- return ref instanceof Element ? ref : document.querySelector(<span class="branch-0 cbranch-no" title="branch not covered" >ref || '')</span>
500
- }
501
- &nbsp;
502
- /**
503
- * # Element Is NS
504
- * Check if the element is a Nanosplash element.
505
- * This is determined by the presence of the `ns` class on the element.
506
- * @param element Element to check.
507
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMTokenList/contains
508
- */
509
- export function elementIsNS(element: Element): boolean {
510
- return element?.classList?.contains(Splash.NSClass<span class="branch-0 cbranch-no" title="branch not covered" >) ?? false</span>
511
- }
497
+ switch (typeof ref) {
498
+ case 'object':
499
+ const isBody = ref === document.body
500
+ const isElement = ref instanceof Element
501
+ if (isBody || isElement) {
502
+ return ref
503
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
504
+ <span class="cstat-no" title="statement not covered" > throw new Error(</span>
505
+ <span class="cstat-no" title="statement not covered" > 'Reference is an object but not an Element instance.'</span>
506
+ <span class="cstat-no" title="statement not covered" > )</span>
507
+ case 'string':
508
+ return document.querySelector(ref)
509
+ <span class="branch-0 cbranch-no" title="branch not covered" > default:</span>
510
+ <span class="cstat-no" title="statement not covered" > throw new Error('Reference is not an object or a string.')</span>
511
+ <span class="branch-0 cbranch-no" title="branch not covered" > }</span>
512
+ <span class="cstat-no" title="statement not covered" >}</span>
512
513
  &nbsp;
513
514
  /**
514
515
  * # Move
@@ -518,9 +519,9 @@ export function elementIsNS(element: Element): boolean {
518
519
  */
519
520
  export function move(element: Element, targetElement: Element): void {
520
521
  // Clean the current NS host element.
521
- setNSHostClass(element.parentElement, ClassListAction.Remove)
522
+ removeNSHostClass(element.parentElement)
522
523
  // Assign new NS host element.
523
- setNSHostClass(targetElement, ClassListAction.Add)
524
+ addNSHostClass(targetElement)
524
525
  injectAsFirstChild(element, targetElement)
525
526
  }
526
527
  &nbsp;
@@ -531,17 +532,19 @@ export function move(element: Element, targetElement: Element): void {
531
532
  * @returns { Nanosplash | null } Nanosplash instance or null.
532
533
  * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/firstElementChild
533
534
  */
534
- export function getRecycledNS(targetElement: Element): Splash | null {
535
- const firstChild = targetElement.firstElementChild
536
- const hasChild = firstChild !== null
537
- const targetAlreadyHasNS = hasChild &amp;&amp; elementIsNS(firstChild)
538
- if (targetAlreadyHasNS) {
539
- const id: GUIDString = firstChild.id
540
- const nss = Service.getInstance()
541
- return nss.nsStack.find((ns: Splash) =&gt; ns.getId() === id<span class="branch-0 cbranch-no" title="branch not covered" >) ?? null</span>
535
+ export function getRecycledSplash(targetElement: Element): Splash | null {
536
+ const children = Array.from(targetElement.<span class="branch-0 cbranch-no" title="branch not covered" >children || [])</span>
537
+ const nss = Service.getInstance()
538
+ let splash: Splash | null = null
539
+ const n = children.length
540
+ for (let i = 0; i &lt; n; i++) {
541
+ const child = children[i]
542
+ if (child.classList.contains(Splash.NSClass)) {
543
+ splash = nss.nsQueue.get(child.id<span class="branch-0 cbranch-no" title="branch not covered" >) ?? null</span>
544
+ break
545
+ }
542
546
  }
543
- &nbsp;
544
- return null
547
+ return splash
545
548
  }
546
549
  &nbsp;</pre></td></tr></table></pre>
547
550
 
@@ -550,16 +553,16 @@ export function getRecycledNS(targetElement: Element): Splash | null {
550
553
  <div class='footer quiet pad2 space-top1 center small'>
551
554
  Code coverage generated by
552
555
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
553
- at 2023-09-06T08:51:33.390Z
556
+ at 2023-10-19T21:38:28.926Z
554
557
  </div>
555
- <script src="../prettify.js"></script>
558
+ <script src="prettify.js"></script>
556
559
  <script>
557
560
  window.onload = function () {
558
561
  prettyPrint();
559
562
  };
560
563
  </script>
561
- <script src="../sorter.js"></script>
562
- <script src="../block-navigation.js"></script>
564
+ <script src="sorter.js"></script>
565
+ <script src="block-navigation.js"></script>
563
566
  </body>
564
567
  </html>
565
568