# HG changeset patch # User Edouard Tisserant # Date 1597311459 -7200 # Node ID d454ed480c0f92429483cf98e8f921fbcf4cc971 # Parent 48e7e336c0528b77ac394221f4269fecf804ba53 SVGHMI: factorize dispatch calling logic. diff -r 48e7e336c052 -r d454ed480c0f svghmi/gen_index_xhtml.xslt --- 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 < 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 < 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(); diff -r 48e7e336c052 -r d454ed480c0f svghmi/widgets_common.ysl2 --- 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;