59 lines
1.2 KiB
JavaScript
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 };
|
|
}
|