--- a/svghmi/detachable_pages.ysl2 Fri Oct 28 10:42:35 2022 +0200
+++ b/svghmi/detachable_pages.ysl2 Fri Nov 04 10:51:45 2022 +0100
@@ -25,6 +25,17 @@
emit "preamble:default-page" {
| var default_page = "«$default_page»";
+ const "screensaverpage", "$hmi_pages_descs[arg[1]/@value = 'ScreenSaver']"; + when "$screensaverpage" { + const "delaystr", "$screensaverpage/arg[2]/@value"; + if "not(regexp:test($delaystr,'^[0-9]+$'))" + error > ScreenSaver page has missing or malformed delay argument. + | var screensaver_delay = «$delay»; const "keypads_descs", "$parsed_widgets/widget[@type = 'Keypad']";
--- a/svghmi/svghmi.js Fri Oct 28 10:42:35 2022 +0200
+++ b/svghmi/svghmi.js Fri Nov 04 10:51:45 2022 +0100
@@ -428,6 +428,19 @@
+var screensaver_timer = null; +function reset_screensaver_timer() { + window.clearTimeout(screensaver_timer); + screensaver_timer = window.setTimeout(() => { + switch_page("ScreenSaver"); + screensaver_timer = null; + }, screensaver_delay*1000); + document.body.addEventListener('pointerdown', reset_screensaver_timer); function detach_detachables() {
for(let eltid in detachable_elements){
@@ -497,9 +510,12 @@
jumps_need_update = true;
- jump_history.push([page_name, page_index]);
- if(jump_history.length > 42)
+ let [last_page_name, last_page_index] = jump_history[jump_history.length-1]; + if(last_page_name != page_name || last_page_index != page_index){ + jump_history.push([page_name, page_index]); + if(jump_history.length > 42) apply_hmi_value(current_page_var_index, page_index == undefined
@@ -585,6 +601,9 @@
switch_page(default_page);
+// initialize screensaver +reset_screensaver_timer(); var periodic_reconnect_timer;
--- a/svghmi/widget_back.ysl2 Fri Oct 28 10:42:35 2022 +0200
+++ b/svghmi/widget_back.ysl2 Fri Nov 04 10:51:45 2022 +0100
@@ -14,8 +14,12 @@
if(jump_history.length > 1){
- let [page_name, index] = jump_history.pop();
+ jump_history.pop(); // forget current page + if(jump_history.length == 0) return; + [page_name, index] = jump_history[jump_history.length-1]; + } while(page_name == "ScreenSaver") // never go back to ScreenSaver switch_page(page_name, index);