Files
2026-08-28 01:01:12 +02:00

59 lines
1.2 KiB
JavaScript

import { parseState, serializeState } from './state.js';
export function createRefreshTracker(readSignature, refresh) {
let previous = null;
let timer = null;
function check() {
const next = String(readSignature() ?? '');
if (next === previous) return false;
previous = next;
refresh();
return true;
}
return {
check,
start(interval = 250) {
if (timer !== null) return;
check();
timer = setInterval(check, interval);
},
stop() {
if (timer === null) return;
clearInterval(timer);
timer = null;
},
};
}
export function createStateController(widget, node) {
let state = parseState(widget?.value);
function getState() {
return state;
}
function setState(next) {
state = next;
return state;
}
function refresh() {
state = parseState(widget?.value);
return state;
}
function persist() {
const oldValue = widget.value;
const value = serializeState(state);
widget.value = value;
widget.callback?.(value);
node?.onWidgetChanged?.(widget.name, value, oldValue, widget);
node?.graph?.setDirtyCanvas?.(true, true);
return value;
}
return { getState, setState, refresh, persist };
}