beremiz

Python Safe Globals now have more reliable triggering of OnChange call. Added "Onchange" object to accessible runtime variables that let user python code see count of changes and first and last values.
// widget_tooglebutton.ysl2
template "widget[@type='ToggleButton']", mode="widget_class"{
||
class ToggleButtonWidget extends Widget{
frequency = 5;
state = 0;
active_style = undefined;
inactive_style = undefined;
dispatch(value) {
this.state = value;
//redraw toggle button
this.request_animate();
}
on_click(evt) {
//toggle state and apply
if (this.state) {
this.state = 0;
} else {
this.state = 1;
}
this.apply_hmi_value(0, this.state);
//redraw toggle button
this.request_animate();
}
animate(){
// redraw toggle button on screen refresh
if (this.state) {
this.active_elt.setAttribute("style", this.active_style);
this.inactive_elt.setAttribute("style", "display:none");
} else {
this.inactive_elt.setAttribute("style", this.inactive_style);
this.active_elt.setAttribute("style", "display:none");
}
}
init() {
this.active_style = this.active_elt ? this.active_elt.style.cssText : undefined;
this.inactive_style = this.inactive_elt ? this.inactive_elt.style.cssText : undefined;
if (this.active_style && this.inactive_style) {
this.active_elt.setAttribute("style", "display:none");
this.inactive_elt.setAttribute("style", this.inactive_style);
}
this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)");
}
}
||
}
template "widget[@type='ToggleButton']", mode="widget_defs" {
param "hmi_element";
optional_labels("active inactive");
|,
}