--- 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:template mode="widget_defs" match="widget[@type='Back']"> + <xsl:param name="hmi_element"/> + <xsl:text> on_click: function(evt) { + <xsl:text> console.log("Back !"); + <xsl:text> if(jump_history.length > 1){ + <xsl:text> jump_history.pop(); + <xsl:text> let [page_name, index] = jump_history.pop(); + <xsl:text> switch_page(page_name, index); + <xsl:text> init: function() { + <xsl:text> this.element.setAttribute("onclick", "hmi_widgets['</xsl:text> + <xsl:value-of select="$hmi_element/@id"/> + <xsl:text>'].on_click(evt)"); <xsl:template mode="widget_defs" match="widget[@type='Display']">
<xsl:param name="hmi_element"/>
@@ -890,7 +917,9 @@
<xsl:text> const index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
- <xsl:text> switch_page(this.args[0], index);
+ <xsl:text> const name = this.args[0]; + <xsl:text> switch_page(name, index); @@ -1195,6 +1224,8 @@
<xsl:text>var need_cache_apply = [];
+ <xsl:text>var jump_history = [[default_page, undefined]]; <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
@@ -1731,7 +1762,7 @@
<xsl:text> /* TODO LOG ERROR */
+ <xsl:text> return false; @@ -1743,7 +1774,7 @@
- <xsl:text> switch_subscribed_page(page_name, page_index);
+ <xsl:text> return switch_subscribed_page(page_name, page_index); @@ -1935,7 +1966,7 @@
<xsl:text> /* TODO LOG ERROR */
+ <xsl:text> return false; @@ -1975,6 +2006,14 @@
<xsl:text> requestHMIAnimation();
+ <xsl:text> jump_history.push([page_name, page_index]); + <xsl:text> return true; --- a/svghmi/svghmi.js Thu Mar 26 13:33:20 2020 +0100
+++ b/svghmi/svghmi.js Thu Mar 26 14:21:52 2020 +0100
@@ -3,6 +3,7 @@
var cache = hmitree_types.map(_ignored => undefined);
var need_cache_apply = [];
+var jump_history = [[default_page, undefined]]; function dispatch_value_to_widget(widget, index, value, oldval) {
@@ -271,13 +272,13 @@
if(current_subscribed_page != current_visible_page){
/* page switch already going */
if(page_name == undefined)
page_name = current_subscribed_page;
- switch_subscribed_page(page_name, page_index);
+ return switch_subscribed_page(page_name, page_index); @@ -373,7 +374,7 @@
if(new_desc == undefined){
if(page_index == undefined){
@@ -393,6 +394,10 @@
current_subscribed_page = page_name;
+ jump_history.push([page_name, page_index]); function switch_visible_page(page_name) {
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/svghmi/widget_back.ysl2 Thu Mar 26 14:21:52 2020 +0100
@@ -0,0 +1,18 @@
+template "widget[@type='Back']", mode="widget_defs" { + | on_click: function(evt) { + | console.log("Back !"); + | if(jump_history.length > 1){ + | let [page_name, index] = jump_history.pop(); + | switch_page(page_name, index); + | this.element.setAttribute("onclick", "hmi_widgets['«$hmi_element/@id»'].on_click(evt)"); --- a/svghmi/widget_jump.ysl2 Thu Mar 26 13:33:20 2020 +0100
+++ b/svghmi/widget_jump.ysl2 Thu Mar 26 14:21:52 2020 +0100
@@ -5,7 +5,8 @@
| on_click: function(evt) {
| const index = this.indexes.length > 0 ? this.indexes[0] + this.offset : undefined;
- | switch_page(this.args[0], index);
+ | const name = this.args[0]; + | switch_page(name, index); /* registering event this way does not "click" through svg:use