Skip to content

Commit e2f2192

Browse files
committed
Changed order in which setup will be called
1 parent 2da298c commit e2f2192

File tree

8 files changed

+50
-21
lines changed

8 files changed

+50
-21
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# JDOM `3.1.9`
1+
# JDOM `3.1.10`
22
## A wrapper for query selector and html elements + templating & reactivity framework
33

44
- [Installation or embedding](#install)
@@ -28,12 +28,12 @@ npm install jdomjs
2828

2929
### Module
3030
```js
31-
import { $, $n, $c, $r, $h, JDOM } from 'https://cdn.jsdelivr.net/npm/jdomjs@3.1.9'
31+
import { $, $n, $c, $r, $h, JDOM } from 'https://cdn.jsdelivr.net/npm/jdomjs@3.1.10'
3232
```
3333

3434
### HTML import
3535
```js
36-
<script src="https://cdn.jsdelivr.net/npm/jdom@3.1.9/dist/jdom.js"></script>
36+
<script src="https://cdn.jsdelivr.net/npm/jdom@3.1.10/dist/jdom.js"></script>
3737
```
3838

3939
## DOM Manipulation

dist/jdom.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/js-components/main.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { JDOMComponent, $, html, css, computed } from '../../index.js';
22
import Hook from "../../src/Hook.js";
33

4-
class ToDoApp extends JDOMComponent {
4+
class ToDoApp extends JDOMComponent.unshadowed {
55
tasks = new Hook([]);
66
newTaskText = new Hook('');
77

@@ -64,5 +64,7 @@ class ToDoApp extends JDOMComponent {
6464
}
6565
}
6666

67+
console.log(ToDoApp.unshadowed)
68+
6769
// Register custom element
6870
window.customElements.define('todo-app', ToDoApp);

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jdomjs",
3-
"version": "3.1.9",
3+
"version": "3.1.10",
44
"description": "A wrapper for query selector and html elements",
55
"main": "./index.js",
66
"types": "./types/index.d.ts",

src/JDOMComponent.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,4 +148,13 @@ export default class JDOMComponent extends HTMLElement {
148148
styles() {
149149
return undefined
150150
}
151+
152+
/**
153+
* @type {typeof JDOMComponent}
154+
*/
155+
static unshadowed = class JDOMUnshadowedComponent extends JDOMComponent {
156+
constructor(options = {}) {
157+
super({ shadowed: false, ...options })
158+
}
159+
}
151160
}

src/template/TemplateDOMAdapter.js

Lines changed: 28 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,12 @@ export default class TemplateDOMAdapter {
9191
Object.entries(value).forEach(([key, value]) => {
9292
if (value instanceof Hook) {
9393
const hook = value
94-
const listener = v => el.style[key] = v
95-
el.addEventListener(':detached', () => hook.removeListener(listener))
96-
el.addEventListener(':attached', () => hook.addListener(listener))
94+
const listener = v => elem.style[key] = v
95+
elem.addEventListener(':detached', () => hook.removeListener(listener))
96+
elem.addEventListener(':attached', () => {
97+
hook.addListener(listener)
98+
listener(hook.value)
99+
})
97100

98101
value = hook.value
99102
}
@@ -111,15 +114,21 @@ export default class TemplateDOMAdapter {
111114
Object.entries(value).forEach(([key, value]) => {
112115
if (value instanceof Hook) {
113116
const hook = value
117+
114118
const listener = v => {
115-
if (v && !el.classList.contains(key)) {
116-
el.classList.add(key)
117-
} else if (!v && el.classList.contains(key)) {
118-
el.classList.remove(key)
119+
if (v && !elem.classList.contains(key)) {
120+
elem.classList.add(key)
121+
} else if (!v && elem.classList.contains(key)) {
122+
elem.classList.remove(key)
119123
}
120124
}
121-
el.addEventListener(':detached', () => hook.removeListener(listener))
122-
el.addEventListener(':attached', () => hook.addListener(listener))
125+
elem.addEventListener(':detached', () => {
126+
hook.removeListener(listener)
127+
})
128+
elem.addEventListener(':attached', () => {
129+
hook.addListener(listener)
130+
listener(hook.value)
131+
})
123132
value = hook.value
124133
}
125134
if (value) {
@@ -311,12 +320,12 @@ export default class TemplateDOMAdapter {
311320
lastValue = value
312321

313322
if (value) {
314-
toRepl = this.replaceElement(toRepl, savedElement)
315-
el = savedElement
316323
if (!addedChildren) {
317-
setup(el)
324+
setup(savedElement)
318325
addedChildren = true
319326
}
327+
toRepl = this.replaceElement(toRepl, savedElement)
328+
el = savedElement
320329
} else {
321330
toRepl = this.replaceElement(toRepl, commentElement)
322331
el = commentElement
@@ -504,14 +513,19 @@ export default class TemplateDOMAdapter {
504513

505514
replElements.forEach(e => this.removeElement(e))
506515

516+
firstEl.dispatchEvent(new CustomEvent(':detached'))
517+
firstEndEl.dispatchEvent(new CustomEvent(':child_attached'))
518+
507519
let lastEl = firstEndEl
520+
firstEndEl.dispatchEvent(new CustomEvent(':attach'))
521+
508522
endElements.forEach(e => {
509523
lastEl = this.afterElement(lastEl, e)
510524
})
511525

526+
firstEndEl.dispatchEvent(new CustomEvent(':attached'))
527+
512528
firstEl.dispatchEvent(new CustomEvent(':replaced_with', { detail: { to: finalEndElements } }))
513-
firstEl.dispatchEvent(new CustomEvent(':detached'))
514-
firstEndEl.dispatchEvent(new CustomEvent(':child_attached'))
515529

516530
return finalEnd
517531
}

types/src/JDOMComponent.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
* @property {String|null|undefined} name
99
*/
1010
export default class JDOMComponent extends HTMLElement {
11+
/**
12+
* @type {typeof JDOMComponent}
13+
*/
14+
static unshadowed: typeof JDOMComponent;
1115
/** @param options */
1216
constructor(options?: {});
1317
/** @type {ShadowRoot|Node} */

0 commit comments

Comments
 (0)