svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 3238 8a9d4c794cba
parent 3229 c5be4fd425e7
child 3241 fe945f1f48b7
equal deleted inserted replaced
3237:d000a91d1e95 3238:8a9d4c794cba
   134       <xsl:with-param name="parentpath">
   134       <xsl:with-param name="parentpath">
   135         <xsl:value-of select="$parentpath"/>
   135         <xsl:value-of select="$parentpath"/>
   136       </xsl:with-param>
   136       </xsl:with-param>
   137     </xsl:apply-templates>
   137     </xsl:apply-templates>
   138   </xsl:template>
   138   </xsl:template>
       
   139   <xsl:variable name="pathregex" select="'^([^\[,]+)(\[[^\]]+\])?([\d,]*)$'"/>
   139   <xsl:template mode="parselabel" match="*">
   140   <xsl:template mode="parselabel" match="*">
   140     <xsl:variable name="label" select="@inkscape:label"/>
   141     <xsl:variable name="label" select="@inkscape:label"/>
   141     <xsl:variable name="id" select="@id"/>
   142     <xsl:variable name="id" select="@id"/>
   142     <xsl:variable name="description" select="substring-after($label,'HMI:')"/>
   143     <xsl:variable name="description" select="substring-after($label,'HMI:')"/>
   143     <xsl:variable name="_args" select="substring-before($description,'@')"/>
   144     <xsl:variable name="_args" select="substring-before($description,'@')"/>
   179         </xsl:for-each>
   180         </xsl:for-each>
   180         <xsl:variable name="paths" select="substring-after($description,'@')"/>
   181         <xsl:variable name="paths" select="substring-after($description,'@')"/>
   181         <xsl:for-each select="str:split($paths, '@')">
   182         <xsl:for-each select="str:split($paths, '@')">
   182           <xsl:if test="string-length(.) &gt; 0">
   183           <xsl:if test="string-length(.) &gt; 0">
   183             <path>
   184             <path>
   184               <xsl:variable name="pathminmax" select="str:split(.,',')"/>
   185               <xsl:variable name="path_match" select="regexp:match(.,$pathregex)"/>
   185               <xsl:variable name="path" select="$pathminmax[1]"/>
   186               <xsl:variable name="pathminmax" select="str:split($path_match[4],',')"/>
       
   187               <xsl:variable name="path" select="$path_match[2]"/>
       
   188               <xsl:variable name="path_accepts" select="$path_match[3]"/>
   186               <xsl:variable name="pathminmaxcount" select="count($pathminmax)"/>
   189               <xsl:variable name="pathminmaxcount" select="count($pathminmax)"/>
   187               <xsl:attribute name="value">
   190               <xsl:attribute name="value">
   188                 <xsl:value-of select="$path"/>
   191                 <xsl:value-of select="$path"/>
   189               </xsl:attribute>
   192               </xsl:attribute>
       
   193               <xsl:if test="string-length($path_accepts)">
       
   194                 <xsl:attribute name="accepts">
       
   195                   <xsl:value-of select="$path_accepts"/>
       
   196                 </xsl:attribute>
       
   197               </xsl:if>
   190               <xsl:choose>
   198               <xsl:choose>
   191                 <xsl:when test="$pathminmaxcount = 3">
   199                 <xsl:when test="$pathminmaxcount = 2">
   192                   <xsl:attribute name="min">
   200                   <xsl:attribute name="min">
       
   201                     <xsl:value-of select="$pathminmax[1]"/>
       
   202                   </xsl:attribute>
       
   203                   <xsl:attribute name="max">
   193                     <xsl:value-of select="$pathminmax[2]"/>
   204                     <xsl:value-of select="$pathminmax[2]"/>
   194                   </xsl:attribute>
   205                   </xsl:attribute>
   195                   <xsl:attribute name="max">
       
   196                     <xsl:value-of select="$pathminmax[3]"/>
       
   197                   </xsl:attribute>
       
   198                 </xsl:when>
   206                 </xsl:when>
   199                 <xsl:when test="$pathminmaxcount = 2">
   207                 <xsl:when test="$pathminmaxcount = 1 or $pathminmaxcount &gt; 2">
   200                   <xsl:message terminate="yes">
   208                   <xsl:message terminate="yes">
   201                     <xsl:text>Widget id:</xsl:text>
   209                     <xsl:text>Widget id:</xsl:text>
   202                     <xsl:value-of select="$id"/>
   210                     <xsl:value-of select="$id"/>
   203                     <xsl:text> label:</xsl:text>
   211                     <xsl:text> label:</xsl:text>
   204                     <xsl:value-of select="$label"/>
   212                     <xsl:value-of select="$label"/>
   256   </xsl:template>
   264   </xsl:template>
   257   <xsl:template mode="genlabel" match="path">
   265   <xsl:template mode="genlabel" match="path">
   258     <xsl:text>@</xsl:text>
   266     <xsl:text>@</xsl:text>
   259     <xsl:value-of select="@value"/>
   267     <xsl:value-of select="@value"/>
   260     <xsl:if test="string-length(@min)&gt;0 or string-length(@max)&gt;0">
   268     <xsl:if test="string-length(@min)&gt;0 or string-length(@max)&gt;0">
   261       <xsl:text>:</xsl:text>
   269       <xsl:text>,</xsl:text>
   262       <xsl:value-of select="@min"/>
   270       <xsl:value-of select="@min"/>
   263       <xsl:text>:</xsl:text>
   271       <xsl:text>,</xsl:text>
   264       <xsl:value-of select="@max"/>
   272       <xsl:value-of select="@max"/>
   265     </xsl:if>
   273     </xsl:if>
   266   </xsl:template>
   274   </xsl:template>
   267   <xsl:template mode="genlabel" match="widget">
   275   <xsl:template mode="genlabel" match="widget">
   268     <xsl:text>HMI:</xsl:text>
   276     <xsl:text>HMI:</xsl:text>
   675       <xsl:text>
   683       <xsl:text>
   676 </xsl:text>
   684 </xsl:text>
   677     </xsl:for-each>
   685     </xsl:for-each>
   678     <xsl:text>    }
   686     <xsl:text>    }
   679 </xsl:text>
   687 </xsl:text>
   680     <xsl:apply-templates mode="per_page_widget_template" select="$parsed_widgets/widget[@id = $all_page_widgets/@id]">
   688     <xsl:apply-templates mode="widget_page" select="$parsed_widgets/widget[@id = $all_page_widgets/@id]">
   681       <xsl:with-param name="page_desc" select="$desc"/>
   689       <xsl:with-param name="page_desc" select="$desc"/>
   682     </xsl:apply-templates>
   690     </xsl:apply-templates>
   683     <xsl:text>  }</xsl:text>
   691     <xsl:text>  }</xsl:text>
   684     <xsl:if test="position()!=last()">
   692     <xsl:if test="position()!=last()">
   685       <xsl:text>,</xsl:text>
   693       <xsl:text>,</xsl:text>
   706     <xsl:text>}
   714     <xsl:text>}
   707 </xsl:text>
   715 </xsl:text>
   708     <xsl:text>
   716     <xsl:text>
   709 </xsl:text>
   717 </xsl:text>
   710   </xsl:template>
   718   </xsl:template>
   711   <xsl:template mode="per_page_widget_template" match="*"/>
   719   <xsl:template mode="widget_page" match="*"/>
   712   <debug:detachable-pages/>
   720   <debug:detachable-pages/>
   713   <xsl:template match="debug:detachable-pages">
   721   <xsl:template match="debug:detachable-pages">
   714     <xsl:text>
   722     <xsl:text>
   715 </xsl:text>
   723 </xsl:text>
   716     <xsl:text>/* </xsl:text>
   724     <xsl:text>/* </xsl:text>
  1868       <xsl:otherwise>
  1876       <xsl:otherwise>
  1869         <func:result select="$txt"/>
  1877         <func:result select="$txt"/>
  1870       </xsl:otherwise>
  1878       </xsl:otherwise>
  1871     </xsl:choose>
  1879     </xsl:choose>
  1872   </func:function>
  1880   </func:function>
  1873   <xsl:template mode="widget_class" match="widget[@type='Animate']">
  1881   <xsl:template match="widget[@type='Animate']" mode="widget_class">
  1874     <xsl:text>class AnimateWidget extends Widget{
  1882     <xsl:text>class </xsl:text>
       
  1883     <xsl:text>AnimateWidget</xsl:text>
       
  1884     <xsl:text> extends Widget{
  1875 </xsl:text>
  1885 </xsl:text>
  1876     <xsl:text>    frequency = 5;
  1886     <xsl:text>    frequency = 5;
  1877 </xsl:text>
  1887 </xsl:text>
  1878     <xsl:text>    speed = 0;
  1888     <xsl:text>    speed = 0;
  1879 </xsl:text>
  1889 </xsl:text>
  1952     <xsl:text>    }
  1962     <xsl:text>    }
  1953 </xsl:text>
  1963 </xsl:text>
  1954     <xsl:text>}
  1964     <xsl:text>}
  1955 </xsl:text>
  1965 </xsl:text>
  1956   </xsl:template>
  1966   </xsl:template>
  1957   <xsl:template mode="widget_defs" match="widget[@type='Animate']">
  1967   <xsl:template match="widget[@type='AnimateRotation']" mode="widget_class">
       
  1968     <xsl:text>class </xsl:text>
       
  1969     <xsl:text>AnimateRotationWidget</xsl:text>
       
  1970     <xsl:text> extends Widget{
       
  1971 </xsl:text>
       
  1972     <xsl:text>    frequency = 5;
       
  1973 </xsl:text>
       
  1974     <xsl:text>    speed = 0;
       
  1975 </xsl:text>
       
  1976     <xsl:text>    widget_center = undefined;
       
  1977 </xsl:text>
       
  1978     <xsl:text>
       
  1979 </xsl:text>
       
  1980     <xsl:text>    dispatch(value) {
       
  1981 </xsl:text>
       
  1982     <xsl:text>        this.speed = value / 5;
       
  1983 </xsl:text>
       
  1984     <xsl:text>
       
  1985 </xsl:text>
       
  1986     <xsl:text>        //reconfigure animation
       
  1987 </xsl:text>
       
  1988     <xsl:text>        this.request_animate();
       
  1989 </xsl:text>
       
  1990     <xsl:text>    }
       
  1991 </xsl:text>
       
  1992     <xsl:text>
       
  1993 </xsl:text>
       
  1994     <xsl:text>    animate(){
       
  1995 </xsl:text>
       
  1996     <xsl:text>       // change animation properties
       
  1997 </xsl:text>
       
  1998     <xsl:text>       for(let child of this.element.children){
       
  1999 </xsl:text>
       
  2000     <xsl:text>            if(child.nodeName == "animateTransform"){
       
  2001 </xsl:text>
       
  2002     <xsl:text>                if(this.speed &gt; 0){
       
  2003 </xsl:text>
       
  2004     <xsl:text>                    child.setAttribute("dur", this.speed+"s");
       
  2005 </xsl:text>
       
  2006     <xsl:text>                    child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2007 </xsl:text>
       
  2008     <xsl:text>                    child.setAttribute("to", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2009 </xsl:text>
       
  2010     <xsl:text>                }
       
  2011 </xsl:text>
       
  2012     <xsl:text>                else if(this.speed &lt; 0){
       
  2013 </xsl:text>
       
  2014     <xsl:text>                    child.setAttribute("dur", (-1)*this.speed+"s");
       
  2015 </xsl:text>
       
  2016     <xsl:text>                    child.setAttribute("from", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2017 </xsl:text>
       
  2018     <xsl:text>                    child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2019 </xsl:text>
       
  2020     <xsl:text>                }
       
  2021 </xsl:text>
       
  2022     <xsl:text>                else{
       
  2023 </xsl:text>
       
  2024     <xsl:text>                    child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2025 </xsl:text>
       
  2026     <xsl:text>                    child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2027 </xsl:text>
       
  2028     <xsl:text>                }
       
  2029 </xsl:text>
       
  2030     <xsl:text>            }
       
  2031 </xsl:text>
       
  2032     <xsl:text>       }
       
  2033 </xsl:text>
       
  2034     <xsl:text>    }
       
  2035 </xsl:text>
       
  2036     <xsl:text>
       
  2037 </xsl:text>
       
  2038     <xsl:text>    init() {
       
  2039 </xsl:text>
       
  2040     <xsl:text>        let widget_pos = this.element.getBBox();
       
  2041 </xsl:text>
       
  2042     <xsl:text>        this.widget_center = [(widget_pos.x+widget_pos.width/2), (widget_pos.y+widget_pos.height/2)];
       
  2043 </xsl:text>
       
  2044     <xsl:text>    }
       
  2045 </xsl:text>
       
  2046     <xsl:text>}
       
  2047 </xsl:text>
       
  2048   </xsl:template>
       
  2049   <xsl:template match="widget[@type='AnimateRotation']" mode="widget_defs">
  1958     <xsl:param name="hmi_element"/>
  2050     <xsl:param name="hmi_element"/>
  1959     <xsl:text>
       
  1960 </xsl:text>
       
  1961   </xsl:template>
       
  1962   <xsl:template mode="widget_class" match="widget[@type='AnimateRotation']">
       
  1963     <xsl:text>class AnimateRotationWidget extends Widget{
       
  1964 </xsl:text>
       
  1965     <xsl:text>    frequency = 5;
       
  1966 </xsl:text>
       
  1967     <xsl:text>    speed = 0;
       
  1968 </xsl:text>
       
  1969     <xsl:text>    widget_center = undefined;
       
  1970 </xsl:text>
       
  1971     <xsl:text>
       
  1972 </xsl:text>
       
  1973     <xsl:text>    dispatch(value) {
       
  1974 </xsl:text>
       
  1975     <xsl:text>        this.speed = value / 5;
       
  1976 </xsl:text>
       
  1977     <xsl:text>
       
  1978 </xsl:text>
       
  1979     <xsl:text>        //reconfigure animation
       
  1980 </xsl:text>
       
  1981     <xsl:text>        this.request_animate();
       
  1982 </xsl:text>
       
  1983     <xsl:text>    }
       
  1984 </xsl:text>
       
  1985     <xsl:text>
       
  1986 </xsl:text>
       
  1987     <xsl:text>    animate(){
       
  1988 </xsl:text>
       
  1989     <xsl:text>       // change animation properties
       
  1990 </xsl:text>
       
  1991     <xsl:text>       for(let child of this.element.children){
       
  1992 </xsl:text>
       
  1993     <xsl:text>            if(child.nodeName == "animateTransform"){
       
  1994 </xsl:text>
       
  1995     <xsl:text>                if(this.speed &gt; 0){
       
  1996 </xsl:text>
       
  1997     <xsl:text>                    child.setAttribute("dur", this.speed+"s");
       
  1998 </xsl:text>
       
  1999     <xsl:text>                    child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2000 </xsl:text>
       
  2001     <xsl:text>                    child.setAttribute("to", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2002 </xsl:text>
       
  2003     <xsl:text>                }
       
  2004 </xsl:text>
       
  2005     <xsl:text>                else if(this.speed &lt; 0){
       
  2006 </xsl:text>
       
  2007     <xsl:text>                    child.setAttribute("dur", (-1)*this.speed+"s");
       
  2008 </xsl:text>
       
  2009     <xsl:text>                    child.setAttribute("from", "360 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2010 </xsl:text>
       
  2011     <xsl:text>                    child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2012 </xsl:text>
       
  2013     <xsl:text>                }
       
  2014 </xsl:text>
       
  2015     <xsl:text>                else{
       
  2016 </xsl:text>
       
  2017     <xsl:text>                    child.setAttribute("from", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2018 </xsl:text>
       
  2019     <xsl:text>                    child.setAttribute("to", "0 "+this.widget_center[0]+" "+this.widget_center[1]);
       
  2020 </xsl:text>
       
  2021     <xsl:text>                }
       
  2022 </xsl:text>
       
  2023     <xsl:text>            }
       
  2024 </xsl:text>
       
  2025     <xsl:text>       }
       
  2026 </xsl:text>
       
  2027     <xsl:text>    }
       
  2028 </xsl:text>
       
  2029     <xsl:text>
       
  2030 </xsl:text>
       
  2031     <xsl:text>    init() {
       
  2032 </xsl:text>
       
  2033     <xsl:text>        let widget_pos = this.element.getBBox();
       
  2034 </xsl:text>
       
  2035     <xsl:text>        this.widget_center = [(widget_pos.x+widget_pos.width/2), (widget_pos.y+widget_pos.height/2)];
       
  2036 </xsl:text>
       
  2037     <xsl:text>    }
       
  2038 </xsl:text>
       
  2039     <xsl:text>}
       
  2040 </xsl:text>
       
  2041   </xsl:template>
       
  2042   <xsl:template mode="widget_defs" match="widget[@type='AnimateRotation']">
       
  2043     <xsl:param name="hmi_element"/>
  2051     <xsl:param name="hmi_element"/>
  2044     <xsl:text>
  2052     <xsl:text>
  2045 </xsl:text>
  2053 </xsl:text>
  2046   </xsl:template>
  2054   </xsl:template>
  2047   <xsl:template mode="widget_class" match="widget[@type='Back']">
  2055   <xsl:template match="widget[@type='Back']" mode="widget_class">
  2048     <xsl:text>class BackWidget extends Widget{
  2056     <xsl:text>class </xsl:text>
       
  2057     <xsl:text>BackWidget</xsl:text>
       
  2058     <xsl:text> extends Widget{
  2049 </xsl:text>
  2059 </xsl:text>
  2050     <xsl:text>    on_click(evt) {
  2060     <xsl:text>    on_click(evt) {
  2051 </xsl:text>
  2061 </xsl:text>
  2052     <xsl:text>        if(jump_history.length &gt; 1){
  2062     <xsl:text>        if(jump_history.length &gt; 1){
  2053 </xsl:text>
  2063 </xsl:text>
  2216     <xsl:text>        this.apply_hmi_value(0, </xsl:text>
  2226     <xsl:text>        this.apply_hmi_value(0, </xsl:text>
  2217     <xsl:value-of select="@value"/>
  2227     <xsl:value-of select="@value"/>
  2218     <xsl:text>);
  2228     <xsl:text>);
  2219 </xsl:text>
  2229 </xsl:text>
  2220   </xsl:template>
  2230   </xsl:template>
  2221   <xsl:template mode="widget_class" match="widget[@type='Button']">
  2231   <xsl:template match="widget[@type='Button']" mode="widget_class">
       
  2232     <xsl:text>class </xsl:text>
       
  2233     <xsl:text>ButtonWidget</xsl:text>
       
  2234     <xsl:text> extends Widget{
       
  2235 </xsl:text>
  2222     <xsl:variable name="fsm" select="exsl:node-set($_button_fsm)"/>
  2236     <xsl:variable name="fsm" select="exsl:node-set($_button_fsm)"/>
  2223     <xsl:text>class ButtonWidget extends Widget{
       
  2224 </xsl:text>
       
  2225     <xsl:text>    frequency = 5;
  2237     <xsl:text>    frequency = 5;
  2226 </xsl:text>
  2238 </xsl:text>
  2227     <xsl:text>    display = "inactive";
  2239     <xsl:text>    display = "inactive";
  2228 </xsl:text>
  2240 </xsl:text>
  2229     <xsl:text>    state = "init";
  2241     <xsl:text>    state = "init";
  2285     <xsl:text>    }
  2297     <xsl:text>    }
  2286 </xsl:text>
  2298 </xsl:text>
  2287     <xsl:text>}
  2299     <xsl:text>}
  2288 </xsl:text>
  2300 </xsl:text>
  2289   </xsl:template>
  2301   </xsl:template>
  2290   <xsl:template mode="widget_defs" match="widget[@type='Button']">
  2302   <xsl:template match="widget[@type='Button']" mode="widget_defs">
       
  2303     <xsl:param name="hmi_element"/>
  2291     <xsl:param name="hmi_element"/>
  2304     <xsl:param name="hmi_element"/>
  2292     <xsl:call-template name="defs_by_labels">
  2305     <xsl:call-template name="defs_by_labels">
  2293       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2306       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2294       <xsl:with-param name="labels">
  2307       <xsl:with-param name="labels">
  2295         <xsl:text>active inactive</xsl:text>
  2308         <xsl:text>active inactive</xsl:text>
  2296       </xsl:with-param>
  2309       </xsl:with-param>
  2297       <xsl:with-param name="mandatory" select="'no'"/>
  2310       <xsl:with-param name="mandatory" select="'no'"/>
  2298     </xsl:call-template>
  2311     </xsl:call-template>
  2299   </xsl:template>
  2312   </xsl:template>
  2300   <xsl:template mode="widget_class" match="widget[@type='CircularBar']">
  2313   <xsl:template match="widget[@type='CircularBar']" mode="widget_class">
  2301     <xsl:text>class CircularBarWidget extends Widget{
  2314     <xsl:text>class </xsl:text>
       
  2315     <xsl:text>CircularBarWidget</xsl:text>
       
  2316     <xsl:text> extends Widget{
  2302 </xsl:text>
  2317 </xsl:text>
  2303     <xsl:text>    frequency = 10;
  2318     <xsl:text>    frequency = 10;
  2304 </xsl:text>
  2319 </xsl:text>
  2305     <xsl:text>    range = undefined;
  2320     <xsl:text>    range = undefined;
  2306 </xsl:text>
  2321 </xsl:text>
  2393     <xsl:text>    }
  2408     <xsl:text>    }
  2394 </xsl:text>
  2409 </xsl:text>
  2395     <xsl:text>}
  2410     <xsl:text>}
  2396 </xsl:text>
  2411 </xsl:text>
  2397   </xsl:template>
  2412   </xsl:template>
  2398   <xsl:template mode="widget_defs" match="widget[@type='CircularBar']">
  2413   <xsl:template match="widget[@type='CircularBar']" mode="widget_defs">
       
  2414     <xsl:param name="hmi_element"/>
  2399     <xsl:param name="hmi_element"/>
  2415     <xsl:param name="hmi_element"/>
  2400     <xsl:call-template name="defs_by_labels">
  2416     <xsl:call-template name="defs_by_labels">
  2401       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2417       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2402       <xsl:with-param name="labels">
  2418       <xsl:with-param name="labels">
  2403         <xsl:text>path</xsl:text>
  2419         <xsl:text>path</xsl:text>
  2409         <xsl:text>value min max</xsl:text>
  2425         <xsl:text>value min max</xsl:text>
  2410       </xsl:with-param>
  2426       </xsl:with-param>
  2411       <xsl:with-param name="mandatory" select="'no'"/>
  2427       <xsl:with-param name="mandatory" select="'no'"/>
  2412     </xsl:call-template>
  2428     </xsl:call-template>
  2413   </xsl:template>
  2429   </xsl:template>
  2414   <xsl:template mode="widget_class" match="widget[@type='CircularSlider']">
  2430   <xsl:template match="widget[@type='CircularSlider']" mode="widget_class">
  2415     <xsl:text>class CircularSliderWidget extends Widget{
  2431     <xsl:text>class </xsl:text>
       
  2432     <xsl:text>CircularSliderWidget</xsl:text>
       
  2433     <xsl:text> extends Widget{
  2416 </xsl:text>
  2434 </xsl:text>
  2417     <xsl:text>    frequency = 5;
  2435     <xsl:text>    frequency = 5;
  2418 </xsl:text>
  2436 </xsl:text>
  2419     <xsl:text>    range = undefined;
  2437     <xsl:text>    range = undefined;
  2420 </xsl:text>
  2438 </xsl:text>
  2865     <xsl:text>    }
  2883     <xsl:text>    }
  2866 </xsl:text>
  2884 </xsl:text>
  2867     <xsl:text>}
  2885     <xsl:text>}
  2868 </xsl:text>
  2886 </xsl:text>
  2869   </xsl:template>
  2887   </xsl:template>
  2870   <xsl:template mode="widget_defs" match="widget[@type='CircularSlider']">
  2888   <xsl:template match="widget[@type='CircularSlider']" mode="widget_defs">
       
  2889     <xsl:param name="hmi_element"/>
  2871     <xsl:param name="hmi_element"/>
  2890     <xsl:param name="hmi_element"/>
  2872     <xsl:call-template name="defs_by_labels">
  2891     <xsl:call-template name="defs_by_labels">
  2873       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2892       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2874       <xsl:with-param name="labels">
  2893       <xsl:with-param name="labels">
  2875         <xsl:text>handle range</xsl:text>
  2894         <xsl:text>handle range</xsl:text>
  2883       <xsl:with-param name="mandatory" select="'no'"/>
  2902       <xsl:with-param name="mandatory" select="'no'"/>
  2884     </xsl:call-template>
  2903     </xsl:call-template>
  2885     <xsl:text>
  2904     <xsl:text>
  2886 </xsl:text>
  2905 </xsl:text>
  2887   </xsl:template>
  2906   </xsl:template>
  2888   <xsl:template mode="widget_class" match="widget[@type='CustomHtml']">
  2907   <xsl:template match="widget[@type='CustomHtml']" mode="widget_class">
  2889     <xsl:text>class CustomHtmlWidget extends Widget{
  2908     <xsl:text>class </xsl:text>
       
  2909     <xsl:text>CustomHtmlWidget</xsl:text>
       
  2910     <xsl:text> extends Widget{
  2890 </xsl:text>
  2911 </xsl:text>
  2891     <xsl:text>    frequency = 5;
  2912     <xsl:text>    frequency = 5;
  2892 </xsl:text>
  2913 </xsl:text>
  2893     <xsl:text>    widget_size = undefined;
  2914     <xsl:text>    widget_size = undefined;
  2894 </xsl:text>
  2915 </xsl:text>
  2925     <xsl:text>    }
  2946     <xsl:text>    }
  2926 </xsl:text>
  2947 </xsl:text>
  2927     <xsl:text>}
  2948     <xsl:text>}
  2928 </xsl:text>
  2949 </xsl:text>
  2929   </xsl:template>
  2950   </xsl:template>
  2930   <xsl:template mode="widget_defs" match="widget[@type='CustomHtml']">
  2951   <xsl:template match="widget[@type='CustomHtml']" mode="widget_defs">
       
  2952     <xsl:param name="hmi_element"/>
  2931     <xsl:param name="hmi_element"/>
  2953     <xsl:param name="hmi_element"/>
  2932     <xsl:call-template name="defs_by_labels">
  2954     <xsl:call-template name="defs_by_labels">
  2933       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2955       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2934       <xsl:with-param name="labels">
  2956       <xsl:with-param name="labels">
  2935         <xsl:text>container code</xsl:text>
  2957         <xsl:text>container code</xsl:text>
  2936       </xsl:with-param>
  2958       </xsl:with-param>
  2937     </xsl:call-template>
  2959     </xsl:call-template>
  2938     <xsl:text>
  2960   </xsl:template>
  2939 </xsl:text>
  2961   <xsl:template match="widget[@type='Display']" mode="widget_class">
  2940   </xsl:template>
  2962     <xsl:text>class </xsl:text>
  2941   <xsl:template mode="widget_class" match="widget[@type='Display']">
  2963     <xsl:text>DisplayWidget</xsl:text>
  2942     <xsl:text>class DisplayWidget extends Widget{
  2964     <xsl:text> extends Widget{
  2943 </xsl:text>
  2965 </xsl:text>
  2944     <xsl:text>    frequency = 5;
  2966     <xsl:text>    frequency = 5;
  2945 </xsl:text>
  2967 </xsl:text>
  2946     <xsl:text>    dispatch(value, oldval, index) {
  2968     <xsl:text>    dispatch(value, oldval, index) {
  2947 </xsl:text>
  2969 </xsl:text>
  2952     <xsl:text>    }
  2974     <xsl:text>    }
  2953 </xsl:text>
  2975 </xsl:text>
  2954     <xsl:text>}
  2976     <xsl:text>}
  2955 </xsl:text>
  2977 </xsl:text>
  2956   </xsl:template>
  2978   </xsl:template>
  2957   <xsl:template mode="widget_defs" match="widget[@type='Display']">
  2979   <xsl:template match="widget[@type='Display']" mode="widget_defs">
       
  2980     <xsl:param name="hmi_element"/>
  2958     <xsl:param name="hmi_element"/>
  2981     <xsl:param name="hmi_element"/>
  2959     <xsl:variable name="format">
  2982     <xsl:variable name="format">
  2960       <xsl:call-template name="defs_by_labels">
  2983       <xsl:call-template name="defs_by_labels">
  2961         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2984         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  2962         <xsl:with-param name="labels">
  2985         <xsl:with-param name="labels">
  3505     <xsl:text>}(); // eslint-disable-line    
  3528     <xsl:text>}(); // eslint-disable-line    
  3506 </xsl:text>
  3529 </xsl:text>
  3507     <xsl:text>
  3530     <xsl:text>
  3508 </xsl:text>
  3531 </xsl:text>
  3509   </xsl:template>
  3532   </xsl:template>
  3510   <xsl:template mode="widget_class" match="widget[@type='DropDown']">
  3533   <xsl:template match="widget[@type='DropDown']" mode="widget_class">
  3511     <xsl:text>    function numb_event(e) {
  3534     <xsl:text>class </xsl:text>
  3512 </xsl:text>
  3535     <xsl:text>DropDownWidget</xsl:text>
  3513     <xsl:text>        e.stopPropagation();
  3536     <xsl:text> extends Widget{
  3514 </xsl:text>
       
  3515     <xsl:text>    }
       
  3516 </xsl:text>
       
  3517     <xsl:text>    class DropDownWidget extends Widget{
       
  3518 </xsl:text>
  3537 </xsl:text>
  3519     <xsl:text>        dispatch(value) {
  3538     <xsl:text>        dispatch(value) {
  3520 </xsl:text>
  3539 </xsl:text>
  3521     <xsl:text>            if(!this.opened) this.set_selection(value);
  3540     <xsl:text>            if(!this.opened) this.set_selection(value);
  3522 </xsl:text>
  3541 </xsl:text>
  3740 </xsl:text>
  3759 </xsl:text>
  3741     <xsl:text>        close(){
  3760     <xsl:text>        close(){
  3742 </xsl:text>
  3761 </xsl:text>
  3743     <xsl:text>            // Stop hogging all click events
  3762     <xsl:text>            // Stop hogging all click events
  3744 </xsl:text>
  3763 </xsl:text>
  3745     <xsl:text>            svg_root.removeEventListener("pointerdown", numb_event, true);
  3764     <xsl:text>            svg_root.removeEventListener("pointerdown", this.numb_event, true);
  3746 </xsl:text>
  3765 </xsl:text>
  3747     <xsl:text>            svg_root.removeEventListener("pointerup", numb_event, true);
  3766     <xsl:text>            svg_root.removeEventListener("pointerup", this.numb_event, true);
  3748 </xsl:text>
  3767 </xsl:text>
  3749     <xsl:text>            svg_root.removeEventListener("click", this.bound_close_on_click_elsewhere, true);
  3768     <xsl:text>            svg_root.removeEventListener("click", this.bound_close_on_click_elsewhere, true);
  3750 </xsl:text>
  3769 </xsl:text>
  3751     <xsl:text>            // Restore position and sixe of widget elements
  3770     <xsl:text>            // Restore position and sixe of widget elements
  3752 </xsl:text>
  3771 </xsl:text>
  3976 </xsl:text>
  3995 </xsl:text>
  3977     <xsl:text>            }
  3996     <xsl:text>            }
  3978 </xsl:text>
  3997 </xsl:text>
  3979     <xsl:text>        }
  3998     <xsl:text>        }
  3980 </xsl:text>
  3999 </xsl:text>
       
  4000     <xsl:text>        numb_event(e) {
       
  4001 </xsl:text>
       
  4002     <xsl:text>             e.stopPropagation();
       
  4003 </xsl:text>
       
  4004     <xsl:text>        }
       
  4005 </xsl:text>
  3981     <xsl:text>        open(){
  4006     <xsl:text>        open(){
  3982 </xsl:text>
  4007 </xsl:text>
  3983     <xsl:text>            let length = this.content.length;
  4008     <xsl:text>            let length = this.content.length;
  3984 </xsl:text>
  4009 </xsl:text>
  3985     <xsl:text>            // systematically reset text, to strip eventual whitespace spans
  4010     <xsl:text>            // systematically reset text, to strip eventual whitespace spans
  4030 </xsl:text>
  4055 </xsl:text>
  4031     <xsl:text>            this.element.parentNode.appendChild(this.element.parentNode.removeChild(this.element));
  4056     <xsl:text>            this.element.parentNode.appendChild(this.element.parentNode.removeChild(this.element));
  4032 </xsl:text>
  4057 </xsl:text>
  4033     <xsl:text>            // disable interaction with background
  4058     <xsl:text>            // disable interaction with background
  4034 </xsl:text>
  4059 </xsl:text>
  4035     <xsl:text>            svg_root.addEventListener("pointerdown", numb_event, true);
  4060     <xsl:text>            svg_root.addEventListener("pointerdown", this.numb_event, true);
  4036 </xsl:text>
  4061 </xsl:text>
  4037     <xsl:text>            svg_root.addEventListener("pointerup", numb_event, true);
  4062     <xsl:text>            svg_root.addEventListener("pointerup", this.numb_event, true);
  4038 </xsl:text>
  4063 </xsl:text>
  4039     <xsl:text>            svg_root.addEventListener("click", this.bound_close_on_click_elsewhere, true);
  4064     <xsl:text>            svg_root.addEventListener("click", this.bound_close_on_click_elsewhere, true);
  4040 </xsl:text>
  4065 </xsl:text>
  4041     <xsl:text>            this.highlight_selection();
  4066     <xsl:text>            this.highlight_selection();
  4042 </xsl:text>
  4067 </xsl:text>
  4160 </xsl:text>
  4185 </xsl:text>
  4161     <xsl:text>            b.height.baseVal.value = 2 * tmargin + m.height;
  4186     <xsl:text>            b.height.baseVal.value = 2 * tmargin + m.height;
  4162 </xsl:text>
  4187 </xsl:text>
  4163     <xsl:text>        }
  4188     <xsl:text>        }
  4164 </xsl:text>
  4189 </xsl:text>
  4165     <xsl:text>    }
  4190     <xsl:text>}
  4166 </xsl:text>
  4191 </xsl:text>
  4167   </xsl:template>
  4192   </xsl:template>
  4168   <xsl:template mode="widget_defs" match="widget[@type='DropDown']">
  4193   <xsl:template match="widget[@type='DropDown']" mode="widget_defs">
       
  4194     <xsl:param name="hmi_element"/>
  4169     <xsl:param name="hmi_element"/>
  4195     <xsl:param name="hmi_element"/>
  4170     <xsl:call-template name="defs_by_labels">
  4196     <xsl:call-template name="defs_by_labels">
  4171       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  4197       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  4172       <xsl:with-param name="labels">
  4198       <xsl:with-param name="labels">
  4173         <xsl:text>text box button highlight</xsl:text>
  4199         <xsl:text>text box button highlight</xsl:text>
  4191       </xsl:otherwise>
  4217       </xsl:otherwise>
  4192     </xsl:choose>
  4218     </xsl:choose>
  4193     <xsl:text>,
  4219     <xsl:text>,
  4194 </xsl:text>
  4220 </xsl:text>
  4195   </xsl:template>
  4221   </xsl:template>
  4196   <xsl:template mode="widget_defs" match="widget[@type='ForEach']">
  4222   <xsl:template match="widget[@type='ForEach']" mode="widget_defs">
       
  4223     <xsl:param name="hmi_element"/>
  4197     <xsl:param name="hmi_element"/>
  4224     <xsl:param name="hmi_element"/>
  4198     <xsl:if test="count(path) != 1">
  4225     <xsl:if test="count(path) != 1">
  4199       <xsl:message terminate="yes">
  4226       <xsl:message terminate="yes">
  4200         <xsl:text>ForEach widget </xsl:text>
  4227         <xsl:text>ForEach widget </xsl:text>
  4201         <xsl:value-of select="$hmi_element/@id"/>
  4228         <xsl:value-of select="$hmi_element/@id"/>
  4305     <xsl:text>    },
  4332     <xsl:text>    },
  4306 </xsl:text>
  4333 </xsl:text>
  4307     <xsl:text>    item_offset: 0,
  4334     <xsl:text>    item_offset: 0,
  4308 </xsl:text>
  4335 </xsl:text>
  4309   </xsl:template>
  4336   </xsl:template>
  4310   <xsl:template mode="widget_class" match="widget[@type='ForEach']">
  4337   <xsl:template match="widget[@type='ForEach']" mode="widget_class">
  4311     <xsl:text>class ForEachWidget extends Widget{
  4338     <xsl:text>class </xsl:text>
       
  4339     <xsl:text>ForEachWidget</xsl:text>
       
  4340     <xsl:text> extends Widget{
  4312 </xsl:text>
  4341 </xsl:text>
  4313     <xsl:text>
  4342     <xsl:text>
  4314 </xsl:text>
  4343 </xsl:text>
  4315     <xsl:text>    unsub_items(){
  4344     <xsl:text>    unsub_items(){
  4316 </xsl:text>
  4345 </xsl:text>
  4441     <xsl:text>    }
  4470     <xsl:text>    }
  4442 </xsl:text>
  4471 </xsl:text>
  4443     <xsl:text>}
  4472     <xsl:text>}
  4444 </xsl:text>
  4473 </xsl:text>
  4445   </xsl:template>
  4474   </xsl:template>
  4446   <xsl:template mode="widget_class" match="widget[@type='Input']">
  4475   <xsl:template match="widget[@type='Input']" mode="widget_desc">
  4447     <xsl:text>    class InputWidget extends Widget{
  4476     <type>
  4448 </xsl:text>
  4477       <xsl:value-of select="@type"/>
  4449     <xsl:text>         on_op_click(opstr) {
  4478     </type>
  4450 </xsl:text>
  4479     <longdesc>
  4451     <xsl:text>             this.change_hmi_value(0, opstr);
  4480       <xsl:text>Input widget takes one variable path, and displays current value in
  4452 </xsl:text>
  4481 </xsl:text>
  4453     <xsl:text>         }
  4482       <xsl:text>optional "value" labeled sub-element. Click on optional "edit" labeled
  4454 </xsl:text>
  4483 </xsl:text>
  4455     <xsl:text>         edit_callback(new_val) {
  4484       <xsl:text>element opens keypad to edit value. Operation on current value is
  4456 </xsl:text>
  4485 </xsl:text>
  4457     <xsl:text>             this.apply_hmi_value(0, new_val);
  4486       <xsl:text>performed when click on sub-elements with label starting with '=', '+' 
  4458 </xsl:text>
  4487 </xsl:text>
  4459     <xsl:text>         }
  4488       <xsl:text>or '-' sign. Value after sign is used as operand.
  4460 </xsl:text>
  4489 </xsl:text>
  4461     <xsl:text>
  4490     </longdesc>
  4462 </xsl:text>
  4491     <shortdesc>
  4463     <xsl:text>         is_inhibited = false;
  4492       <xsl:text>Input field with predefined operation buttons</xsl:text>
  4464 </xsl:text>
  4493     </shortdesc>
  4465     <xsl:text>         alert(msg){
  4494     <arg accepts="string">
  4466 </xsl:text>
  4495       <xsl:text>optional printf-like format </xsl:text>
  4467     <xsl:text>             this.is_inhibited = true;
  4496     </arg>
  4468 </xsl:text>
  4497     <path accepts="HMI_INT, HMI_REAL, HMI_STRING">
  4469     <xsl:text>             this.display = msg;
  4498       <xsl:text>single variable to edit</xsl:text>
  4470 </xsl:text>
  4499     </path>
  4471     <xsl:text>             setTimeout(() =&gt; this.stopalert(), 1000);
  4500   </xsl:template>
  4472 </xsl:text>
  4501   <xsl:template match="widget[@type='Input']" mode="widget_class">
  4473     <xsl:text>             this.request_animate();
  4502     <xsl:text>class </xsl:text>
  4474 </xsl:text>
  4503     <xsl:text>InputWidget</xsl:text>
  4475     <xsl:text>         }
  4504     <xsl:text> extends Widget{
  4476 </xsl:text>
  4505 </xsl:text>
  4477     <xsl:text>
  4506     <xsl:text>     on_op_click(opstr) {
  4478 </xsl:text>
  4507 </xsl:text>
  4479     <xsl:text>         stopalert(){
  4508     <xsl:text>         this.change_hmi_value(0, opstr);
  4480 </xsl:text>
  4509 </xsl:text>
  4481     <xsl:text>             this.is_inhibited = false;
  4510     <xsl:text>     }
  4482 </xsl:text>
  4511 </xsl:text>
  4483     <xsl:text>             this.display = this.last_value;
  4512     <xsl:text>     edit_callback(new_val) {
  4484 </xsl:text>
  4513 </xsl:text>
  4485     <xsl:text>             this.request_animate();
  4514     <xsl:text>         this.apply_hmi_value(0, new_val);
  4486 </xsl:text>
  4515 </xsl:text>
  4487     <xsl:text>         }
  4516     <xsl:text>     }
  4488 </xsl:text>
  4517 </xsl:text>
  4489     <xsl:text>
  4518     <xsl:text>
  4490 </xsl:text>
  4519 </xsl:text>
  4491     <xsl:text>         overshot(new_val, max) {
  4520     <xsl:text>     is_inhibited = false;
  4492 </xsl:text>
  4521 </xsl:text>
  4493     <xsl:text>             this.alert("max");
  4522     <xsl:text>     alert(msg){
  4494 </xsl:text>
  4523 </xsl:text>
  4495     <xsl:text>         }
  4524     <xsl:text>         this.is_inhibited = true;
  4496 </xsl:text>
  4525 </xsl:text>
  4497     <xsl:text>
  4526     <xsl:text>         this.display = msg;
  4498 </xsl:text>
  4527 </xsl:text>
  4499     <xsl:text>         undershot(new_val, min) {
  4528     <xsl:text>         setTimeout(() =&gt; this.stopalert(), 1000);
  4500 </xsl:text>
  4529 </xsl:text>
  4501     <xsl:text>             this.alert("min");
  4530     <xsl:text>         this.request_animate();
  4502 </xsl:text>
  4531 </xsl:text>
  4503     <xsl:text>         }
  4532     <xsl:text>     }
  4504 </xsl:text>
  4533 </xsl:text>
  4505     <xsl:text>
  4534     <xsl:text>
  4506 </xsl:text>
  4535 </xsl:text>
  4507     <xsl:text>
  4536     <xsl:text>     stopalert(){
  4508 </xsl:text>
  4537 </xsl:text>
  4509     <xsl:text>    }
  4538     <xsl:text>         this.is_inhibited = false;
  4510 </xsl:text>
  4539 </xsl:text>
  4511   </xsl:template>
  4540     <xsl:text>         this.display = this.last_value;
  4512   <xsl:template mode="widget_defs" match="widget[@type='Input']">
  4541 </xsl:text>
       
  4542     <xsl:text>         this.request_animate();
       
  4543 </xsl:text>
       
  4544     <xsl:text>     }
       
  4545 </xsl:text>
       
  4546     <xsl:text>
       
  4547 </xsl:text>
       
  4548     <xsl:text>     overshot(new_val, max) {
       
  4549 </xsl:text>
       
  4550     <xsl:text>         this.alert("max");
       
  4551 </xsl:text>
       
  4552     <xsl:text>     }
       
  4553 </xsl:text>
       
  4554     <xsl:text>
       
  4555 </xsl:text>
       
  4556     <xsl:text>     undershot(new_val, min) {
       
  4557 </xsl:text>
       
  4558     <xsl:text>         this.alert("min");
       
  4559 </xsl:text>
       
  4560     <xsl:text>     }
       
  4561 </xsl:text>
       
  4562     <xsl:text>}
       
  4563 </xsl:text>
       
  4564   </xsl:template>
       
  4565   <xsl:template match="widget[@type='Input']" mode="widget_defs">
  4513     <xsl:param name="hmi_element"/>
  4566     <xsl:param name="hmi_element"/>
  4514     <xsl:variable name="value_elt">
  4567     <xsl:variable name="value_elt">
  4515       <xsl:call-template name="defs_by_labels">
  4568       <xsl:call-template name="defs_by_labels">
  4516         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  4569         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  4517         <xsl:with-param name="labels">
  4570         <xsl:with-param name="labels">
  4596 </xsl:text>
  4649 </xsl:text>
  4597     </xsl:for-each>
  4650     </xsl:for-each>
  4598     <xsl:text>    },
  4651     <xsl:text>    },
  4599 </xsl:text>
  4652 </xsl:text>
  4600   </xsl:template>
  4653   </xsl:template>
  4601   <xsl:template mode="widget_class" match="widget[@type='JsonTable']">
  4654   <xsl:template match="widget[@type='JsonTable']" mode="widget_class">
  4602     <xsl:text>class JsonTableWidget extends Widget{
  4655     <xsl:text>class </xsl:text>
       
  4656     <xsl:text>JsonTableWidget</xsl:text>
       
  4657     <xsl:text> extends Widget{
  4603 </xsl:text>
  4658 </xsl:text>
  4604     <xsl:text>    // arbitrary defaults to avoid missing entries in query
  4659     <xsl:text>    // arbitrary defaults to avoid missing entries in query
  4605 </xsl:text>
  4660 </xsl:text>
  4606     <xsl:text>    cache = [0,0,0];
  4661     <xsl:text>    cache = [0,0,0];
  4607 </xsl:text>
  4662 </xsl:text>
  5016     <xsl:text>").style = "display:none";
  5071     <xsl:text>").style = "display:none";
  5017 </xsl:text>
  5072 </xsl:text>
  5018     <xsl:text>        }
  5073     <xsl:text>        }
  5019 </xsl:text>
  5074 </xsl:text>
  5020   </xsl:template>
  5075   </xsl:template>
  5021   <xsl:template mode="widget_defs" match="widget[@type='JsonTable']">
  5076   <xsl:template match="widget[@type='JsonTable']" mode="widget_defs">
       
  5077     <xsl:param name="hmi_element"/>
  5022     <xsl:param name="hmi_element"/>
  5078     <xsl:param name="hmi_element"/>
  5023     <xsl:call-template name="defs_by_labels">
  5079     <xsl:call-template name="defs_by_labels">
  5024       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5080       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5025       <xsl:with-param name="labels">
  5081       <xsl:with-param name="labels">
  5026         <xsl:text>data</xsl:text>
  5082         <xsl:text>data</xsl:text>
  5062 </xsl:text>
  5118 </xsl:text>
  5063     </xsl:for-each>
  5119     </xsl:for-each>
  5064     <xsl:text>    }
  5120     <xsl:text>    }
  5065 </xsl:text>
  5121 </xsl:text>
  5066   </xsl:template>
  5122   </xsl:template>
  5067   <xsl:template mode="widget_class" match="widget[@type='Jump']">
  5123   <xsl:template match="widget[@type='Jump']" mode="widget_class">
  5068     <xsl:text>    class JumpWidget extends Widget{
  5124     <xsl:text>class </xsl:text>
  5069 </xsl:text>
  5125     <xsl:text>JumpWidget</xsl:text>
  5070     <xsl:text>
  5126     <xsl:text> extends Widget{
  5071 </xsl:text>
  5127 </xsl:text>
  5072     <xsl:text>        activable = false;
  5128     <xsl:text>        activable = false;
  5073 </xsl:text>
  5129 </xsl:text>
  5074     <xsl:text>        active = false;
  5130     <xsl:text>        active = false;
  5075 </xsl:text>
  5131 </xsl:text>
  5175 </xsl:text>
  5231 </xsl:text>
  5176     <xsl:text>            }
  5232     <xsl:text>            }
  5177 </xsl:text>
  5233 </xsl:text>
  5178     <xsl:text>        }
  5234     <xsl:text>        }
  5179 </xsl:text>
  5235 </xsl:text>
  5180     <xsl:text>    }
  5236     <xsl:text>}
  5181 </xsl:text>
  5237 </xsl:text>
  5182   </xsl:template>
  5238   </xsl:template>
  5183   <xsl:template mode="widget_defs" match="widget[@type='Jump']">
  5239   <xsl:template match="widget[@type='Jump']" mode="widget_defs">
       
  5240     <xsl:param name="hmi_element"/>
  5184     <xsl:param name="hmi_element"/>
  5241     <xsl:param name="hmi_element"/>
  5185     <xsl:variable name="activity">
  5242     <xsl:variable name="activity">
  5186       <xsl:call-template name="defs_by_labels">
  5243       <xsl:call-template name="defs_by_labels">
  5187         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5244         <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5188         <xsl:with-param name="labels">
  5245         <xsl:with-param name="labels">
  5227       </xsl:otherwise>
  5284       </xsl:otherwise>
  5228     </xsl:choose>
  5285     </xsl:choose>
  5229     <xsl:text>    },
  5286     <xsl:text>    },
  5230 </xsl:text>
  5287 </xsl:text>
  5231   </xsl:template>
  5288   </xsl:template>
  5232   <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']">
  5289   <xsl:template match="widget[@type='Jump']" mode="widget_page">
       
  5290     <xsl:param name="page_desc"/>
  5233     <xsl:param name="page_desc"/>
  5291     <xsl:param name="page_desc"/>
  5234     <xsl:if test="path">
  5292     <xsl:if test="path">
  5235       <xsl:variable name="target_page_name">
  5293       <xsl:variable name="target_page_name">
  5236         <xsl:choose>
  5294         <xsl:choose>
  5237           <xsl:when test="arg">
  5295           <xsl:when test="arg">
  5329     <xsl:text>}
  5387     <xsl:text>}
  5330 </xsl:text>
  5388 </xsl:text>
  5331     <xsl:text>
  5389     <xsl:text>
  5332 </xsl:text>
  5390 </xsl:text>
  5333   </xsl:template>
  5391   </xsl:template>
  5334   <xsl:template mode="widget_class" match="widget[@type='Keypad']">
  5392   <xsl:template match="widget[@type='Keypad']" mode="widget_class">
  5335     <xsl:text>class KeypadWidget extends Widget{
  5393     <xsl:text>class </xsl:text>
  5336 </xsl:text>
  5394     <xsl:text>KeypadWidget</xsl:text>
  5337     <xsl:text>
  5395     <xsl:text> extends Widget{
  5338 </xsl:text>
  5396 </xsl:text>
  5339     <xsl:text>     on_key_click(symbols) {
  5397     <xsl:text>     on_key_click(symbols) {
  5340 </xsl:text>
  5398 </xsl:text>
  5341     <xsl:text>         var syms = symbols.split(" ");
  5399     <xsl:text>         var syms = symbols.split(" ");
  5342 </xsl:text>
  5400 </xsl:text>
  5523     <xsl:text>     }
  5581     <xsl:text>     }
  5524 </xsl:text>
  5582 </xsl:text>
  5525     <xsl:text>}
  5583     <xsl:text>}
  5526 </xsl:text>
  5584 </xsl:text>
  5527   </xsl:template>
  5585   </xsl:template>
  5528   <xsl:template mode="widget_defs" match="widget[@type='Keypad']">
  5586   <xsl:template match="widget[@type='Keypad']" mode="widget_defs">
       
  5587     <xsl:param name="hmi_element"/>
  5529     <xsl:param name="hmi_element"/>
  5588     <xsl:param name="hmi_element"/>
  5530     <xsl:call-template name="defs_by_labels">
  5589     <xsl:call-template name="defs_by_labels">
  5531       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5590       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5532       <xsl:with-param name="labels">
  5591       <xsl:with-param name="labels">
  5533         <xsl:text>Esc Enter BackSpace Keys Info Value</xsl:text>
  5592         <xsl:text>Esc Enter BackSpace Keys Info Value</xsl:text>
  5584     <xsl:text>, </xsl:text>
  5643     <xsl:text>, </xsl:text>
  5585     <xsl:value-of select="$g/@y"/>
  5644     <xsl:value-of select="$g/@y"/>
  5586     <xsl:text>],
  5645     <xsl:text>],
  5587 </xsl:text>
  5646 </xsl:text>
  5588   </xsl:template>
  5647   </xsl:template>
  5589   <xsl:template mode="widget_defs" match="widget[@type='List']">
  5648   <xsl:template match="widget[@type='List']" mode="widget_defs">
       
  5649     <xsl:param name="hmi_element"/>
  5590     <xsl:param name="hmi_element"/>
  5650     <xsl:param name="hmi_element"/>
  5591     <xsl:text>    items: {
  5651     <xsl:text>    items: {
  5592 </xsl:text>
  5652 </xsl:text>
  5593     <xsl:for-each select="$hmi_element/*[@inkscape:label]">
  5653     <xsl:for-each select="$hmi_element/*[@inkscape:label]">
  5594       <xsl:text>        </xsl:text>
  5654       <xsl:text>        </xsl:text>
  5599 </xsl:text>
  5659 </xsl:text>
  5600     </xsl:for-each>
  5660     </xsl:for-each>
  5601     <xsl:text>    },
  5661     <xsl:text>    },
  5602 </xsl:text>
  5662 </xsl:text>
  5603   </xsl:template>
  5663   </xsl:template>
  5604   <xsl:template mode="widget_defs" match="widget[@type='TextStyleList']">
  5664   <xsl:template match="widget[@type='TextStyleList']" mode="widget_defs">
       
  5665     <xsl:param name="hmi_element"/>
  5605     <xsl:param name="hmi_element"/>
  5666     <xsl:param name="hmi_element"/>
  5606     <xsl:text>    styles: {
  5667     <xsl:text>    styles: {
  5607 </xsl:text>
  5668 </xsl:text>
  5608     <xsl:for-each select="$hmi_element/*[@inkscape:label]">
  5669     <xsl:for-each select="$hmi_element/*[@inkscape:label]">
  5609       <xsl:variable name="style" select="func:refered_elements(.)[self::svg:text]/@style"/>
  5670       <xsl:variable name="style" select="func:refered_elements(.)[self::svg:text]/@style"/>
  5615 </xsl:text>
  5676 </xsl:text>
  5616     </xsl:for-each>
  5677     </xsl:for-each>
  5617     <xsl:text>    },
  5678     <xsl:text>    },
  5618 </xsl:text>
  5679 </xsl:text>
  5619   </xsl:template>
  5680   </xsl:template>
  5620   <xsl:template mode="widget_class" match="widget[@type='Meter']">
  5681   <xsl:template match="widget[@type='Metter']" mode="widget_class">
  5621     <xsl:text>class MeterWidget extends Widget{
  5682     <xsl:text>class </xsl:text>
       
  5683     <xsl:text>MetterWidget</xsl:text>
       
  5684     <xsl:text> extends Widget{
  5622 </xsl:text>
  5685 </xsl:text>
  5623     <xsl:text>    frequency = 10;
  5686     <xsl:text>    frequency = 10;
  5624 </xsl:text>
  5687 </xsl:text>
  5625     <xsl:text>    origin = undefined;
  5688     <xsl:text>    origin = undefined;
  5626 </xsl:text>
  5689 </xsl:text>
  5670 </xsl:text>
  5733 </xsl:text>
  5671     <xsl:text>        this.origin = this.needle_elt.getPointAtLength(0);
  5734     <xsl:text>        this.origin = this.needle_elt.getPointAtLength(0);
  5672 </xsl:text>
  5735 </xsl:text>
  5673     <xsl:text>    }
  5736     <xsl:text>    }
  5674 </xsl:text>
  5737 </xsl:text>
  5675     <xsl:text>
       
  5676 </xsl:text>
       
  5677     <xsl:text>}
  5738     <xsl:text>}
  5678 </xsl:text>
  5739 </xsl:text>
  5679   </xsl:template>
  5740   </xsl:template>
  5680   <xsl:template mode="widget_defs" match="widget[@type='Meter']">
  5741   <xsl:template match="widget[@type='Meter']" mode="widget_defs">
       
  5742     <xsl:param name="hmi_element"/>
  5681     <xsl:param name="hmi_element"/>
  5743     <xsl:param name="hmi_element"/>
  5682     <xsl:call-template name="defs_by_labels">
  5744     <xsl:call-template name="defs_by_labels">
  5683       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5745       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5684       <xsl:with-param name="labels">
  5746       <xsl:with-param name="labels">
  5685         <xsl:text>needle range</xsl:text>
  5747         <xsl:text>needle range</xsl:text>
  5691         <xsl:text>value min max</xsl:text>
  5753         <xsl:text>value min max</xsl:text>
  5692       </xsl:with-param>
  5754       </xsl:with-param>
  5693       <xsl:with-param name="mandatory" select="'no'"/>
  5755       <xsl:with-param name="mandatory" select="'no'"/>
  5694     </xsl:call-template>
  5756     </xsl:call-template>
  5695   </xsl:template>
  5757   </xsl:template>
  5696   <xsl:template mode="widget_class" match="widget[@type='MultiState']">
  5758   <xsl:template match="widget[@type='MultiState']" mode="widget_class">
  5697     <xsl:text>class MultiStateWidget extends Widget{
  5759     <xsl:text>class </xsl:text>
       
  5760     <xsl:text>MultiStateWidget</xsl:text>
       
  5761     <xsl:text> extends Widget{
  5698 </xsl:text>
  5762 </xsl:text>
  5699     <xsl:text>    frequency = 5;
  5763     <xsl:text>    frequency = 5;
  5700 </xsl:text>
  5764 </xsl:text>
  5701     <xsl:text>    state = 0;
  5765     <xsl:text>    state = 0;
  5702 </xsl:text>
  5766 </xsl:text>
  5773     <xsl:text>    }
  5837     <xsl:text>    }
  5774 </xsl:text>
  5838 </xsl:text>
  5775     <xsl:text>}
  5839     <xsl:text>}
  5776 </xsl:text>
  5840 </xsl:text>
  5777   </xsl:template>
  5841   </xsl:template>
  5778   <xsl:template mode="widget_defs" match="widget[@type='MultiState']">
  5842   <xsl:template match="widget[@type='MultiState']" mode="widget_defs">
       
  5843     <xsl:param name="hmi_element"/>
  5779     <xsl:param name="hmi_element"/>
  5844     <xsl:param name="hmi_element"/>
  5780     <xsl:text>    choices: [
  5845     <xsl:text>    choices: [
  5781 </xsl:text>
  5846 </xsl:text>
  5782     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  5847     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  5783     <xsl:for-each select="$result_svg_ns//*[@id = $hmi_element/@id]//*[regexp:test(@inkscape:label,$regex)]">
  5848     <xsl:for-each select="$result_svg_ns//*[@id = $hmi_element/@id]//*[regexp:test(@inkscape:label,$regex)]">
  5804 </xsl:text>
  5869 </xsl:text>
  5805     </xsl:for-each>
  5870     </xsl:for-each>
  5806     <xsl:text>    ],
  5871     <xsl:text>    ],
  5807 </xsl:text>
  5872 </xsl:text>
  5808   </xsl:template>
  5873   </xsl:template>
  5809   <xsl:template mode="widget_class" match="widget[@type='ScrollBar']">
  5874   <xsl:template match="widget[@type='ScrollBar']" mode="widget_class">
  5810     <xsl:text>class ScrollBarWidget extends Widget{
  5875     <xsl:text>class </xsl:text>
       
  5876     <xsl:text>ScrollBarWidget</xsl:text>
       
  5877     <xsl:text> extends Widget{
  5811 </xsl:text>
  5878 </xsl:text>
  5812     <xsl:text>    frequency = 10;
  5879     <xsl:text>    frequency = 10;
  5813 </xsl:text>
  5880 </xsl:text>
  5814     <xsl:text>    position = undefined;
  5881     <xsl:text>    position = undefined;
  5815 </xsl:text>
  5882 </xsl:text>
  5982     <xsl:text>    }
  6049     <xsl:text>    }
  5983 </xsl:text>
  6050 </xsl:text>
  5984     <xsl:text>}
  6051     <xsl:text>}
  5985 </xsl:text>
  6052 </xsl:text>
  5986   </xsl:template>
  6053   </xsl:template>
  5987   <xsl:template mode="widget_defs" match="widget[@type='ScrollBar']">
  6054   <xsl:template match="widget[@type='ScrollBar']" mode="widget_defs">
       
  6055     <xsl:param name="hmi_element"/>
  5988     <xsl:param name="hmi_element"/>
  6056     <xsl:param name="hmi_element"/>
  5989     <xsl:call-template name="defs_by_labels">
  6057     <xsl:call-template name="defs_by_labels">
  5990       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  6058       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  5991       <xsl:with-param name="labels">
  6059       <xsl:with-param name="labels">
  5992         <xsl:text>cursor range</xsl:text>
  6060         <xsl:text>cursor range</xsl:text>
  6014 </xsl:text>
  6082 </xsl:text>
  6015     </xsl:if>
  6083     </xsl:if>
  6016     <xsl:text>    },
  6084     <xsl:text>    },
  6017 </xsl:text>
  6085 </xsl:text>
  6018   </xsl:template>
  6086   </xsl:template>
  6019   <xsl:template mode="widget_class" match="widget[@type='Slider']">
  6087   <xsl:template match="widget[@type='Slider']" mode="widget_class">
       
  6088     <xsl:text>class </xsl:text>
       
  6089     <xsl:text>SliderWidget</xsl:text>
       
  6090     <xsl:text> extends Widget{
       
  6091 </xsl:text>
  6020     <xsl:text>class SliderWidget extends Widget{
  6092     <xsl:text>class SliderWidget extends Widget{
  6021 </xsl:text>
  6093 </xsl:text>
  6022     <xsl:text>    frequency = 5;
  6094     <xsl:text>    frequency = 5;
  6023 </xsl:text>
  6095 </xsl:text>
  6024     <xsl:text>    range = undefined;
  6096     <xsl:text>    range = undefined;
  6685 </xsl:text>
  6757 </xsl:text>
  6686     <xsl:text>    }
  6758     <xsl:text>    }
  6687 </xsl:text>
  6759 </xsl:text>
  6688     <xsl:text>}
  6760     <xsl:text>}
  6689 </xsl:text>
  6761 </xsl:text>
  6690   </xsl:template>
  6762     <xsl:text>}
  6691   <xsl:template mode="widget_defs" match="widget[@type='Slider']">
  6763 </xsl:text>
       
  6764   </xsl:template>
       
  6765   <xsl:template match="widget[@type='Slider']" mode="widget_defs">
       
  6766     <xsl:param name="hmi_element"/>
  6692     <xsl:param name="hmi_element"/>
  6767     <xsl:param name="hmi_element"/>
  6693     <xsl:call-template name="defs_by_labels">
  6768     <xsl:call-template name="defs_by_labels">
  6694       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  6769       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  6695       <xsl:with-param name="labels">
  6770       <xsl:with-param name="labels">
  6696         <xsl:text>handle range</xsl:text>
  6771         <xsl:text>handle range</xsl:text>
  6701       <xsl:with-param name="labels">
  6776       <xsl:with-param name="labels">
  6702         <xsl:text>value min max setpoint</xsl:text>
  6777         <xsl:text>value min max setpoint</xsl:text>
  6703       </xsl:with-param>
  6778       </xsl:with-param>
  6704       <xsl:with-param name="mandatory" select="'no'"/>
  6779       <xsl:with-param name="mandatory" select="'no'"/>
  6705     </xsl:call-template>
  6780     </xsl:call-template>
  6706     <xsl:text>
  6781   </xsl:template>
  6707 </xsl:text>
  6782   <xsl:template match="widget[@type='Switch']" mode="widget_class">
  6708   </xsl:template>
  6783     <xsl:text>class </xsl:text>
  6709   <xsl:template mode="widget_class" match="widget[@type='Switch']">
  6784     <xsl:text>SwitchWidget</xsl:text>
  6710     <xsl:text>class SwitchWidget extends Widget{
  6785     <xsl:text> extends Widget{
  6711 </xsl:text>
  6786 </xsl:text>
  6712     <xsl:text>    frequency = 5;
  6787     <xsl:text>    frequency = 5;
  6713 </xsl:text>
  6788 </xsl:text>
  6714     <xsl:text>    dispatch(value) {
  6789     <xsl:text>    dispatch(value) {
  6715 </xsl:text>
  6790 </xsl:text>
  6730     <xsl:text>    }
  6805     <xsl:text>    }
  6731 </xsl:text>
  6806 </xsl:text>
  6732     <xsl:text>}
  6807     <xsl:text>}
  6733 </xsl:text>
  6808 </xsl:text>
  6734   </xsl:template>
  6809   </xsl:template>
  6735   <xsl:template mode="widget_defs" match="widget[@type='Switch']">
  6810   <xsl:template match="widget[@type='Switch']" mode="widget_defs">
       
  6811     <xsl:param name="hmi_element"/>
  6736     <xsl:param name="hmi_element"/>
  6812     <xsl:param name="hmi_element"/>
  6737     <xsl:text>    choices: [
  6813     <xsl:text>    choices: [
  6738 </xsl:text>
  6814 </xsl:text>
  6739     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  6815     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  6740     <xsl:variable name="subelts" select="$result_widgets[@id = $hmi_element/@id]//*"/>
  6816     <xsl:variable name="subelts" select="$result_widgets[@id = $hmi_element/@id]//*"/>
  6764 </xsl:text>
  6840 </xsl:text>
  6765     </xsl:for-each>
  6841     </xsl:for-each>
  6766     <xsl:text>    ],
  6842     <xsl:text>    ],
  6767 </xsl:text>
  6843 </xsl:text>
  6768   </xsl:template>
  6844   </xsl:template>
  6769   <xsl:template mode="widget_class" match="widget[@type='ToggleButton']">
  6845   <xsl:template match="widget[@type='ToggleButton']" mode="widget_class">
  6770     <xsl:text>class ToggleButtonWidget extends Widget{
  6846     <xsl:text>class </xsl:text>
       
  6847     <xsl:text>ToggleButtonWidget</xsl:text>
       
  6848     <xsl:text> extends Widget{
  6771 </xsl:text>
  6849 </xsl:text>
  6772     <xsl:text>    frequency = 5;
  6850     <xsl:text>    frequency = 5;
  6773 </xsl:text>
  6851 </xsl:text>
  6774     <xsl:text>    state = 0;
  6852     <xsl:text>    state = 0;
  6775 </xsl:text>
  6853 </xsl:text>
  6844     <xsl:text>    }
  6922     <xsl:text>    }
  6845 </xsl:text>
  6923 </xsl:text>
  6846     <xsl:text>}
  6924     <xsl:text>}
  6847 </xsl:text>
  6925 </xsl:text>
  6848   </xsl:template>
  6926   </xsl:template>
  6849   <xsl:template mode="widget_defs" match="widget[@type='ToggleButton']">
  6927   <xsl:template match="widget[@type='ToggleButton']" mode="widget_defs">
       
  6928     <xsl:param name="hmi_element"/>
  6850     <xsl:param name="hmi_element"/>
  6929     <xsl:param name="hmi_element"/>
  6851     <xsl:call-template name="defs_by_labels">
  6930     <xsl:call-template name="defs_by_labels">
  6852       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  6931       <xsl:with-param name="hmi_element" select="$hmi_element"/>
  6853       <xsl:with-param name="labels">
  6932       <xsl:with-param name="labels">
  6854         <xsl:text>active inactive</xsl:text>
  6933         <xsl:text>active inactive</xsl:text>