SVGHMI: One class per widget type, widget objects are instances of these classes, and members are passed through constructor. This allows to keep compatible with previous widget_defs template used in most widgets.
// widget_back.ysl2
template "widget[@type='Back']", mode="widget_defs" {
param "hmi_element";
| on_click: function(evt) {
| if(jump_history.length > 1){
| jump_history.pop();
| let [page_name, index] = jump_history.pop();
| switch_page(page_name, index);
| }
| },
| init: function() {
| this.element.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_click(evt)");
| },
}