svghmi/gen_index_xhtml.xslt
changeset 3687 747ffdafbe31
parent 3684 2239f8e3de48
child 3688 c2992796a859
child 3709 7fbcc7b741b7
equal deleted inserted replaced
3686:a3c509e66695 3687:747ffdafbe31
   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"/>
 12320 </xsl:text>
 12471 </xsl:text>
 12321           <xsl:text>        : page_name + "@" + hmitree_paths[page_index]);
 12472           <xsl:text>        : page_name + "@" + hmitree_paths[page_index]);
 12322 </xsl:text>
 12473 </xsl:text>
 12323           <xsl:text>
 12474           <xsl:text>
 12324 </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>
 12325           <xsl:text>    return true;
 12482           <xsl:text>    return true;
 12326 </xsl:text>
 12483 </xsl:text>
 12327           <xsl:text>};
 12484           <xsl:text>};
 12328 </xsl:text>
 12485 </xsl:text>
 12329           <xsl:text>
 12486           <xsl:text>