--- a/svghmi/widgets_common.ysl2 Fri Sep 09 09:45:27 2022 +0200
+++ b/svghmi/widgets_common.ysl2 Fri Sep 09 10:06:02 2022 +0200
@@ -61,7 +61,7 @@
in xsl decl widget_defs(%name, match="widget[@type='%name']", mode="widget_defs") alias template {
// all widget potentially has a "disabled" labeled element
- const "disability" optional_labels("disabled");
+ const "disability" optional_labels("/disabled"); const "has_disability","string-length($disability)>0";
@@ -372,7 +372,7 @@
if(realindex == undefined) continue;
let cached_val = cache[realindex];
if(cached_val != undefined)
- this._dispatch(cached_val, cached_val, index);
+ this.feed_data_for_dispatch(cached_val, cached_val, index); @@ -463,7 +463,7 @@
if(refindex == undefined) continue;
- this._dispatch(value, oldval, i);
+ this.feed_data_for_dispatch(value, oldval, i); @@ -473,8 +473,7 @@
this.deafen[index] = undefined;
let [new_val, old_val] = this.incoming[index];
this.incoming[index] = undefined;
- this.dispatch(new_val, old_val, index);
+ this.do_dispatch(new_val, old_val, index); @@ -516,26 +515,15 @@
- _dispatch(value, oldval, varnum) {
- let dispatch = this.dispatch;
- let has_dispatch = dispatch != undefined;
- if(has_dispatch || this.enable_expr){
+ feed_data_for_dispatch(value, oldval, varnum) { + if(this.dispatch || this.enable_expr){ if(this.deafen[varnum] == undefined){
let min_interval = 1000/this.frequency;
let lastdispatch = this.lastdispatch[varnum];
if(lastdispatch == undefined || now > lastdispatch + min_interval){
this.lastdispatch[varnum] = now;
- dispatch.call(this, value, oldval, varnum);
- if(this.enable_expr) try {
- this.compute_enable(value, oldval, varnum);
+ this.do_dispatch(value, oldval, varnum) let elapsed = now - lastdispatch;
@@ -549,6 +537,19 @@
+ do_dispatch(value, oldval, varnum) { + if(this.dispatch) try { + this.dispatch(value, oldval, varnum); + if(this.enable_expr) try { + this.compute_enable(value, oldval, varnum);