--- a/svghmi/gen_index_xhtml.xslt Tue Jul 12 12:12:52 2022 +0200
+++ b/svghmi/gen_index_xhtml.xslt Wed Jul 13 14:40:42 2022 +0200
@@ -4880,6 +4880,7 @@
<xsl:variable name="have_edit" select="string-length($edit_elt)>0"/>
<xsl:value-of select="$edit_elt"/>
+ <xsl:variable name="action_elements" select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]"/> <xsl:if test="$have_value">
@@ -4920,6 +4921,14 @@
+ <xsl:for-each select="$action_elements"> + <xsl:text> action_elt_</xsl:text> + <xsl:value-of select="position()"/> + <xsl:text>: id("</xsl:text> + <xsl:value-of select="@id"/> <xsl:text> init: function() {
<xsl:if test="$have_edit">
@@ -4936,10 +4945,10 @@
<xsl:text> this.animate();
- <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]">
- <xsl:text> id("</xsl:text>
- <xsl:value-of select="@id"/>
- <xsl:text>").onclick = () => this.on_op_click("</xsl:text>
+ <xsl:for-each select="$action_elements"> + <xsl:text> this.action_elt_</xsl:text> + <xsl:value-of select="position()"/> + <xsl:text>.onclick = () => this.on_op_click("</xsl:text> <xsl:value-of select="func:escape_quotes(@inkscape:label)"/>
@@ -5585,6 +5594,12 @@
<xsl:text> this.disabled = !Number(value);
+ <xsl:text> // TODO : use RequestAnimate and animate() <xsl:text> this.update_state();
@@ -5696,7 +5711,7 @@
<xsl:text>.fade-out-page {
- <xsl:text> animation: fadeOut 0.6s both;
+ <xsl:text> animation: cubic-bezier(0, 0.8, 0.6, 1) fadeOut 0.6s both; @@ -6324,6 +6339,8 @@
+ <xsl:text> // TODO : use RequestAnimate and animate() @@ -10499,40 +10516,92 @@
<xsl:text>function animate() {
- <xsl:text> // Do the page swith if any one pending
- <xsl:text> if(current_subscribed_page != current_visible_page){
- <xsl:text> switch_visible_page(current_subscribed_page);
- <xsl:text> while(widget = need_cache_apply.pop()){
- <xsl:text> widget.apply_cache();
- <xsl:text> if(jumps_need_update) update_jumps();
- <xsl:text> apply_updates();
- <xsl:text> pending_widget_animates.forEach(widget => widget._animate());
- <xsl:text> pending_widget_animates = [];
+ <xsl:text> let rearm = true; + <xsl:text> if(page_fading == "pending" || page_fading == "forced"){ + <xsl:text> if(page_fading == "pending") + <xsl:text> svg_root.classList.add("fade-out-page"); + <xsl:text> page_fading = "in_progress"; + <xsl:text> if(page_fading_args.length) + <xsl:text> setTimeout(function(){ + <xsl:text> switch_page(...page_fading_args); + <xsl:text> // Do the page swith if pending + <xsl:text> if(page_switch_in_progress){ + <xsl:text> if(current_subscribed_page != current_visible_page){ + <xsl:text> switch_visible_page(current_subscribed_page); + <xsl:text> page_switch_in_progress = false; + <xsl:text> if(page_fading == "in_progress"){ + <xsl:text> svg_root.classList.remove("fade-out-page"); + <xsl:text> page_fading = "off"; + <xsl:text> while(widget = need_cache_apply.pop()){ + <xsl:text> widget.apply_cache(); + <xsl:text> if(jumps_need_update) update_jumps(); + <xsl:text> apply_updates(); + <xsl:text> pending_widget_animates.forEach(widget => widget._animate()); + <xsl:text> pending_widget_animates = []; + <xsl:text> rearm = false; <xsl:text> requestAnimationFrameID = null;
+ <xsl:text> if(rearm) requestHMIAnimation(); @@ -10787,21 +10856,27 @@
- <xsl:text>var page_fading_in_progress = false;
+ <xsl:text>var page_fading = "off"; + <xsl:text>var page_fading_args = "off"; <xsl:text>function fading_page_switch(...args){
- <xsl:text> svg_root.classList.add("fade-out-page");
- <xsl:text> page_fading_in_progress = true;
- <xsl:text> setTimeout(function(){
- <xsl:text> switch_page(...args);
+ <xsl:text> if(page_fading == "in_progress") + <xsl:text> page_fading = "forced"; + <xsl:text> page_fading = "pending"; + <xsl:text> page_fading_args = args; + <xsl:text> requestHMIAnimation(); @@ -11163,6 +11238,8 @@
<xsl:text>var page_node_local_index = hmi_local_index("page_node");
+ <xsl:text>var page_switch_in_progress = false; <xsl:text>function toggleFullscreen() {
@@ -11217,7 +11294,7 @@
<xsl:text>function switch_page(page_name, page_index) {
- <xsl:text> if(current_subscribed_page != current_visible_page){
+ <xsl:text> if(page_switch_in_progress){ <xsl:text> /* page switch already going */
@@ -11227,6 +11304,8 @@
+ <xsl:text> page_switch_in_progress = true; <xsl:text> if(page_name == undefined)
@@ -11409,12 +11488,6 @@
<xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
- <xsl:text> if(page_fading_in_progress)
- <xsl:text> svg_root.classList.remove("fade-out-page");
- <xsl:text> page_fading_in_progress = false;
<xsl:text> current_visible_page = page_name;