SVGHMI: factorize dispatch calling logic. svghmi
authorEdouard Tisserant
Thu, 13 Aug 2020 11:37:39 +0200
branchsvghmi
changeset 3026 d454ed480c0f
parent 3025 48e7e336c052
child 3027 d660b1b6bf4f
SVGHMI: factorize dispatch calling logic.
svghmi/gen_index_xhtml.xslt
svghmi/widgets_common.ysl2
--- a/svghmi/gen_index_xhtml.xslt	Thu Aug 13 11:30:18 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt	Thu Aug 13 11:37:39 2020 +0200
@@ -1141,29 +1141,101 @@
 </xsl:text>
     <xsl:text>    apply_cache() {
 </xsl:text>
+    <xsl:text>        if(!this.unsubscribable) for(let index in this.indexes){
+</xsl:text>
+    <xsl:text>            /* dispatch current cache in newly opened page widgets */
+</xsl:text>
+    <xsl:text>            let realindex = this.get_variable_index(index);
+</xsl:text>
+    <xsl:text>            let cached_val = cache[realindex];
+</xsl:text>
+    <xsl:text>            if(cached_val != undefined)
+</xsl:text>
+    <xsl:text>                this._dispatch(cached_val, cached_val, index);
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    get_variable_index(varnum) {
+</xsl:text>
+    <xsl:text>        let index = this.indexes[varnum];
+</xsl:text>
+    <xsl:text>        if(typeof(index) == "string"){
+</xsl:text>
+    <xsl:text>            index = page_local_index(index, this.container_id);
+</xsl:text>
+    <xsl:text>        } else {
+</xsl:text>
+    <xsl:text>            if(this.relativeness[varnum]){
+</xsl:text>
+    <xsl:text>                index += this.offset;
+</xsl:text>
+    <xsl:text>            }
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>        return index;
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>    change_hmi_value(index,opstr) {
+</xsl:text>
+    <xsl:text>        return change_hmi_value(this.get_variable_index(index), opstr);
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    apply_hmi_value(index, new_val) {
+</xsl:text>
+    <xsl:text>        return apply_hmi_value(this.get_variable_index(0), new_val);
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    new_hmi_value(index, value, oldval) {
+</xsl:text>
+    <xsl:text>        // TODO avoid searching, store index at sub()
+</xsl:text>
+    <xsl:text>        for(let i = 0; i &lt; this.indexes.length; i++) {
+</xsl:text>
+    <xsl:text>            let refindex = this.get_variable_index(i);
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>            if(index == refindex) {
+</xsl:text>
+    <xsl:text>                this._dispatch(value, oldval, i);
+</xsl:text>
+    <xsl:text>                break;
+</xsl:text>
+    <xsl:text>            }
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>    
+</xsl:text>
+    <xsl:text>    _dispatch(value, oldval, varnum) {
+</xsl:text>
     <xsl:text>        let dispatch = this.dispatch;
 </xsl:text>
-    <xsl:text>        if(dispatch == undefined) return;
-</xsl:text>
-    <xsl:text>        if(!this.unsubscribable) for(let index in this.indexes){
-</xsl:text>
-    <xsl:text>            /* dispatch current cache in newly opened page widgets */
-</xsl:text>
-    <xsl:text>            let realindex = this.get_variable_index(index);
-</xsl:text>
-    <xsl:text>            let cached_val = cache[realindex];
-</xsl:text>
-    <xsl:text>            if(cached_val != undefined)
-</xsl:text>
-    <xsl:text>                try {
-</xsl:text>
-    <xsl:text>                    dispatch.call(this, cached_val, cached_val, index);
-</xsl:text>
-    <xsl:text>                } catch(err) {
-</xsl:text>
-    <xsl:text>                    console.log(err);
-</xsl:text>
-    <xsl:text>                }
+    <xsl:text>        if(dispatch != undefined){
+</xsl:text>
+    <xsl:text>            try {
+</xsl:text>
+    <xsl:text>                dispatch.call(this, value, oldval, varnum);
+</xsl:text>
+    <xsl:text>            } catch(err) {
+</xsl:text>
+    <xsl:text>                console.log(err);
+</xsl:text>
+    <xsl:text>            }
 </xsl:text>
     <xsl:text>        }
 </xsl:text>
@@ -1171,80 +1243,6 @@
 </xsl:text>
     <xsl:text>
 </xsl:text>
-    <xsl:text>    get_variable_index(varnum) {
-</xsl:text>
-    <xsl:text>        let index = this.indexes[varnum];
-</xsl:text>
-    <xsl:text>        if(typeof(index) == "string"){
-</xsl:text>
-    <xsl:text>            index = page_local_index(index, this.container_id);
-</xsl:text>
-    <xsl:text>        } else {
-</xsl:text>
-    <xsl:text>            if(this.relativeness[varnum]){
-</xsl:text>
-    <xsl:text>                index += this.offset;
-</xsl:text>
-    <xsl:text>            }
-</xsl:text>
-    <xsl:text>        }
-</xsl:text>
-    <xsl:text>        return index;
-</xsl:text>
-    <xsl:text>    }
-</xsl:text>
-    <xsl:text>    change_hmi_value(index,opstr) {
-</xsl:text>
-    <xsl:text>        return change_hmi_value(this.get_variable_index(index), opstr);
-</xsl:text>
-    <xsl:text>    }
-</xsl:text>
-    <xsl:text>
-</xsl:text>
-    <xsl:text>    apply_hmi_value(index, new_val) {
-</xsl:text>
-    <xsl:text>        return apply_hmi_value(this.get_variable_index(0), new_val);
-</xsl:text>
-    <xsl:text>    }
-</xsl:text>
-    <xsl:text>
-</xsl:text>
-    <xsl:text>    new_hmi_value(index, value, oldval) {
-</xsl:text>
-    <xsl:text>        // TODO avoid searching, store index at sub()
-</xsl:text>
-    <xsl:text>        let dispatch = this.dispatch;
-</xsl:text>
-    <xsl:text>        if(dispatch == undefined) return;
-</xsl:text>
-    <xsl:text>        for(let i = 0; i &lt; this.indexes.length; i++) {
-</xsl:text>
-    <xsl:text>            let refindex = this.get_variable_index(i);
-</xsl:text>
-    <xsl:text>
-</xsl:text>
-    <xsl:text>            if(index == refindex) {
-</xsl:text>
-    <xsl:text>                try {
-</xsl:text>
-    <xsl:text>                    dispatch.call(this, value, oldval, i);
-</xsl:text>
-    <xsl:text>                } catch(err) {
-</xsl:text>
-    <xsl:text>                    console.log(err);
-</xsl:text>
-    <xsl:text>                }
-</xsl:text>
-    <xsl:text>                break;
-</xsl:text>
-    <xsl:text>            }
-</xsl:text>
-    <xsl:text>        }
-</xsl:text>
-    <xsl:text>    }
-</xsl:text>
-    <xsl:text>    
-</xsl:text>
     <xsl:text>    _animate(){
 </xsl:text>
     <xsl:text>        this.animate();
--- a/svghmi/widgets_common.ysl2	Thu Aug 13 11:30:18 2020 +0200
+++ b/svghmi/widgets_common.ysl2	Thu Aug 13 11:37:39 2020 +0200
@@ -158,18 +158,12 @@
         }
 
         apply_cache() {
-            let dispatch = this.dispatch;
-            if(dispatch == undefined) return;
             if(!this.unsubscribable) for(let index in this.indexes){
                 /* dispatch current cache in newly opened page widgets */
                 let realindex = this.get_variable_index(index);
                 let cached_val = cache[realindex];
                 if(cached_val != undefined)
-                    try {
-                        dispatch.call(this, cached_val, cached_val, index);
-                    } catch(err) {
-                        console.log(err);
-                    }
+                    this._dispatch(cached_val, cached_val, index);
             }
         }
 
@@ -194,22 +188,27 @@
 
         new_hmi_value(index, value, oldval) {
             // TODO avoid searching, store index at sub()
-            let dispatch = this.dispatch;
-            if(dispatch == undefined) return;
             for(let i = 0; i < this.indexes.length; i++) {
                 let refindex = this.get_variable_index(i);
 
                 if(index == refindex) {
-                    try {
-                        dispatch.call(this, value, oldval, i);
-                    } catch(err) {
-                        console.log(err);
-                    }
+                    this._dispatch(value, oldval, i);
                     break;
                 }
             }
         }
         
+        _dispatch(value, oldval, varnum) {
+            let dispatch = this.dispatch;
+            if(dispatch != undefined){
+                try {
+                    dispatch.call(this, value, oldval, varnum);
+                } catch(err) {
+                    console.log(err);
+                }
+            }
+        }
+
         _animate(){
             this.animate();
             this.pending_animate = false;