--- a/svghmi/gen_index_xhtml.xslt Mon Mar 30 11:06:12 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt Mon Mar 30 14:26:42 2020 +0200
@@ -949,35 +949,76 @@
<xsl:with-param name="mandatory" select="'no'"/>
+ <xsl:template name="jump_widget_disability"> + <xsl:param name="hmi_element"/> + <xsl:call-template name="defs_by_labels"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:with-param name="labels"> + <xsl:text>disabled</xsl:text> + <xsl:with-param name="mandatory" select="'no'"/> <xsl:template mode="widget_defs" match="widget[@type='Jump']">
<xsl:param name="hmi_element"/>
- <xsl:variable name="opts">
+ <xsl:variable name="activity"> <xsl:call-template name="jump_widget_activity">
<xsl:with-param name="hmi_element" select="$hmi_element"/>
- <xsl:variable name="have_opt" select="string-length($opts)>0"/>
- <xsl:value-of select="$opts"/>
- <xsl:text> on_click: function(evt) {
- <xsl:text> const index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
- <xsl:text> const name = this.args[0];
- <xsl:text> switch_page(name, index);
- <xsl:if test="$have_opt">
- <xsl:text> notify_page_change: function(page_name, index){
- <xsl:text> const ref_index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
- <xsl:text> const ref_name = this.args[0];
- <xsl:text> if((ref_name == undefined || ref_name == page_name) && index == ref_index) {
- <xsl:text> console.log("active", ref_name, ref_index, page_name, index);
+ <xsl:variable name="have_activity" select="string-length($activity)>0"/> + <xsl:value-of select="$activity"/> + <xsl:variable name="disability"> + <xsl:call-template name="jump_widget_disability"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:variable name="have_disability" select="$have_activity and string-length($disability)>0"/> + <xsl:value-of select="$disability"/> + <xsl:if test="$have_activity"> + <xsl:text> active: false, + <xsl:if test="$have_disability"> + <xsl:text> disabled: false, + <xsl:text> frequency: 2, + <xsl:text> dispatch: function(value) { + <xsl:text> this.disabled = !Number(value); + <xsl:text> console.log("disbled",value); + <xsl:text> this.update(); + <xsl:text> update: function(){ + <xsl:if test="$have_disability"> + <xsl:text> if(this.disabled) { + <xsl:text> /* show disabled */ + <xsl:text> this.disabled_elt.setAttribute("style", this.active_elt_style); + <xsl:text> /* hide inactive */ + <xsl:text> this.inactive_elt.setAttribute("style", "display:none"); + <xsl:text> /* hide active */ + <xsl:text> this.active_elt.setAttribute("style", "display:none"); + <xsl:text> /* hide disabled */ + <xsl:text> this.disabled_elt.setAttribute("style", "display:none"); + <xsl:text> if(this.active) { <xsl:text> /* show active */
@@ -989,8 +1030,6 @@
- <xsl:text> console.log("inactive",ref_name, ref_index, page_name, index);
<xsl:text> /* show inactive */
<xsl:text> this.inactive_elt.setAttribute("style", this.inactive_elt_style);
@@ -1001,6 +1040,34 @@
+ <xsl:if test="$have_disability"> + <xsl:text> on_click: function(evt) { + <xsl:text> const index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined; + <xsl:text> const name = this.args[0]; + <xsl:text> switch_page(name, index); + <xsl:if test="$have_activity"> + <xsl:text> notify_page_change: function(page_name, index){ + <xsl:text> const ref_index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined; + <xsl:text> const ref_name = this.args[0]; + <xsl:text> this.active =((ref_name == undefined || ref_name == page_name) && index == ref_index); + <xsl:text> this.update(); @@ -1010,15 +1077,52 @@
<xsl:value-of select="$hmi_element/@id"/>
<xsl:text>'].on_click(evt)");
- <xsl:if test="$have_opt">
+ <xsl:if test="$have_activity"> <xsl:text> this.active_elt_style = this.active_elt.getAttribute("style");
<xsl:text> this.inactive_elt_style = this.inactive_elt.getAttribute("style");
+ <xsl:if test="$have_disability"> + <xsl:text> this.disabled_elt_style = this.disabled_elt.getAttribute("style"); + <xsl:template mode="widget_subscribe" match="widget[@type='Jump']"> + <xsl:param name="hmi_element"/> + <xsl:variable name="activity"> + <xsl:call-template name="jump_widget_activity"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:variable name="have_activity" select="string-length($activity)>0"/> + <xsl:variable name="disability"> + <xsl:call-template name="jump_widget_disability"> + <xsl:with-param name="hmi_element" select="$hmi_element"/> + <xsl:variable name="have_disability" select="$have_activity and string-length($disability)>0"/> + <xsl:when test="$have_disability"> + <xsl:text> sub: subscribe, + <xsl:text> unsub: unsubscribe, + <xsl:text> apply_cache: widget_apply_cache, + <xsl:text> sub: function(){}, + <xsl:text> unsub: function(){}, + <xsl:text> apply_cache: function(){}, <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']">
<xsl:param name="page_desc"/>
@@ -1903,7 +2007,7 @@
<xsl:text> jump_history.push([page_name, page_index]);
- <xsl:text> if(jump_history.length > 4)
+ <xsl:text> if(jump_history.length > 42) <xsl:text> jump_history.shift();
--- a/svghmi/widget_jump.ysl2 Mon Mar 30 11:06:12 2020 +0200
+++ b/svghmi/widget_jump.ysl2 Mon Mar 30 14:26:42 2020 +0200
@@ -5,33 +5,70 @@
optional_labels("active inactive");
+function "jump_widget_disability" { + optional_labels("disabled"); template "widget[@type='Jump']", mode="widget_defs" {
- const "opts" call "jump_widget_activity" with "hmi_element", "$hmi_element";
- const "have_opt","string-length($opts)>0";
+ const "activity" call "jump_widget_activity" with "hmi_element", "$hmi_element"; + const "have_activity","string-length($activity)>0"; + const "disability" call "jump_widget_disability" with "hmi_element", "$hmi_element"; + const "have_disability","$have_activity and string-length($disability)>0"; + if "$have_disability" { + | dispatch: function(value) { + | this.disabled = !Number(value); + | console.log("disbled",value); + if "$have_disability" { + | this.disabled_elt.setAttribute("style", this.active_elt_style); + | this.inactive_elt.setAttribute("style", "display:none"); + | this.active_elt.setAttribute("style", "display:none"); + | this.disabled_elt.setAttribute("style", "display:none"); + | this.active_elt.setAttribute("style", this.active_elt_style); + | this.inactive_elt.setAttribute("style", "display:none"); + | this.inactive_elt.setAttribute("style", this.inactive_elt_style); + | this.active_elt.setAttribute("style", "display:none"); + if "$have_disability" { | on_click: function(evt) {
| const index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
| const name = this.args[0];
| switch_page(name, index);
| notify_page_change: function(page_name, index){
| const ref_index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
| const ref_name = this.args[0];
- | if((ref_name == undefined || ref_name == page_name) && index == ref_index) {
- | console.log("active", ref_name, ref_index, page_name, index);
- | this.active_elt.setAttribute("style", this.active_elt_style);
- | this.inactive_elt.setAttribute("style", "display:none");
- | console.log("inactive",ref_name, ref_index, page_name, index);
- | this.inactive_elt.setAttribute("style", this.inactive_elt_style);
- | this.active_elt.setAttribute("style", "display:none");
+ | this.active =((ref_name == undefined || ref_name == page_name) && index == ref_index); @@ -41,13 +78,37 @@
TODO : generalize mouse event handling by global event capture + getElementsAtPoint()
| this.element.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_click(evt)");
| this.active_elt_style = this.active_elt.getAttribute("style");
| this.inactive_elt_style = this.inactive_elt.getAttribute("style");
+ if "$have_disability" { + | this.disabled_elt_style = this.disabled_elt.getAttribute("style"); +// default : normal subscribing +template "widget[@type='Jump']", mode="widget_subscribe" { + const "activity" call "jump_widget_activity" with "hmi_element", "$hmi_element"; + const "have_activity","string-length($activity)>0"; + const "disability" call "jump_widget_disability" with "hmi_element", "$hmi_element"; + const "have_disability","$have_activity and string-length($disability)>0"; + when "$have_disability" { + | apply_cache: widget_apply_cache, + | apply_cache: function(){}, template "widget[@type='Jump']", mode="per_page_widget_template"{
/* check that given path is compatible with page's reference path */