mirror of
https://github.com/jaandrle/deka-dom-el
synced 2025-04-02 04:05:52 +02:00
🐛 __dde_reactive
This commit is contained in:
parent
992370b4e3
commit
d1b017c1a1
17
dist/esm-with-signals.js
vendored
17
dist/esm-with-signals.js
vendored
@ -639,7 +639,7 @@ function wrapMethod(obj, method, apply) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// src/memo.js
|
// src/memo.js
|
||||||
var memoMark = "__dde_memo_of";
|
var memoMark = "__dde_memo";
|
||||||
var memo_scope = [];
|
var memo_scope = [];
|
||||||
function memo(key, generator) {
|
function memo(key, generator) {
|
||||||
if (!memo_scope.length) return generator(key);
|
if (!memo_scope.length) return generator(key);
|
||||||
@ -648,7 +648,7 @@ function memo(key, generator) {
|
|||||||
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
||||||
}
|
}
|
||||||
memo.isScope = function(obj) {
|
memo.isScope = function(obj) {
|
||||||
return Boolean(obj[memoMark]);
|
return obj[memoMark];
|
||||||
};
|
};
|
||||||
memo.scope = function memoScopeCreate(fun, { signal: signal2, onlyLast } = {}) {
|
memo.scope = function memoScopeCreate(fun, { signal: signal2, onlyLast } = {}) {
|
||||||
let cache = oCreate();
|
let cache = oCreate();
|
||||||
@ -667,7 +667,7 @@ memo.scope = function memoScopeCreate(fun, { signal: signal2, onlyLast } = {}) {
|
|||||||
cache = cache_local;
|
cache = cache_local;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
memoScope[memoMark] = fun;
|
memoScope[memoMark] = true;
|
||||||
memoScope.clear = () => cache = oCreate();
|
memoScope.clear = () => cache = oCreate();
|
||||||
if (signal2) signal2.addEventListener("abort", memoScope.clear);
|
if (signal2) signal2.addEventListener("abort", memoScope.clear);
|
||||||
return memoScope;
|
return memoScope;
|
||||||
@ -787,7 +787,7 @@ signal.clear = function(...signals2) {
|
|||||||
};
|
};
|
||||||
var key_reactive = "__dde_reactive";
|
var key_reactive = "__dde_reactive";
|
||||||
signal.el = function(s, map) {
|
signal.el = function(s, map) {
|
||||||
map = memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
const mapScoped = memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
||||||
const { current } = scope, { scope: sc } = current;
|
const { current } = scope, { scope: sc } = current;
|
||||||
const mark_start = createElement.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
const mark_start = createElement.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
||||||
const mark_end = mark_start.end;
|
const mark_end = mark_start.end;
|
||||||
@ -797,7 +797,7 @@ signal.el = function(s, map) {
|
|||||||
if (!mark_start.parentNode || !mark_end.parentNode)
|
if (!mark_start.parentNode || !mark_end.parentNode)
|
||||||
return removeSignalListener(s, reRenderReactiveElement);
|
return removeSignalListener(s, reRenderReactiveElement);
|
||||||
scope.push(current);
|
scope.push(current);
|
||||||
let els = map(v);
|
let els = mapScoped(v);
|
||||||
scope.pop();
|
scope.pop();
|
||||||
if (!Array.isArray(els))
|
if (!Array.isArray(els))
|
||||||
els = [els];
|
els = [els];
|
||||||
@ -817,7 +817,7 @@ signal.el = function(s, map) {
|
|||||||
current.host(on.disconnected(
|
current.host(on.disconnected(
|
||||||
() => (
|
() => (
|
||||||
/*! Clears cached elements for reactive element `S.el` */
|
/*! Clears cached elements for reactive element `S.el` */
|
||||||
map.clear()
|
mapScoped.clear()
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
return out;
|
return out;
|
||||||
@ -889,9 +889,8 @@ var signals_config = {
|
|||||||
function removeSignalsFromElements(s, listener, ...notes) {
|
function removeSignalsFromElements(s, listener, ...notes) {
|
||||||
const { current } = scope;
|
const { current } = scope;
|
||||||
current.host(function(element) {
|
current.host(function(element) {
|
||||||
if (element[key_reactive])
|
if (!element[key_reactive]) element[key_reactive] = [];
|
||||||
return element[key_reactive].push([[s, listener], ...notes]);
|
element[key_reactive].push([[s, listener], ...notes]);
|
||||||
element[key_reactive] = [];
|
|
||||||
if (current.prevent) return;
|
if (current.prevent) return;
|
||||||
on.disconnected(
|
on.disconnected(
|
||||||
() => (
|
() => (
|
||||||
|
4
dist/esm-with-signals.min.js
vendored
4
dist/esm-with-signals.min.js
vendored
File diff suppressed because one or more lines are too long
6
dist/esm.js
vendored
6
dist/esm.js
vendored
@ -623,7 +623,7 @@ function wrapMethod(obj, method, apply) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// src/memo.js
|
// src/memo.js
|
||||||
var memoMark = "__dde_memo_of";
|
var memoMark = "__dde_memo";
|
||||||
var memo_scope = [];
|
var memo_scope = [];
|
||||||
function memo(key, generator) {
|
function memo(key, generator) {
|
||||||
if (!memo_scope.length) return generator(key);
|
if (!memo_scope.length) return generator(key);
|
||||||
@ -632,7 +632,7 @@ function memo(key, generator) {
|
|||||||
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
||||||
}
|
}
|
||||||
memo.isScope = function(obj) {
|
memo.isScope = function(obj) {
|
||||||
return Boolean(obj[memoMark]);
|
return obj[memoMark];
|
||||||
};
|
};
|
||||||
memo.scope = function memoScopeCreate(fun, { signal, onlyLast } = {}) {
|
memo.scope = function memoScopeCreate(fun, { signal, onlyLast } = {}) {
|
||||||
let cache = oCreate();
|
let cache = oCreate();
|
||||||
@ -651,7 +651,7 @@ memo.scope = function memoScopeCreate(fun, { signal, onlyLast } = {}) {
|
|||||||
cache = cache_local;
|
cache = cache_local;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
memoScope[memoMark] = fun;
|
memoScope[memoMark] = true;
|
||||||
memoScope.clear = () => cache = oCreate();
|
memoScope.clear = () => cache = oCreate();
|
||||||
if (signal) signal.addEventListener("abort", memoScope.clear);
|
if (signal) signal.addEventListener("abort", memoScope.clear);
|
||||||
return memoScope;
|
return memoScope;
|
||||||
|
2
dist/esm.min.js
vendored
2
dist/esm.min.js
vendored
File diff suppressed because one or more lines are too long
17
dist/iife-with-signals.js
vendored
17
dist/iife-with-signals.js
vendored
@ -684,7 +684,7 @@ var DDE = (() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// src/memo.js
|
// src/memo.js
|
||||||
var memoMark = "__dde_memo_of";
|
var memoMark = "__dde_memo";
|
||||||
var memo_scope = [];
|
var memo_scope = [];
|
||||||
function memo(key, generator) {
|
function memo(key, generator) {
|
||||||
if (!memo_scope.length) return generator(key);
|
if (!memo_scope.length) return generator(key);
|
||||||
@ -693,7 +693,7 @@ var DDE = (() => {
|
|||||||
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
||||||
}
|
}
|
||||||
memo.isScope = function(obj) {
|
memo.isScope = function(obj) {
|
||||||
return Boolean(obj[memoMark]);
|
return obj[memoMark];
|
||||||
};
|
};
|
||||||
memo.scope = function memoScopeCreate(fun, { signal: signal2, onlyLast } = {}) {
|
memo.scope = function memoScopeCreate(fun, { signal: signal2, onlyLast } = {}) {
|
||||||
let cache = oCreate();
|
let cache = oCreate();
|
||||||
@ -712,7 +712,7 @@ var DDE = (() => {
|
|||||||
cache = cache_local;
|
cache = cache_local;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
memoScope[memoMark] = fun;
|
memoScope[memoMark] = true;
|
||||||
memoScope.clear = () => cache = oCreate();
|
memoScope.clear = () => cache = oCreate();
|
||||||
if (signal2) signal2.addEventListener("abort", memoScope.clear);
|
if (signal2) signal2.addEventListener("abort", memoScope.clear);
|
||||||
return memoScope;
|
return memoScope;
|
||||||
@ -832,7 +832,7 @@ var DDE = (() => {
|
|||||||
};
|
};
|
||||||
var key_reactive = "__dde_reactive";
|
var key_reactive = "__dde_reactive";
|
||||||
signal.el = function(s, map) {
|
signal.el = function(s, map) {
|
||||||
map = memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
const mapScoped = memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
||||||
const { current } = scope, { scope: sc } = current;
|
const { current } = scope, { scope: sc } = current;
|
||||||
const mark_start = createElement.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
const mark_start = createElement.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
||||||
const mark_end = mark_start.end;
|
const mark_end = mark_start.end;
|
||||||
@ -842,7 +842,7 @@ var DDE = (() => {
|
|||||||
if (!mark_start.parentNode || !mark_end.parentNode)
|
if (!mark_start.parentNode || !mark_end.parentNode)
|
||||||
return removeSignalListener(s, reRenderReactiveElement);
|
return removeSignalListener(s, reRenderReactiveElement);
|
||||||
scope.push(current);
|
scope.push(current);
|
||||||
let els = map(v);
|
let els = mapScoped(v);
|
||||||
scope.pop();
|
scope.pop();
|
||||||
if (!Array.isArray(els))
|
if (!Array.isArray(els))
|
||||||
els = [els];
|
els = [els];
|
||||||
@ -862,7 +862,7 @@ var DDE = (() => {
|
|||||||
current.host(on.disconnected(
|
current.host(on.disconnected(
|
||||||
() => (
|
() => (
|
||||||
/*! Clears cached elements for reactive element `S.el` */
|
/*! Clears cached elements for reactive element `S.el` */
|
||||||
map.clear()
|
mapScoped.clear()
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
return out;
|
return out;
|
||||||
@ -934,9 +934,8 @@ var DDE = (() => {
|
|||||||
function removeSignalsFromElements(s, listener, ...notes) {
|
function removeSignalsFromElements(s, listener, ...notes) {
|
||||||
const { current } = scope;
|
const { current } = scope;
|
||||||
current.host(function(element) {
|
current.host(function(element) {
|
||||||
if (element[key_reactive])
|
if (!element[key_reactive]) element[key_reactive] = [];
|
||||||
return element[key_reactive].push([[s, listener], ...notes]);
|
element[key_reactive].push([[s, listener], ...notes]);
|
||||||
element[key_reactive] = [];
|
|
||||||
if (current.prevent) return;
|
if (current.prevent) return;
|
||||||
on.disconnected(
|
on.disconnected(
|
||||||
() => (
|
() => (
|
||||||
|
4
dist/iife-with-signals.min.js
vendored
4
dist/iife-with-signals.min.js
vendored
File diff suppressed because one or more lines are too long
6
dist/iife.js
vendored
6
dist/iife.js
vendored
@ -665,7 +665,7 @@ var DDE = (() => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// src/memo.js
|
// src/memo.js
|
||||||
var memoMark = "__dde_memo_of";
|
var memoMark = "__dde_memo";
|
||||||
var memo_scope = [];
|
var memo_scope = [];
|
||||||
function memo(key, generator) {
|
function memo(key, generator) {
|
||||||
if (!memo_scope.length) return generator(key);
|
if (!memo_scope.length) return generator(key);
|
||||||
@ -674,7 +674,7 @@ var DDE = (() => {
|
|||||||
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
||||||
}
|
}
|
||||||
memo.isScope = function(obj) {
|
memo.isScope = function(obj) {
|
||||||
return Boolean(obj[memoMark]);
|
return obj[memoMark];
|
||||||
};
|
};
|
||||||
memo.scope = function memoScopeCreate(fun, { signal, onlyLast } = {}) {
|
memo.scope = function memoScopeCreate(fun, { signal, onlyLast } = {}) {
|
||||||
let cache = oCreate();
|
let cache = oCreate();
|
||||||
@ -693,7 +693,7 @@ var DDE = (() => {
|
|||||||
cache = cache_local;
|
cache = cache_local;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
memoScope[memoMark] = fun;
|
memoScope[memoMark] = true;
|
||||||
memoScope.clear = () => cache = oCreate();
|
memoScope.clear = () => cache = oCreate();
|
||||||
if (signal) signal.addEventListener("abort", memoScope.clear);
|
if (signal) signal.addEventListener("abort", memoScope.clear);
|
||||||
return memoScope;
|
return memoScope;
|
||||||
|
2
dist/iife.min.js
vendored
2
dist/iife.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,5 +1,5 @@
|
|||||||
import { hasOwn, oCreate } from "./helpers.js";
|
import { hasOwn, oCreate } from "./helpers.js";
|
||||||
const memoMark= "__dde_memo_of";
|
const memoMark= "__dde_memo";
|
||||||
const memo_scope= [];
|
const memo_scope= [];
|
||||||
/**
|
/**
|
||||||
* ```js
|
* ```js
|
||||||
@ -20,7 +20,7 @@ export function memo(key, generator){
|
|||||||
const [ { cache, after } ]= memo_scope;
|
const [ { cache, after } ]= memo_scope;
|
||||||
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
return after(k, hasOwn(cache, k) ? cache[k] : generator(key));
|
||||||
}
|
}
|
||||||
memo.isScope= function(obj){ return Boolean(obj[memoMark]); };
|
memo.isScope= function(obj){ return obj[memoMark]; };
|
||||||
/**
|
/**
|
||||||
* @param {Function} fun
|
* @param {Function} fun
|
||||||
* @param {Object} [options={}]
|
* @param {Object} [options={}]
|
||||||
@ -43,7 +43,7 @@ memo.scope= function memoScopeCreate(fun, { signal, onlyLast }= {}){
|
|||||||
cache= cache_local;
|
cache= cache_local;
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
memoScope[memoMark]= fun;
|
memoScope[memoMark]= true;
|
||||||
memoScope.clear= ()=> cache= oCreate();
|
memoScope.clear= ()=> cache= oCreate();
|
||||||
if(signal) signal.addEventListener("abort", memoScope.clear);
|
if(signal) signal.addEventListener("abort", memoScope.clear);
|
||||||
return memoScope;
|
return memoScope;
|
||||||
|
@ -169,11 +169,11 @@ import { memo } from "../memo.js";
|
|||||||
* Creates a reactive DOM element that re-renders when signal changes
|
* Creates a reactive DOM element that re-renders when signal changes
|
||||||
*
|
*
|
||||||
* @param {Object} s - Signal object to watch
|
* @param {Object} s - Signal object to watch
|
||||||
* @param {Function} map - Function mapping signal value to DOM elements
|
* @param {Function} mapScoped - Function mapping signal value to DOM elements
|
||||||
* @returns {DocumentFragment} Fragment containing reactive elements
|
* @returns {DocumentFragment} Fragment containing reactive elements
|
||||||
*/
|
*/
|
||||||
signal.el= function(s, map){
|
signal.el= function(s, map){
|
||||||
map= memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
const mapScoped= memo.isScope(map) ? map : memo.scope(map, { onlyLast: true });
|
||||||
const { current }= scope, { scope: sc }= current;
|
const { current }= scope, { scope: sc }= current;
|
||||||
const mark_start= el.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
const mark_start= el.mark({ type: "reactive", component: sc && sc.name || "" }, true);
|
||||||
const mark_end= mark_start.end;
|
const mark_end= mark_start.end;
|
||||||
@ -183,7 +183,7 @@ signal.el= function(s, map){
|
|||||||
if(!mark_start.parentNode || !mark_end.parentNode) // === `isConnected` or wasn’t yet rendered
|
if(!mark_start.parentNode || !mark_end.parentNode) // === `isConnected` or wasn’t yet rendered
|
||||||
return removeSignalListener(s, reRenderReactiveElement);
|
return removeSignalListener(s, reRenderReactiveElement);
|
||||||
scope.push(current);
|
scope.push(current);
|
||||||
let els= map(v);
|
let els= mapScoped(v);
|
||||||
scope.pop();
|
scope.pop();
|
||||||
if(!Array.isArray(els))
|
if(!Array.isArray(els))
|
||||||
els= [ els ];
|
els= [ els ];
|
||||||
@ -202,7 +202,7 @@ signal.el= function(s, map){
|
|||||||
reRenderReactiveElement(s.get());
|
reRenderReactiveElement(s.get());
|
||||||
current.host(on.disconnected(()=>
|
current.host(on.disconnected(()=>
|
||||||
/*! Clears cached elements for reactive element `S.el` */
|
/*! Clears cached elements for reactive element `S.el` */
|
||||||
map.clear()
|
mapScoped.clear()
|
||||||
));
|
));
|
||||||
return out;
|
return out;
|
||||||
};
|
};
|
||||||
@ -314,9 +314,8 @@ export const signals_config= {
|
|||||||
function removeSignalsFromElements(s, listener, ...notes){
|
function removeSignalsFromElements(s, listener, ...notes){
|
||||||
const { current }= scope;
|
const { current }= scope;
|
||||||
current.host(function(element){
|
current.host(function(element){
|
||||||
if(element[key_reactive])
|
if(!element[key_reactive]) element[key_reactive]= [];
|
||||||
return element[key_reactive].push([ [ s, listener ], ...notes ]);
|
element[key_reactive].push([ [ s, listener ], ...notes ]);
|
||||||
element[key_reactive]= [];
|
|
||||||
if(current.prevent) return; // typically document.body, doenst need auto-remove as it should happen on page leave
|
if(current.prevent) return; // typically document.body, doenst need auto-remove as it should happen on page leave
|
||||||
on.disconnected(()=>
|
on.disconnected(()=>
|
||||||
/*! Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?).
|
/*! Clears all Signals listeners added in the current scope/host (`S.el`, `assign`, …?).
|
||||||
|
Loading…
x
Reference in New Issue
Block a user