--- a/svghmi/gen_index_xhtml.xslt Fri Nov 04 10:55:30 2022 +0100
+++ b/svghmi/gen_index_xhtml.xslt Fri Nov 04 10:56:18 2022 +0100
@@ -637,6 +637,27 @@
<xsl:value-of select="$default_page"/>
+ <xsl:variable name="screensaverpage" select="$hmi_pages_descs[arg[1]/@value = 'ScreenSaver']"/> + <xsl:variable name="delay"> + <xsl:when test="$screensaverpage"> + <xsl:variable name="delaystr" select="$screensaverpage/arg[2]/@value"/> + <xsl:if test="not(regexp:test($delaystr,'^[0-9]+$'))"> + <xsl:message terminate="yes"> + <xsl:text>ScreenSaver page has missing or malformed delay argument.</xsl:text> + <xsl:value-of select="$delaystr"/> + <xsl:text>null</xsl:text> + <xsl:text>var screensaver_delay = </xsl:text> + <xsl:value-of select="$delay"/> @@ -2907,9 +2928,17 @@
<xsl:text> if(jump_history.length > 1){
- <xsl:text> jump_history.pop();
- <xsl:text> let [page_name, index] = jump_history.pop();
+ <xsl:text> let page_name, index; + <xsl:text> jump_history.pop(); // forget current page + <xsl:text> if(jump_history.length == 0) return; + <xsl:text> [page_name, index] = jump_history[jump_history.length-1]; + <xsl:text> } while(page_name == "ScreenSaver") // never go back to ScreenSaver <xsl:text> switch_page(page_name, index);
@@ -2919,7 +2948,7 @@
- <xsl:text> this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)");
+ <xsl:text> this.element.onclick = this.on_click.bind(this); @@ -12099,6 +12128,32 @@
+ <xsl:text>var screensaver_timer = null; + <xsl:text>function reset_screensaver_timer() { + <xsl:text> if(screensaver_timer){ + <xsl:text> window.clearTimeout(screensaver_timer); + <xsl:text> screensaver_timer = window.setTimeout(() => { + <xsl:text> switch_page("ScreenSaver"); + <xsl:text> screensaver_timer = null; + <xsl:text> }, screensaver_delay*1000); + <xsl:text>if(screensaver_delay) + <xsl:text> document.body.addEventListener('pointerdown', reset_screensaver_timer); <xsl:text>function detach_detachables() {
@@ -12237,11 +12292,17 @@
<xsl:text> requestHMIAnimation();
- <xsl:text> jump_history.push([page_name, page_index]);
- <xsl:text> if(jump_history.length > 42)
- <xsl:text> jump_history.shift();
+ <xsl:text> let [last_page_name, last_page_index] = jump_history[jump_history.length-1]; + <xsl:text> if(last_page_name != page_name || last_page_index != page_index){ + <xsl:text> jump_history.push([page_name, page_index]); + <xsl:text> if(jump_history.length > 42) + <xsl:text> jump_history.shift(); @@ -12413,6 +12474,12 @@
+ <xsl:text>// initialize screensaver + <xsl:text>reset_screensaver_timer(); <xsl:text>var reconnect_delay = 0;
<xsl:text>var periodic_reconnect_timer;