SVGHMI: Better JS code semantic in ForEach widget class. Update lagging generated xslt. svghmi
authorEdouard Tisserant <edouard.tisserant@gmail.com>
Mon, 03 Aug 2020 18:25:23 +0200
branchsvghmi
changeset 3003 9771a724af09
parent 3002 30b0635fe92e
child 3004 705e34c6fe93
SVGHMI: Better JS code semantic in ForEach widget class. Update lagging generated xslt.
svghmi/gen_index_xhtml.xslt
svghmi/widget_foreach.ysl2
--- a/svghmi/gen_index_xhtml.xslt	Mon Aug 03 18:22:19 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt	Mon Aug 03 18:25:23 2020 +0200
@@ -1001,6 +1001,14 @@
 </xsl:text>
     <xsl:text>
 </xsl:text>
+    <xsl:text>    get_idx(index) {
+</xsl:text>
+    <xsl:text>         let orig = this.indexes[index];
+</xsl:text>
+    <xsl:text>         return this.offset ? orig + this.offset : orig;
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
     <xsl:text>}
 </xsl:text>
     <xsl:text>
@@ -1188,7 +1196,7 @@
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
-    <xsl:text>    change_hmi_value(this.indexes[0], "=1");
+    <xsl:text>    apply_hmi_value(this.get_idx(0), 1);
 </xsl:text>
     <xsl:text>},
 </xsl:text>
@@ -1202,7 +1210,7 @@
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
-    <xsl:text>    change_hmi_value(this.indexes[0], "=0");
+    <xsl:text>    apply_hmi_value(this.get_idx(0), 0);
 </xsl:text>
     <xsl:text>},
 </xsl:text>
@@ -1437,11 +1445,7 @@
 </xsl:text>
     <xsl:text>        this.close();
 </xsl:text>
-    <xsl:text>        let orig = this.indexes[0];
-</xsl:text>
-    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
-</xsl:text>
-    <xsl:text>        apply_hmi_value(idx, selection);
+    <xsl:text>        apply_hmi_value(this.get_idx(0), selection);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -1993,43 +1997,43 @@
 </xsl:text>
     <xsl:text>
 </xsl:text>
-    <xsl:text>    foreach_widgets_do(new_offset, todo){
+    <xsl:text>    foreach_widgets_do(todo){
+</xsl:text>
+    <xsl:text>        for(let i = 0; i &lt; this.items.length; i++) {
+</xsl:text>
+    <xsl:text>            let item = this.items[i];
+</xsl:text>
+    <xsl:text>            let orig_item_index = this.index_pool[i];
+</xsl:text>
+    <xsl:text>            let item_index = this.index_pool[i+this.item_offset];
+</xsl:text>
+    <xsl:text>            let item_index_offset = item_index - orig_item_index;
+</xsl:text>
+    <xsl:text>            for(let widget of item) {
+</xsl:text>
+    <xsl:text>                todo(widget).call(widget, this.offset + item_index_offset);
+</xsl:text>
+    <xsl:text>            }
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    sub(new_offset=0){
 </xsl:text>
     <xsl:text>        this.offset = new_offset;
 </xsl:text>
-    <xsl:text>        for(let i = 0; i &lt; this.items.length; i++) {
-</xsl:text>
-    <xsl:text>            let item = this.items[i];
-</xsl:text>
-    <xsl:text>            let orig_item_index = this.index_pool[i];
-</xsl:text>
-    <xsl:text>            let item_index = this.index_pool[i+this.item_offset];
-</xsl:text>
-    <xsl:text>            let item_index_offset = item_index - orig_item_index;
-</xsl:text>
-    <xsl:text>            for(let widget of item) {
-</xsl:text>
-    <xsl:text>                todo(widget).call(widget, new_offset + item_index_offset);
-</xsl:text>
-    <xsl:text>            }
-</xsl:text>
-    <xsl:text>        }
+    <xsl:text>        this.foreach_widgets_do(w=&gt;w.sub);
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
     <xsl:text>
 </xsl:text>
-    <xsl:text>    sub(new_offset=0){
-</xsl:text>
-    <xsl:text>        this.foreach_widgets_do(new_offset, w=&gt;w.sub);
-</xsl:text>
-    <xsl:text>    }
-</xsl:text>
-    <xsl:text>
-</xsl:text>
     <xsl:text>    apply_cache() {
 </xsl:text>
-    <xsl:text>        this.foreach_widgets_do(this.offset, w=&gt;w.apply_cache);
+    <xsl:text>        this.foreach_widgets_do(w=&gt;w.apply_cache);
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
@@ -2134,11 +2138,7 @@
 </xsl:text>
     <xsl:text>    on_op_click: function(opstr) {
 </xsl:text>
-    <xsl:text>        let orig = this.indexes[0];
-</xsl:text>
-    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
-</xsl:text>
-    <xsl:text>        let new_val = change_hmi_value(idx, opstr);
+    <xsl:text>        let new_val = change_hmi_value(this.get_idx(0), opstr);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -2154,11 +2154,7 @@
 </xsl:text>
     <xsl:text>    edit_callback: function(new_val) {
 </xsl:text>
-    <xsl:text>        let orig = this.indexes[0];
-</xsl:text>
-    <xsl:text>        let idx = this.offset ? orig - this.offset : orig;
-</xsl:text>
-    <xsl:text>        apply_hmi_value(idx, new_val);
+    <xsl:text>        apply_hmi_value(this.get_idx(0), new_val);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -3413,7 +3409,7 @@
 </xsl:text>
           <xsl:text>    dispatch: function(value) {
 </xsl:text>
-          <xsl:text>        change_hmi_value(heartbeat_index, "+1");
+          <xsl:text>        apply_hmi_value(heartbeat_index, value+1);
 </xsl:text>
           <xsl:text>    }
 </xsl:text>
--- a/svghmi/widget_foreach.ysl2	Mon Aug 03 18:22:19 2020 +0200
+++ b/svghmi/widget_foreach.ysl2	Mon Aug 03 18:25:23 2020 +0200
@@ -58,25 +58,25 @@
         this.offset = 0;
     }
 
-    foreach_widgets_do(new_offset, todo){
-        this.offset = new_offset;
+    foreach_widgets_do(todo){
         for(let i = 0; i < this.items.length; i++) {
             let item = this.items[i];
             let orig_item_index = this.index_pool[i];
             let item_index = this.index_pool[i+this.item_offset];
             let item_index_offset = item_index - orig_item_index;
             for(let widget of item) {
-                todo(widget).call(widget, new_offset + item_index_offset);
+                todo(widget).call(widget, this.offset + item_index_offset);
             }
         }
     }
 
     sub(new_offset=0){
-        this.foreach_widgets_do(new_offset, w=>w.sub);
+        this.offset = new_offset;
+        this.foreach_widgets_do(w=>w.sub);
     }
 
     apply_cache() {
-        this.foreach_widgets_do(this.offset, w=>w.apply_cache);
+        this.foreach_widgets_do(w=>w.apply_cache);
     }
 
     on_click(opstr, evt) {