svghmi/gen_index_xhtml.xslt
branchwxPython4
changeset 3688 c2992796a859
parent 3665 db7e4952b64f
parent 3687 747ffdafbe31
child 3692 a9b787d84846
equal deleted inserted replaced
3679:b6bca75bf3fa 3688:c2992796a859
   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)&gt;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/&#10;           ancestor-or-self::*[@id = $detachable_elements/@id]"/>
   815     <xsl:variable name="required_detachables" select="$sumarized_page/&#10;           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>
  2400 </xsl:text>
  2429 </xsl:text>
  2401     <xsl:text>
  2430     <xsl:text>
  2402 </xsl:text>
  2431 </xsl:text>
  2403     <xsl:text>var hmi_widgets = {
  2432     <xsl:text>var hmi_widgets = {
  2404 </xsl:text>
  2433 </xsl:text>
  2405     <xsl:apply-templates mode="hmi_widgets" select="$hmi_widgets"/>
  2434     <xsl:apply-templates mode="hmi_widgets" select="$hmi_widgets | $page_widgets"/>
  2406     <xsl:text>}
  2435     <xsl:text>}
  2407 </xsl:text>
  2436 </xsl:text>
  2408     <xsl:text>
  2437     <xsl:text>
  2409 </xsl:text>
  2438 </xsl:text>
  2410     <xsl:text>
  2439     <xsl:text>
  6365         </xsl:choose>
  6394         </xsl:choose>
  6366       </xsl:variable>
  6395       </xsl:variable>
  6367       <xsl:variable name="target_page_path">
  6396       <xsl:variable name="target_page_path">
  6368         <xsl:choose>
  6397         <xsl:choose>
  6369           <xsl:when test="arg">
  6398           <xsl:when test="arg">
  6370             <xsl:value-of select="$hmi_pages_descs[arg[1]/@value = $target_page_name]/path[1]/@value"/>
  6399             <xsl:value-of select="$hmi_pages_descs[arg[1]/@value = $target_page_name]/path[not(@assign)]/@value"/>
  6371           </xsl:when>
  6400           </xsl:when>
  6372           <xsl:otherwise>
  6401           <xsl:otherwise>
  6373             <xsl:value-of select="$page_desc/path[1]/@value"/>
  6402             <xsl:value-of select="$page_desc/path[not(@assign)]/@value"/>
  6374           </xsl:otherwise>
  6403           </xsl:otherwise>
  6375         </xsl:choose>
  6404         </xsl:choose>
  6376       </xsl:variable>
  6405       </xsl:variable>
  6377       <xsl:if test="not(func:same_class_paths($target_page_path, path[1]/@value))">
  6406       <xsl:if test="not(func:same_class_paths($target_page_path, path[1]/@value))">
  6378         <xsl:message terminate="yes">
  6407         <xsl:message terminate="yes">
  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)&gt;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(() =&gt; {
       
 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(() =&gt; {
 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>
 12312 </xsl:text>
 12471 </xsl:text>
 12313           <xsl:text>        : page_name + "@" + hmitree_paths[page_index]);
 12472           <xsl:text>        : page_name + "@" + hmitree_paths[page_index]);
 12314 </xsl:text>
 12473 </xsl:text>
 12315           <xsl:text>
 12474           <xsl:text>
 12316 </xsl:text>
 12475 </xsl:text>
       
 12476           <xsl:text>    // when entering a page, assignments are evaluated
       
 12477 </xsl:text>
       
 12478           <xsl:text>    new_desc.widgets[0][0].assign();
       
 12479 </xsl:text>
       
 12480           <xsl:text>
       
 12481 </xsl:text>
 12317           <xsl:text>    return true;
 12482           <xsl:text>    return true;
 12318 </xsl:text>
 12483 </xsl:text>
 12319           <xsl:text>};
 12484           <xsl:text>};
 12320 </xsl:text>
 12485 </xsl:text>
 12321           <xsl:text>
 12486           <xsl:text>
 12472 </xsl:text>
 12637 </xsl:text>
 12473           <xsl:text>switch_page(default_page);
 12638           <xsl:text>switch_page(default_page);
 12474 </xsl:text>
 12639 </xsl:text>
 12475           <xsl:text>
 12640           <xsl:text>
 12476 </xsl:text>
 12641 </xsl:text>
 12477           <xsl:text>// initialize screensaver
       
 12478 </xsl:text>
       
 12479           <xsl:text>reset_screensaver_timer();
       
 12480 </xsl:text>
       
 12481           <xsl:text>
       
 12482 </xsl:text>
       
 12483           <xsl:text>var reconnect_delay = 0;
 12642           <xsl:text>var reconnect_delay = 0;
 12484 </xsl:text>
 12643 </xsl:text>
 12485           <xsl:text>var periodic_reconnect_timer;
 12644           <xsl:text>var periodic_reconnect_timer;
 12486 </xsl:text>
 12645 </xsl:text>
       
 12646           <xsl:text>var force_reconnect = false;
       
 12647 </xsl:text>
 12487           <xsl:text>
 12648           <xsl:text>
 12488 </xsl:text>
 12649 </xsl:text>
 12489           <xsl:text>// Once connection established
 12650           <xsl:text>// Once connection established
 12490 </xsl:text>
 12651 </xsl:text>
 12491           <xsl:text>function ws_onopen(evt) {
 12652           <xsl:text>function ws_onopen(evt) {
 12502 </xsl:text>
 12663 </xsl:text>
 12503           <xsl:text>        }
 12664           <xsl:text>        }
 12504 </xsl:text>
 12665 </xsl:text>
 12505           <xsl:text>        periodic_reconnect_timer = window.setTimeout(() =&gt; {
 12666           <xsl:text>        periodic_reconnect_timer = window.setTimeout(() =&gt; {
 12506 </xsl:text>
 12667 </xsl:text>
       
 12668           <xsl:text>            force_reconnect = true;
       
 12669 </xsl:text>
 12507           <xsl:text>            ws.close();
 12670           <xsl:text>            ws.close();
 12508 </xsl:text>
 12671 </xsl:text>
 12509           <xsl:text>            periodic_reconnect_timer = null;
 12672           <xsl:text>            periodic_reconnect_timer = null;
 12510 </xsl:text>
 12673 </xsl:text>
 12511           <xsl:text>        }, 3600000);
 12674           <xsl:text>        }, 3600000);
 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 &amp;&amp; !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>