Compare commits
4 commits
d457c386e0
...
bbbdf0a194
Author | SHA1 | Date | |
---|---|---|---|
bbbdf0a194 | |||
cc7fcaf1c9 | |||
2e0d62b9d1 | |||
21edfa3b81 |
2 changed files with 12 additions and 9 deletions
|
@ -1,7 +1,8 @@
|
|||
<script type="importmap">
|
||||
{
|
||||
"imports": {
|
||||
"nyooom/render": "./render.js"
|
||||
"nyooom/render": "./render.js",
|
||||
"nyooom/observable": "./observable.js"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
|
|
@ -224,7 +224,7 @@ export class ObservableObject extends Observable {
|
|||
const handler = () => ref.deref()?.emit(prop, observable, observable, {observable: true})
|
||||
|
||||
handlers.set(prop, handler)
|
||||
observable.addEventListener("change", handler, {signal: this.signal})
|
||||
observable.addEventListener("changed", handler, {signal: this.signal})
|
||||
}
|
||||
|
||||
/** Undoes the adoption of a nested observable, cancelling the associated event hook
|
||||
|
@ -234,7 +234,7 @@ export class ObservableObject extends Observable {
|
|||
disown(prop, observable) {
|
||||
const handlers = this.#nested.get(observable)
|
||||
const handler = handlers.get(prop)
|
||||
observable.removeEventListener("change", handler)
|
||||
observable.removeEventListener("changed", handler)
|
||||
handlers.delete(prop)
|
||||
if (handlers.size == 0) {
|
||||
this.#nested.delete(observable)
|
||||
|
@ -264,7 +264,7 @@ export class ObservableValue extends Observable {
|
|||
/**
|
||||
* @param {(value: any) => any} func
|
||||
*/
|
||||
compose(func) {
|
||||
transform(func) {
|
||||
return new Composition(func, {}, this)
|
||||
}
|
||||
|
||||
|
@ -286,7 +286,7 @@ class ProxiedObservableValue extends ObservableValue {
|
|||
this.#prop = prop
|
||||
|
||||
const ref = this.ref
|
||||
backend.addEventListener("synchronous", event => {
|
||||
backend.addEventListener("change", event => {
|
||||
const {property, from, to, ...rest} = event.change
|
||||
if (property == this.#prop) {
|
||||
ref.deref()?.enqueue({
|
||||
|
@ -323,7 +323,8 @@ export const component = (name, generator, methods) => {
|
|||
generator = name
|
||||
name = camelToKebab(generator.name)
|
||||
}
|
||||
component[kebabToCamel(name)] = class extends HTMLElement{
|
||||
const jsName = kebabToCamel(name)
|
||||
component[jsName] = class extends HTMLElement{
|
||||
/** @type {ObservableObject} */
|
||||
state
|
||||
|
||||
|
@ -344,11 +345,12 @@ export const component = (name, generator, methods) => {
|
|||
if (content) this.replaceChildren(content)
|
||||
}
|
||||
}
|
||||
const element = component[jsName]
|
||||
if (methods) {
|
||||
Object.defineProperties(Element.prototype, Object.getOwnPropertyDescriptors(methods))
|
||||
Object.defineProperties(element.prototype, Object.getOwnPropertyDescriptors(methods))
|
||||
}
|
||||
customElements.define(name, Element)
|
||||
return Element;
|
||||
customElements.define(name, element)
|
||||
return element;
|
||||
}
|
||||
|
||||
class Composition extends ObservableValue {
|
||||
|
|
Loading…
Reference in a new issue