hswidget
Version:
Helpful Scripts UI widgets
60 lines • 6.79 kB
JavaScript
import m from "mithril";
import { EnabledWidget } from './Widget';
import { OnOffButton } from "./Button";
export class OptionButtons extends EnabledWidget {
setButton(buttonIndex, newValue) {
if (this.enabled) {
this.transition(buttonIndex, newValue, this.stateAccess);
this.onclick(buttonIndex, newValue, this.stateAccess.map(s => s.getValue()));
}
}
oninit(node) {
const s = node.state;
s.stateAccess = [];
s.onclick = node.attrs.onclick;
s.transition = node.attrs.transition ?? OptionButtons.transitions.none;
s.setAccessFn = (stateful, buttonIndex) => s.stateAccess[buttonIndex] = stateful;
if (node.attrs.remoteSet) {
node.attrs.remoteSet((buttonIndex, newValue) => s.setButton.bind(s)(buttonIndex, newValue));
}
}
view(node) {
const s = node.state;
const a = node.attrs;
this.enable(!node.attrs.disable);
return m(`.hs_option_buttons`, this.attrs(a, {
style: `grid-template-columns: repeat(${node?.children?.length ?? 0}, 1fr);`
}), node.children.map((c, buttonIndex) => m(OnOffButton, {
class: `index${buttonIndex}`,
initial: Array.isArray(a.initial) ? a.initial[buttonIndex] : (a.initial === buttonIndex ? 1 : 0),
onclick: (newValue) => s.setButton.bind(s)(buttonIndex, newValue),
stateAccess: (stateful) => s.setAccessFn(stateful, buttonIndex),
}, c)));
}
}
OptionButtons.transitions = {
none: (buttonIndex, newValue, states) => states.map(s => s.getValue()),
radio: (buttonIndex, newValue, states) => states.map((s, i) => s.setValue(i === buttonIndex ? 1 : 0))
};
export class RadioButtons extends OptionButtons {
oninit(node) {
node.attrs.initial = node.attrs.initial || 0;
node.attrs.transition = OptionButtons.transitions.radio;
super.oninit(node);
}
view(node) {
node.attrs.class = ['hs_radio_buttons', node.attrs.class].join(' ');
return super.view(node);
}
}
export class IconButtons extends EnabledWidget {
view(node) {
this.enable(!node.attrs.disable);
return m(OptionButtons, this.attrs(node.attrs, {
class: 'hs_icon_buttons',
buttonConstraints: node.attrs.radioMode ? OptionButtons.transitions.radio : OptionButtons.transitions.none,
onclick: node.attrs.onclick
}), node.children);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT3B0aW9uYnV0dG9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9PcHRpb25idXR0b25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVDQSxPQUFPLENBQUMsTUFBcUIsU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQTZCLE1BQWEsVUFBVSxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTyxVQUFVLENBQUM7QUErQ3hDLE1BQU0sT0FBTyxhQUFjLFNBQVEsYUFBYTtJQWdCNUMsU0FBUyxDQUFDLFdBQWtCLEVBQUUsUUFBZTtRQUN6QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZCxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDaEY7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQW9DO1FBQ3ZDLE1BQU0sQ0FBQyxHQUFRLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDMUIsQ0FBQyxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUMvQixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxRQUFpQixFQUFFLFdBQWtCLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxDQUFDO1FBQ2pH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