732 </xsl:otherwise> |
732 </xsl:otherwise> |
733 </xsl:choose> |
733 </xsl:choose> |
734 </func:function> |
734 </func:function> |
735 <xsl:variable name="_detachable_elements" select="func:detachable_elements($hmi_pages | $keypads)"/> |
735 <xsl:variable name="_detachable_elements" select="func:detachable_elements($hmi_pages | $keypads)"/> |
736 <xsl:variable name="detachable_elements" select="$_detachable_elements[not(ancestor::*/@id = $_detachable_elements/@id)]"/> |
736 <xsl:variable name="detachable_elements" select="$_detachable_elements[not(ancestor::*/@id = $_detachable_elements/@id)]"/> |
|
737 <declarations:page-class/> |
|
738 <xsl:template match="declarations:page-class"> |
|
739 <xsl:text> |
|
740 </xsl:text> |
|
741 <xsl:text>/* </xsl:text> |
|
742 <xsl:value-of select="local-name()"/> |
|
743 <xsl:text> */ |
|
744 </xsl:text> |
|
745 <xsl:text> |
|
746 </xsl:text> |
|
747 <xsl:text>class PageWidget extends Widget{} |
|
748 </xsl:text> |
|
749 <xsl:text> |
|
750 </xsl:text> |
|
751 </xsl:template> |
737 <declarations:detachable-elements/> |
752 <declarations:detachable-elements/> |
738 <xsl:template match="declarations:detachable-elements"> |
753 <xsl:template match="declarations:detachable-elements"> |
739 <xsl:text> |
754 <xsl:text> |
740 </xsl:text> |
755 </xsl:text> |
741 <xsl:text>/* </xsl:text> |
756 <xsl:text>/* </xsl:text> |
785 <xsl:variable name="page" select="."/> |
800 <xsl:variable name="page" select="."/> |
786 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
801 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
787 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
802 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
788 <xsl:variable name="all_page_widgets" select="$hmi_widgets[@id = $page_all_elements/@id and @id != $page/@id]"/> |
803 <xsl:variable name="all_page_widgets" select="$hmi_widgets[@id = $page_all_elements/@id and @id != $page/@id]"/> |
789 <xsl:variable name="page_managed_widgets" select="$all_page_widgets[not(@id=$in_forEach_widget_ids)]"/> |
804 <xsl:variable name="page_managed_widgets" select="$all_page_widgets[not(@id=$in_forEach_widget_ids)]"/> |
790 <xsl:variable name="page_relative_widgets" select="$page_managed_widgets[func:is_descendant_path(func:widget(@id)/path/@value, $desc/path/@value)]"/> |
805 <xsl:variable name="page_root_path" select="$desc/path[not(@assign)]"/> |
|
806 <xsl:if test="count($page_root_path)>1"> |
|
807 <xsl:message terminate="yes"> |
|
808 <xsl:text>Page id="</xsl:text> |
|
809 <xsl:value-of select="$page/@id"/> |
|
810 <xsl:text>" : only one root path can be declared</xsl:text> |
|
811 </xsl:message> |
|
812 </xsl:if> |
|
813 <xsl:variable name="page_relative_widgets" select="$page_managed_widgets[func:is_descendant_path(func:widget(@id)/path/@value, $page_root_path/@value)]"/> |
791 <xsl:variable name="sumarized_page" select="func:sumarized_elements($page_all_elements)"/> |
814 <xsl:variable name="sumarized_page" select="func:sumarized_elements($page_all_elements)"/> |
792 <xsl:variable name="required_detachables" select="$sumarized_page/ ancestor-or-self::*[@id = $detachable_elements/@id]"/> |
815 <xsl:variable name="required_detachables" select="$sumarized_page/ ancestor-or-self::*[@id = $detachable_elements/@id]"/> |
793 <xsl:text> "</xsl:text> |
816 <xsl:text> "</xsl:text> |
794 <xsl:value-of select="$pagename"/> |
817 <xsl:value-of select="$pagename"/> |
795 <xsl:text>": { |
818 <xsl:text>": { |
802 <xsl:value-of select="$p/@w"/> |
825 <xsl:value-of select="$p/@w"/> |
803 <xsl:text>, </xsl:text> |
826 <xsl:text>, </xsl:text> |
804 <xsl:value-of select="$p/@h"/> |
827 <xsl:value-of select="$p/@h"/> |
805 <xsl:text>], |
828 <xsl:text>], |
806 </xsl:text> |
829 </xsl:text> |
807 <xsl:if test="$desc/path/@value"> |
830 <xsl:if test="count($page_root_path)=1"> |
808 <xsl:if test="count($desc/path/@index)=0"> |
831 <xsl:if test="count($page_root_path/@index)=0"> |
809 <xsl:message terminate="no"> |
832 <xsl:message terminate="no"> |
810 <xsl:text>Page id="</xsl:text> |
833 <xsl:text>Page id="</xsl:text> |
811 <xsl:value-of select="$page/@id"/> |
834 <xsl:value-of select="$page/@id"/> |
812 <xsl:text>" : No match for path "</xsl:text> |
835 <xsl:text>" : No match for path "</xsl:text> |
813 <xsl:value-of select="$desc/path/@value"/> |
836 <xsl:value-of select="$page_root_path/@value"/> |
814 <xsl:text>" in HMI tree</xsl:text> |
837 <xsl:text>" in HMI tree</xsl:text> |
815 </xsl:message> |
838 </xsl:message> |
816 </xsl:if> |
839 </xsl:if> |
817 <xsl:text> page_index: </xsl:text> |
840 <xsl:text> page_index: </xsl:text> |
818 <xsl:value-of select="$desc/path/@index"/> |
841 <xsl:value-of select="$page_root_path/@index"/> |
819 <xsl:text>, |
842 <xsl:text>, |
820 </xsl:text> |
843 </xsl:text> |
821 <xsl:text> page_class: "</xsl:text> |
844 <xsl:text> page_class: "</xsl:text> |
822 <xsl:value-of select="$indexed_hmitree/*[@hmipath = $desc/path/@value]/@class"/> |
845 <xsl:value-of select="$indexed_hmitree/*[@hmipath = $page_root_path/@value]/@class"/> |
823 <xsl:text>", |
846 <xsl:text>", |
824 </xsl:text> |
847 </xsl:text> |
825 </xsl:if> |
848 </xsl:if> |
826 <xsl:text> widgets: [ |
849 <xsl:text> widgets: [ |
|
850 </xsl:text> |
|
851 <xsl:text> [hmi_widgets["</xsl:text> |
|
852 <xsl:value-of select="$page/@id"/> |
|
853 <xsl:text>"], []], |
827 </xsl:text> |
854 </xsl:text> |
828 <xsl:for-each select="$page_managed_widgets"> |
855 <xsl:for-each select="$page_managed_widgets"> |
829 <xsl:variable name="widget_paths_relativeness"> |
856 <xsl:variable name="widget_paths_relativeness"> |
830 <xsl:for-each select="func:widget(@id)/path"> |
857 <xsl:for-each select="func:widget(@id)/path"> |
831 <xsl:value-of select="func:is_descendant_path(@value, $desc/path/@value)"/> |
858 <xsl:value-of select="func:is_descendant_path(@value, $page_root_path/@value)"/> |
832 <xsl:if test="position()!=last()"> |
859 <xsl:if test="position()!=last()"> |
833 <xsl:text>,</xsl:text> |
860 <xsl:text>,</xsl:text> |
834 </xsl:if> |
861 </xsl:if> |
835 </xsl:for-each> |
862 </xsl:for-each> |
836 </xsl:variable> |
863 </xsl:variable> |
1438 <xsl:text>],</xsl:text> |
1465 <xsl:text>],</xsl:text> |
1439 <xsl:value-of select="$enable_expr"/> |
1466 <xsl:value-of select="$enable_expr"/> |
1440 <xsl:text>,{ |
1467 <xsl:text>,{ |
1441 </xsl:text> |
1468 </xsl:text> |
1442 <xsl:if test="$widget/@enable_expr"> |
1469 <xsl:if test="$widget/@enable_expr"> |
1443 <xsl:text> assignments: [], |
1470 <xsl:text> enable_assignments: [], |
1444 </xsl:text> |
1471 </xsl:text> |
1445 <xsl:text> compute_enable: function(value, oldval, varnum) { |
1472 <xsl:text> compute_enable: function(value, oldval, varnum) { |
1446 </xsl:text> |
1473 </xsl:text> |
1447 <xsl:text> let result = false; |
1474 <xsl:text> let result = false; |
1448 </xsl:text> |
1475 </xsl:text> |
1454 <xsl:if test="@assign"> |
1481 <xsl:if test="@assign"> |
1455 <xsl:for-each select="$widget/path[@assign]"> |
1482 <xsl:for-each select="$widget/path[@assign]"> |
1456 <xsl:if test="$varid = generate-id()"> |
1483 <xsl:if test="$varid = generate-id()"> |
1457 <xsl:text> if(varnum == </xsl:text> |
1484 <xsl:text> if(varnum == </xsl:text> |
1458 <xsl:value-of select="$varnum"/> |
1485 <xsl:value-of select="$varnum"/> |
1459 <xsl:text>) this.assignments[</xsl:text> |
1486 <xsl:text>) this.enable_assignments[</xsl:text> |
1460 <xsl:value-of select="position()-1"/> |
1487 <xsl:value-of select="position()-1"/> |
1461 <xsl:text>] = value; |
1488 <xsl:text>] = value; |
1462 </xsl:text> |
1489 </xsl:text> |
1463 <xsl:text> let </xsl:text> |
1490 <xsl:text> let </xsl:text> |
1464 <xsl:value-of select="@assign"/> |
1491 <xsl:value-of select="@assign"/> |
1465 <xsl:text> = this.assignments[</xsl:text> |
1492 <xsl:text> = this.enable_assignments[</xsl:text> |
1466 <xsl:value-of select="position()-1"/> |
1493 <xsl:value-of select="position()-1"/> |
1467 <xsl:text>]; |
1494 <xsl:text>]; |
1468 </xsl:text> |
1495 </xsl:text> |
1469 <xsl:text> if(</xsl:text> |
1496 <xsl:text> if(</xsl:text> |
1470 <xsl:value-of select="@assign"/> |
1497 <xsl:value-of select="@assign"/> |
2386 <xsl:value-of select="@type"/> |
2413 <xsl:value-of select="@type"/> |
2387 <xsl:text> widget is used in SVG but widget type is not declared</xsl:text> |
2414 <xsl:text> widget is used in SVG but widget type is not declared</xsl:text> |
2388 </xsl:message> |
2415 </xsl:message> |
2389 </xsl:template> |
2416 </xsl:template> |
2390 <xsl:variable name="included_ids" select="$parsed_widgets/widget[not(@type = $excluded_types) and not(@id = $discardable_elements/@id)]/@id"/> |
2417 <xsl:variable name="included_ids" select="$parsed_widgets/widget[not(@type = $excluded_types) and not(@id = $discardable_elements/@id)]/@id"/> |
|
2418 <xsl:variable name="page_ids" select="$parsed_widgets/widget[@type = 'Page']/@id"/> |
2391 <xsl:variable name="hmi_widgets" select="$hmi_elements[@id = $included_ids]"/> |
2419 <xsl:variable name="hmi_widgets" select="$hmi_elements[@id = $included_ids]"/> |
|
2420 <xsl:variable name="page_widgets" select="$hmi_elements[@id = $page_ids]"/> |
2392 <xsl:variable name="result_widgets" select="$result_svg_ns//*[@id = $hmi_widgets/@id]"/> |
2421 <xsl:variable name="result_widgets" select="$result_svg_ns//*[@id = $hmi_widgets/@id]"/> |
2393 <declarations:hmi-elements/> |
2422 <declarations:hmi-elements/> |
2394 <xsl:template match="declarations:hmi-elements"> |
2423 <xsl:template match="declarations:hmi-elements"> |
2395 <xsl:text> |
2424 <xsl:text> |
2396 </xsl:text> |
2425 </xsl:text> |
7191 </xsl:if> |
7220 </xsl:if> |
7192 <xsl:text> |
7221 <xsl:text> |
7193 </xsl:text> |
7222 </xsl:text> |
7194 </xsl:for-each> |
7223 </xsl:for-each> |
7195 <xsl:text> ], |
7224 <xsl:text> ], |
|
7225 </xsl:text> |
|
7226 </xsl:template> |
|
7227 <xsl:template match="widget[@type='Page']" mode="widget_desc"> |
|
7228 <type> |
|
7229 <xsl:value-of select="@type"/> |
|
7230 </type> |
|
7231 <longdesc> |
|
7232 <xsl:text> |
|
7233 </xsl:text> |
|
7234 <xsl:text>Arguments are either: |
|
7235 </xsl:text> |
|
7236 <xsl:text> |
|
7237 </xsl:text> |
|
7238 <xsl:text>- XXX reference path TODO |
|
7239 </xsl:text> |
|
7240 <xsl:text> |
|
7241 </xsl:text> |
|
7242 <xsl:text>- name=value: setting variable with literal value. |
|
7243 </xsl:text> |
|
7244 <xsl:text>- name=other_name: copy variable content into another |
|
7245 </xsl:text> |
|
7246 <xsl:text> |
|
7247 </xsl:text> |
|
7248 <xsl:text>"active"+"inactive" labeled elements can be provided to show feedback when pressed |
|
7249 </xsl:text> |
|
7250 <xsl:text> |
|
7251 </xsl:text> |
|
7252 <xsl:text>Exemples: |
|
7253 </xsl:text> |
|
7254 <xsl:text> |
|
7255 </xsl:text> |
|
7256 <xsl:text>HMI:Page:notify=1@notify=/PLCVAR |
|
7257 </xsl:text> |
|
7258 <xsl:text>HMI:Page:ack=2:notify=1@ack=.local_var@notify=/PLCVAR |
|
7259 </xsl:text> |
|
7260 <xsl:text> |
|
7261 </xsl:text> |
|
7262 </longdesc> |
|
7263 <shortdesc> |
|
7264 <xsl:text>Page </xsl:text> |
|
7265 </shortdesc> |
|
7266 </xsl:template> |
|
7267 <xsl:template match="widget[@type='Page']" mode="widget_defs"> |
|
7268 <xsl:param name="hmi_element"/> |
|
7269 <xsl:variable name="disability"> |
|
7270 <xsl:call-template name="defs_by_labels"> |
|
7271 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
|
7272 <xsl:with-param name="labels"> |
|
7273 <xsl:text>/disabled</xsl:text> |
|
7274 </xsl:with-param> |
|
7275 <xsl:with-param name="mandatory" select="'no'"/> |
|
7276 </xsl:call-template> |
|
7277 </xsl:variable> |
|
7278 <xsl:value-of select="$disability"/> |
|
7279 <xsl:variable name="has_disability" select="string-length($disability)>0"/> |
|
7280 <xsl:text> assignments: {}, |
|
7281 </xsl:text> |
|
7282 <xsl:text> dispatch: function(value, oldval, varnum) { |
|
7283 </xsl:text> |
|
7284 <xsl:variable name="widget" select="."/> |
|
7285 <xsl:for-each select="path"> |
|
7286 <xsl:variable name="varid" select="generate-id()"/> |
|
7287 <xsl:variable name="varnum" select="position()-1"/> |
|
7288 <xsl:if test="@assign"> |
|
7289 <xsl:for-each select="$widget/path[@assign]"> |
|
7290 <xsl:if test="$varid = generate-id()"> |
|
7291 <xsl:text> if(varnum == </xsl:text> |
|
7292 <xsl:value-of select="$varnum"/> |
|
7293 <xsl:text>) this.assignments["</xsl:text> |
|
7294 <xsl:value-of select="@assign"/> |
|
7295 <xsl:text>"] = value; |
|
7296 </xsl:text> |
|
7297 </xsl:if> |
|
7298 </xsl:for-each> |
|
7299 </xsl:if> |
|
7300 </xsl:for-each> |
|
7301 <xsl:text> }, |
|
7302 </xsl:text> |
|
7303 <xsl:text> assign: function() { |
|
7304 </xsl:text> |
|
7305 <xsl:variable name="paths" select="path"/> |
|
7306 <xsl:for-each select="arg[contains(@value,'=')]"> |
|
7307 <xsl:variable name="name" select="substring-before(@value,'=')"/> |
|
7308 <xsl:variable name="value" select="substring-after(@value,'=')"/> |
|
7309 <xsl:variable name="index"> |
|
7310 <xsl:for-each select="$paths"> |
|
7311 <xsl:if test="@assign = $name"> |
|
7312 <xsl:value-of select="position()-1"/> |
|
7313 </xsl:if> |
|
7314 </xsl:for-each> |
|
7315 </xsl:variable> |
|
7316 <xsl:variable name="isVarName" select="regexp:test($value,'^[a-zA-Z_][a-zA-Z0-9_]+$')"/> |
|
7317 <xsl:choose> |
|
7318 <xsl:when test="$isVarName"> |
|
7319 <xsl:text> const </xsl:text> |
|
7320 <xsl:value-of select="$value"/> |
|
7321 <xsl:text> = this.assignments["</xsl:text> |
|
7322 <xsl:value-of select="$value"/> |
|
7323 <xsl:text>"]; |
|
7324 </xsl:text> |
|
7325 <xsl:text> if(</xsl:text> |
|
7326 <xsl:value-of select="$value"/> |
|
7327 <xsl:text> != undefined) |
|
7328 </xsl:text> |
|
7329 <xsl:text> this.apply_hmi_value(</xsl:text> |
|
7330 <xsl:value-of select="$index"/> |
|
7331 <xsl:text>, </xsl:text> |
|
7332 <xsl:value-of select="$value"/> |
|
7333 <xsl:text>); |
|
7334 </xsl:text> |
|
7335 </xsl:when> |
|
7336 <xsl:otherwise> |
|
7337 <xsl:text> this.apply_hmi_value(</xsl:text> |
|
7338 <xsl:value-of select="$index"/> |
|
7339 <xsl:text>, </xsl:text> |
|
7340 <xsl:value-of select="$value"/> |
|
7341 <xsl:text>); |
|
7342 </xsl:text> |
|
7343 </xsl:otherwise> |
|
7344 </xsl:choose> |
|
7345 </xsl:for-each> |
|
7346 <xsl:text> }, |
7196 </xsl:text> |
7347 </xsl:text> |
7197 </xsl:template> |
7348 </xsl:template> |
7198 <xsl:template match="widget[@type='PathSlider']" mode="widget_desc"> |
7349 <xsl:template match="widget[@type='PathSlider']" mode="widget_desc"> |
7199 <type> |
7350 <type> |
7200 <xsl:value-of select="@type"/> |
7351 <xsl:value-of select="@type"/> |
12126 </xsl:text> |
12277 </xsl:text> |
12127 <xsl:text>}); |
12278 <xsl:text>}); |
12128 </xsl:text> |
12279 </xsl:text> |
12129 <xsl:text> |
12280 <xsl:text> |
12130 </xsl:text> |
12281 </xsl:text> |
12131 <xsl:text>var screensaver_timer = null; |
12282 <xsl:text>if(screensaver_delay){ |
12132 </xsl:text> |
12283 </xsl:text> |
12133 <xsl:text>function reset_screensaver_timer() { |
12284 <xsl:text> var screensaver_timer = null; |
12134 </xsl:text> |
12285 </xsl:text> |
12135 <xsl:text> if(screensaver_timer){ |
12286 <xsl:text> function reset_screensaver_timer() { |
12136 </xsl:text> |
12287 </xsl:text> |
12137 <xsl:text> window.clearTimeout(screensaver_timer); |
12288 <xsl:text> if(screensaver_timer){ |
|
12289 </xsl:text> |
|
12290 <xsl:text> window.clearTimeout(screensaver_timer); |
|
12291 </xsl:text> |
|
12292 <xsl:text> } |
|
12293 </xsl:text> |
|
12294 <xsl:text> screensaver_timer = window.setTimeout(() => { |
|
12295 </xsl:text> |
|
12296 <xsl:text> switch_page("ScreenSaver"); |
|
12297 </xsl:text> |
|
12298 <xsl:text> screensaver_timer = null; |
|
12299 </xsl:text> |
|
12300 <xsl:text> }, screensaver_delay*1000); |
12138 </xsl:text> |
12301 </xsl:text> |
12139 <xsl:text> } |
12302 <xsl:text> } |
12140 </xsl:text> |
12303 </xsl:text> |
12141 <xsl:text> screensaver_timer = window.setTimeout(() => { |
12304 <xsl:text> document.body.addEventListener('pointerdown', reset_screensaver_timer); |
12142 </xsl:text> |
12305 </xsl:text> |
12143 <xsl:text> switch_page("ScreenSaver"); |
12306 <xsl:text> // initialize screensaver |
12144 </xsl:text> |
12307 </xsl:text> |
12145 <xsl:text> screensaver_timer = null; |
12308 <xsl:text> reset_screensaver_timer(); |
12146 </xsl:text> |
|
12147 <xsl:text> }, screensaver_delay*1000); |
|
12148 </xsl:text> |
12309 </xsl:text> |
12149 <xsl:text>} |
12310 <xsl:text>} |
12150 </xsl:text> |
12311 </xsl:text> |
12151 <xsl:text>if(screensaver_delay) |
12312 <xsl:text> |
12152 </xsl:text> |
|
12153 <xsl:text> document.body.addEventListener('pointerdown', reset_screensaver_timer); |
|
12154 </xsl:text> |
12313 </xsl:text> |
12155 <xsl:text> |
12314 <xsl:text> |
12156 </xsl:text> |
12315 </xsl:text> |
12157 <xsl:text>function detach_detachables() { |
12316 <xsl:text>function detach_detachables() { |
12158 </xsl:text> |
12317 </xsl:text> |
12538 </xsl:text> |
12701 </xsl:text> |
12539 <xsl:text> console.log("Connection closed. code:"+evt.code+" reason:"+evt.reason+" wasClean:"+evt.wasClean+" Reload in "+reconnect_delay+"ms."); |
12702 <xsl:text> console.log("Connection closed. code:"+evt.code+" reason:"+evt.reason+" wasClean:"+evt.wasClean+" Reload in "+reconnect_delay+"ms."); |
12540 </xsl:text> |
12703 </xsl:text> |
12541 <xsl:text> ws = null; |
12704 <xsl:text> ws = null; |
12542 </xsl:text> |
12705 </xsl:text> |
12543 <xsl:text> // reconect |
12706 <xsl:text> // Do not attempt to reconnect immediately in case: |
12544 </xsl:text> |
12707 </xsl:text> |
12545 <xsl:text> // TODO : add visible notification while waiting for reload |
12708 <xsl:text> // - connection was closed by server (PLC stop) |
|
12709 </xsl:text> |
|
12710 <xsl:text> // - connection was closed locally with an intention to reconnect |
|
12711 </xsl:text> |
|
12712 <xsl:text> if(evt.code=1000 && !force_reconnect){ |
|
12713 </xsl:text> |
|
12714 <xsl:text> window.alert("Connection closed by server"); |
|
12715 </xsl:text> |
|
12716 <xsl:text> location.reload(); |
|
12717 </xsl:text> |
|
12718 <xsl:text> } |
12546 </xsl:text> |
12719 </xsl:text> |
12547 <xsl:text> window.setTimeout(create_ws, reconnect_delay); |
12720 <xsl:text> window.setTimeout(create_ws, reconnect_delay); |
12548 </xsl:text> |
12721 </xsl:text> |
12549 <xsl:text> reconnect_delay += 500; |
12722 <xsl:text> reconnect_delay += 500; |
|
12723 </xsl:text> |
|
12724 <xsl:text> force_reconnect = false; |
12550 </xsl:text> |
12725 </xsl:text> |
12551 <xsl:text>}; |
12726 <xsl:text>}; |
12552 </xsl:text> |
12727 </xsl:text> |
12553 <xsl:text> |
12728 <xsl:text> |
12554 </xsl:text> |
12729 </xsl:text> |