diff -r 43b2bff95289 -r b27e50143083 svghmi/widgets_common.ysl2 --- a/svghmi/widgets_common.ysl2 Mon Jun 20 09:30:11 2022 +0200 +++ b/svghmi/widgets_common.ysl2 Wed Jun 22 11:48:40 2022 +0200 @@ -14,6 +14,13 @@ } }; +decl activable() alias - { + | activable_sub:{ + labels("/active /inactive") { + content; + } + | } +}; decl activable_labels(*ptr) alias - { optional_labels(*ptr) { with "subelements","'active inactive'"; @@ -165,6 +172,33 @@ || var pending_widget_animates = []; + function _hide(elt, placeholder){ + if(elt.parentNode != null) + placeholder.parentNode.removeChild(elt); + } + function _show(elt, placeholder){ + placeholder.parentNode.insertBefore(elt, placeholder); + } + + function set_activation_state(eltsub, state){ + if(eltsub.active_elt_placeholder == undefined){ + eltsub.active_elt_placeholder = document.createComment(""); + eltsub.active_elt.parentNode.insertBefore(eltsub.active_elt_placeholder, eltsub.active_elt); + eltsub.inactive_elt_placeholder = document.createComment(""); + eltsub.inactive_elt.parentNode.insertBefore(eltsub.inactive_elt_placeholder, eltsub.inactive_elt); + } + (state?_show:_hide)(eltsub.active_elt, eltsub.active_elt_placeholder); + ((state || state==undefined)?_hide:_show)(eltsub.inactive_elt, eltsub.inactive_elt_placeholder); + } + + function activate_activable(eltsub) { + set_activation_state(eltsub, true); + } + + function inactivate_activable(eltsub) { + set_activation_state(eltsub, false); + } + class Widget { offset = 0; frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */ @@ -411,17 +445,10 @@ this.pending_animate = true; requestHMIAnimation(); } - - } - - activate_activable(eltsub) { - eltsub.inactive.style.display = "none"; - eltsub.active.style.display = ""; - } - - inactivate_activable(eltsub) { - eltsub.active.style.display = "none"; - eltsub.inactive.style.display = ""; + } + + set_activation_state(state){ + set_activation_state(this.activable_sub, state); } } || @@ -489,7 +516,7 @@ | /* missing «$name»/«$subname» element */ } otherwise { - | "«$subname»": id("«$subelt/@id»")`if "position()!=last()" > ,` + | "«$subname»_elt": id("«$subelt/@id»")`if "position()!=last()" > ,` } } }