svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2902 1fcb50af0335
parent 2901 3f5194bba67d
child 2903 881d0248b3ce
--- a/svghmi/gen_index_xhtml.xslt	Thu Mar 26 13:33:20 2020 +0100
+++ b/svghmi/gen_index_xhtml.xslt	Thu Mar 26 14:21:52 2020 +0100
@@ -694,6 +694,33 @@
       </xsl:otherwise>
     </xsl:choose>
   </func:function>
+  <xsl:template mode="widget_defs" match="widget[@type='Back']">
+    <xsl:param name="hmi_element"/>
+    <xsl:text>    on_click: function(evt) {
+</xsl:text>
+    <xsl:text>        console.log("Back !");
+</xsl:text>
+    <xsl:text>        if(jump_history.length &gt; 1){
+</xsl:text>
+    <xsl:text>           jump_history.pop();
+</xsl:text>
+    <xsl:text>           let [page_name, index] = jump_history.pop();
+</xsl:text>
+    <xsl:text>           switch_page(page_name, index);
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>    },
+</xsl:text>
+    <xsl:text>    init: function() {
+</xsl:text>
+    <xsl:text>        this.element.setAttribute("onclick", "hmi_widgets['</xsl:text>
+    <xsl:value-of select="$hmi_element/@id"/>
+    <xsl:text>'].on_click(evt)");
+</xsl:text>
+    <xsl:text>    },
+</xsl:text>
+  </xsl:template>
   <xsl:template mode="widget_defs" match="widget[@type='Display']">
     <xsl:param name="hmi_element"/>
     <xsl:text>    frequency: 5,
@@ -890,7 +917,9 @@
 </xsl:text>
     <xsl:text>        const index = this.indexes.length &gt; 0 ? this.indexes[0] + this.offset : undefined;
 </xsl:text>
-    <xsl:text>        switch_page(this.args[0], index);
+    <xsl:text>        const name = this.args[0];
+</xsl:text>
+    <xsl:text>        switch_page(name, index);
 </xsl:text>
     <xsl:text>    },
 </xsl:text>
@@ -1195,6 +1224,8 @@
 </xsl:text>
     <xsl:text>var need_cache_apply = []; 
 </xsl:text>
+    <xsl:text>var jump_history = [[default_page, undefined]];
+</xsl:text>
     <xsl:text>
 </xsl:text>
     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
@@ -1731,7 +1762,7 @@
 </xsl:text>
     <xsl:text>        /* TODO LOG ERROR */
 </xsl:text>
-    <xsl:text>        return;
+    <xsl:text>        return false;
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
@@ -1743,7 +1774,7 @@
 </xsl:text>
     <xsl:text>
 </xsl:text>
-    <xsl:text>    switch_subscribed_page(page_name, page_index);
+    <xsl:text>    return switch_subscribed_page(page_name, page_index);
 </xsl:text>
     <xsl:text>};
 </xsl:text>
@@ -1935,7 +1966,7 @@
 </xsl:text>
     <xsl:text>        /* TODO LOG ERROR */
 </xsl:text>
-    <xsl:text>        return;
+    <xsl:text>        return false;
 </xsl:text>
     <xsl:text>    }
 </xsl:text>
@@ -1975,6 +2006,14 @@
 </xsl:text>
     <xsl:text>    requestHMIAnimation();
 </xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    jump_history.push([page_name, page_index]);
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    return true;
+</xsl:text>
     <xsl:text>}
 </xsl:text>
     <xsl:text>