# HG changeset patch # User Edouard Tisserant <edouard.tisserant@gmail.com> # Date 1596471923 -7200 # Node ID 9771a724af09e0b0a98d613e7fd2e18ccfd3a3db # Parent 30b0635fe92e6ab7c80575479ec0f9eca1b54e1b SVGHMI: Better JS code semantic in ForEach widget class. Update lagging generated xslt. diff -r 30b0635fe92e -r 9771a724af09 svghmi/gen_index_xhtml.xslt --- 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 < 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 < 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=>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=>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=>w.apply_cache); + <xsl:text> this.foreach_widgets_do(w=>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> diff -r 30b0635fe92e -r 9771a724af09 svghmi/widget_foreach.ysl2 --- 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) {