Files
espurna/code/html/src/led.mjs
Maxim Prokhorov 442346708d web: dynamic types and fpstr to sv conversions
de-hardcode sch and led enumeration types from .html
publish raw type & pretty-string from .cpp indexed settings

de-fpstr string view references, use the object directly

publish 'faulty' schedule specs indexes, focus & report elems
ref. #2626

should fix faulty enum<->number references in selects
ref. #2628 - schedule types were numeric, while websocket delivered strings
2024-11-29 20:05:30 +03:00

58 lines
1.2 KiB
JavaScript

import {
addSimpleEnumerables,
groupSettingsOnAddElem,
variableListeners,
addEnumerables,
} from './settings.mjs';
import { addFromTemplate, addFromTemplateWithSchema } from './template.mjs';
/** @param {function(HTMLElement): void} callback */
function withLeds(callback) {
callback(/** @type {!HTMLElement} */
(document.getElementById("leds")));
}
/**
* @param {HTMLElement} elem
*/
function addLed(elem) {
addFromTemplate(elem, "led-config", {});
}
/**
* @param {any} value
*/
function onConfig(value) {
withLeds((elem) => {
addFromTemplateWithSchema(
elem, "led-config",
value.leds, value.schema,
value.max ?? 0);
});
addSimpleEnumerables("led", "LED", value.leds.length);
}
/**
* @returns {import('./settings.mjs').KeyValueListeners}
*/
function listeners() {
return {
"ledConfig": (_, value) => {
onConfig(value);
},
"ledModes": (_, value) => {
addEnumerables("ledMode", value);
},
};
};
export function init() {
withLeds((elem) => {
variableListeners(listeners());
groupSettingsOnAddElem(elem, () => {
addLed(elem);
});
});
}