svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2847 dffade5c83d3
parent 2846 7b1db17287b6
child 2848 c525b1083653
equal deleted inserted replaced
2846:7b1db17287b6 2847:dffade5c83d3
   322   <xsl:template name="scripts">
   322   <xsl:template name="scripts">
   323     <xsl:text>//(function(){
   323     <xsl:text>//(function(){
   324 </xsl:text>
   324 </xsl:text>
   325     <xsl:text>
   325     <xsl:text>
   326 </xsl:text>
   326 </xsl:text>
       
   327     <xsl:text>id = idstr =&gt; document.getElementById(idstr);
       
   328 </xsl:text>
       
   329     <xsl:text>
       
   330 </xsl:text>
   327     <xsl:text>var hmi_hash = [</xsl:text>
   331     <xsl:text>var hmi_hash = [</xsl:text>
   328     <xsl:value-of select="$hmitree/@hash"/>
   332     <xsl:value-of select="$hmitree/@hash"/>
   329     <xsl:text>]; 
   333     <xsl:text>]; 
   330 </xsl:text>
   334 </xsl:text>
   331     <xsl:text>var hmi_widgets = {
   335     <xsl:text>var hmi_widgets = {
   378           </xsl:otherwise>
   382           </xsl:otherwise>
   379         </xsl:choose>
   383         </xsl:choose>
   380       </xsl:for-each>
   384       </xsl:for-each>
   381       <xsl:text>    ],
   385       <xsl:text>    ],
   382 </xsl:text>
   386 </xsl:text>
   383       <xsl:text>    element: document.getElementById("</xsl:text>
   387       <xsl:text>    element: id("</xsl:text>
   384       <xsl:value-of select="@id"/>
   388       <xsl:value-of select="@id"/>
   385       <xsl:text>"),
   389       <xsl:text>"),
   386 </xsl:text>
   390 </xsl:text>
   387       <xsl:apply-templates mode="widget_defs" select="$widget">
   391       <xsl:apply-templates mode="widget_defs" select="$widget">
   388         <xsl:with-param name="hmi_element" select="."/>
   392         <xsl:with-param name="hmi_element" select="."/>
   422     </xsl:for-each>
   426     </xsl:for-each>
   423     <xsl:text>]
   427     <xsl:text>]
   424 </xsl:text>
   428 </xsl:text>
   425     <xsl:text>
   429     <xsl:text>
   426 </xsl:text>
   430 </xsl:text>
       
   431     <xsl:text>var detachable_elements = {
       
   432 </xsl:text>
       
   433     <xsl:for-each select="$detachable_elements">
       
   434       <xsl:text>    "</xsl:text>
       
   435       <xsl:value-of select="@id"/>
       
   436       <xsl:text>" : {element: id("</xsl:text>
       
   437       <xsl:value-of select="@id"/>
       
   438       <xsl:text>"), parent:id("</xsl:text>
       
   439       <xsl:value-of select="../@id"/>
       
   440       <xsl:text>")}</xsl:text>
       
   441       <xsl:if test="position()!=last()">
       
   442         <xsl:text>,</xsl:text>
       
   443       </xsl:if>
       
   444       <xsl:text>
       
   445 </xsl:text>
       
   446     </xsl:for-each>
       
   447     <xsl:text>}
       
   448 </xsl:text>
       
   449     <xsl:text>
       
   450 </xsl:text>
   427     <xsl:text>var page_desc = {
   451     <xsl:text>var page_desc = {
   428 </xsl:text>
   452 </xsl:text>
   429     <xsl:for-each select="$hmi_pages">
   453     <xsl:for-each select="$hmi_pages">
   430       <xsl:variable name="desc" select="func:parselabel(@inkscape:label)/widget"/>
   454       <xsl:variable name="desc" select="func:parselabel(@inkscape:label)/widget"/>
   431       <xsl:variable name="page" select="."/>
   455       <xsl:variable name="page" select="."/>
   432       <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/>
   456       <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/>
   433       <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/>
   457       <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/>
   434       <xsl:variable name="all_page_ids" select="$page_all_elements[@id = $hmi_elements/@id and @id != $page/@id]/@id"/>
   458       <xsl:variable name="all_page_ids" select="$page_all_elements[@id = $hmi_elements/@id and @id != $page/@id]/@id"/>
   435       <xsl:variable name="shorter_list" select="func:sumarized_elements($page_all_elements)"/>
   459       <xsl:variable name="required_detachables" select="func:sumarized_elements($page_all_elements)"/>
   436       <xsl:text>    "</xsl:text>
   460       <xsl:text>    "</xsl:text>
   437       <xsl:value-of select="$desc/arg[1]/@value"/>
   461       <xsl:value-of select="$desc/arg[1]/@value"/>
   438       <xsl:text>": {
   462       <xsl:text>": {
   439 </xsl:text>
   463 </xsl:text>
   440       <xsl:text>        widget: hmi_widgets["</xsl:text>
   464       <xsl:text>        widget: hmi_widgets["</xsl:text>
   463         <xsl:text>
   487         <xsl:text>
   464 </xsl:text>
   488 </xsl:text>
   465       </xsl:for-each>
   489       </xsl:for-each>
   466       <xsl:text>        ],
   490       <xsl:text>        ],
   467 </xsl:text>
   491 </xsl:text>
   468       <xsl:text>        required_elements: [
   492       <xsl:text>        required_detachables: [
   469 </xsl:text>
   493 </xsl:text>
   470       <xsl:for-each select="$shorter_list">
   494       <xsl:for-each select="$required_detachables">
   471         <xsl:text>            "</xsl:text>
   495         <xsl:text>            detachable_elements["</xsl:text>
   472         <xsl:value-of select="@id"/>
   496         <xsl:value-of select="@id"/>
   473         <xsl:text>",
   497         <xsl:text>"]</xsl:text>
       
   498         <xsl:if test="position()!=last()">
       
   499           <xsl:text>,</xsl:text>
       
   500         </xsl:if>
       
   501         <xsl:text>
   474 </xsl:text>
   502 </xsl:text>
   475       </xsl:for-each>
   503       </xsl:for-each>
   476       <xsl:text>        ]
   504       <xsl:text>        ]
   477 </xsl:text>
   505 </xsl:text>
   478       <xsl:text>    }</xsl:text>
   506       <xsl:text>    }</xsl:text>
   488 </xsl:text>
   516 </xsl:text>
   489     <xsl:text>var default_page = "</xsl:text>
   517     <xsl:text>var default_page = "</xsl:text>
   490     <xsl:value-of select="$default_page"/>
   518     <xsl:value-of select="$default_page"/>
   491     <xsl:text>";
   519     <xsl:text>";
   492 </xsl:text>
   520 </xsl:text>
   493     <xsl:text>var svg_root = document.getElementById("</xsl:text>
   521     <xsl:text>var svg_root = id("</xsl:text>
   494     <xsl:value-of select="$svg_root_id"/>
   522     <xsl:value-of select="$svg_root_id"/>
   495     <xsl:text>");
   523     <xsl:text>");
   496 </xsl:text>
   524 </xsl:text>
   497     <xsl:text>// svghmi.js
   525     <xsl:text>// svghmi.js
   498 </xsl:text>
   526 </xsl:text>
   930 </xsl:text>
   958 </xsl:text>
   931     <xsl:text>var current_page;
   959     <xsl:text>var current_page;
   932 </xsl:text>
   960 </xsl:text>
   933     <xsl:text>
   961     <xsl:text>
   934 </xsl:text>
   962 </xsl:text>
   935     <xsl:text>// function prepare_svg() {
       
   936 </xsl:text>
       
   937     <xsl:text>//     /* set everybody hidden initially for better performance */
       
   938 </xsl:text>
       
   939     <xsl:text>//     for(let [elt,elt_parent] in detachable_elements){
       
   940 </xsl:text>
       
   941     <xsl:text>//         elt_parent.removeChild(elt)
       
   942 </xsl:text>
       
   943     <xsl:text>//     }
       
   944 </xsl:text>
       
   945     <xsl:text>// };
       
   946 </xsl:text>
       
   947     <xsl:text>
       
   948 </xsl:text>
       
   949     <xsl:text>function prepare_svg() {
   963     <xsl:text>function prepare_svg() {
   950 </xsl:text>
   964 </xsl:text>
   951     <xsl:text>    /* set everybody hidden initially for better performance */
   965     <xsl:text>    /* set everybody hidden initially for better performance */
   952 </xsl:text>
   966 </xsl:text>
   953     <xsl:text>    for(let widget_id in hmi_widgets){
   967     <xsl:text>    for(let widget in hmi_widgets){
   954 </xsl:text>
       
   955     <xsl:text>        let widget = hmi_widgets[widget_id];
       
   956 </xsl:text>
   968 </xsl:text>
   957     <xsl:text>        if(widget.element != undefined)
   969     <xsl:text>        if(widget.element != undefined)
   958 </xsl:text>
   970 </xsl:text>
   959     <xsl:text>            widget.element.style.display = "none";
   971     <xsl:text>            widget.element.style.display = "none";
   960 </xsl:text>
   972 </xsl:text>
   961     <xsl:text>    }
   973     <xsl:text>    }
       
   974 </xsl:text>
       
   975     <xsl:text>        /*for(let name in page_desc){
       
   976 </xsl:text>
       
   977     <xsl:text>            if(name != new_desc){
       
   978 </xsl:text>
       
   979     <xsl:text>                page_desc[name].widget.element.style.display = "none";
       
   980 </xsl:text>
       
   981     <xsl:text>            }
       
   982 </xsl:text>
       
   983     <xsl:text>        }*/
   962 </xsl:text>
   984 </xsl:text>
   963     <xsl:text>};
   985     <xsl:text>};
   964 </xsl:text>
   986 </xsl:text>
   965     <xsl:text>
   987     <xsl:text>
   966 </xsl:text>
   988 </xsl:text>
  1152             </xsl:message>
  1174             </xsl:message>
  1153           </xsl:if>
  1175           </xsl:if>
  1154         </xsl:when>
  1176         </xsl:when>
  1155         <xsl:otherwise>
  1177         <xsl:otherwise>
  1156           <xsl:value-of select="$name"/>
  1178           <xsl:value-of select="$name"/>
  1157           <xsl:text>_elt: document.getElementById("</xsl:text>
  1179           <xsl:text>_elt: id("</xsl:text>
  1158           <xsl:value-of select="$elt_id"/>
  1180           <xsl:value-of select="$elt_id"/>
  1159           <xsl:text>"),
  1181           <xsl:text>"),
  1160 </xsl:text>
  1182 </xsl:text>
  1161         </xsl:otherwise>
  1183         </xsl:otherwise>
  1162       </xsl:choose>
  1184       </xsl:choose>
  1258 </xsl:text>
  1280 </xsl:text>
  1259     <xsl:variable name="edit_elt_id" select="$hmi_element/*[@inkscape:label='edit'][1]/@id"/>
  1281     <xsl:variable name="edit_elt_id" select="$hmi_element/*[@inkscape:label='edit'][1]/@id"/>
  1260     <xsl:text>init: function() {
  1282     <xsl:text>init: function() {
  1261 </xsl:text>
  1283 </xsl:text>
  1262     <xsl:if test="$edit_elt_id">
  1284     <xsl:if test="$edit_elt_id">
  1263       <xsl:text>    document.getElementById("</xsl:text>
  1285       <xsl:text>    id("</xsl:text>
  1264       <xsl:value-of select="$edit_elt_id"/>
  1286       <xsl:value-of select="$edit_elt_id"/>
  1265       <xsl:text>").addEventListener(
  1287       <xsl:text>").addEventListener(
  1266 </xsl:text>
  1288 </xsl:text>
  1267       <xsl:text>        "click", 
  1289       <xsl:text>        "click", 
  1268 </xsl:text>
  1290 </xsl:text>
  1269       <xsl:text>        evt =&gt; alert('XXX TODO : Edit value'));
  1291       <xsl:text>        evt =&gt; alert('XXX TODO : Edit value'));
  1270 </xsl:text>
  1292 </xsl:text>
  1271     </xsl:if>
  1293     </xsl:if>
  1272     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]">
  1294     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]">
  1273       <xsl:text>    document.getElementById("</xsl:text>
  1295       <xsl:text>    id("</xsl:text>
  1274       <xsl:value-of select="@id"/>
  1296       <xsl:value-of select="@id"/>
  1275       <xsl:text>").addEventListener(
  1297       <xsl:text>").addEventListener(
  1276 </xsl:text>
  1298 </xsl:text>
  1277       <xsl:text>        "click", 
  1299       <xsl:text>        "click", 
  1278 </xsl:text>
  1300 </xsl:text>
  1324     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+)(#.*)?$'"/>
  1346     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+)(#.*)?$'"/>
  1325     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,$regex)]">
  1347     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,$regex)]">
  1326       <xsl:variable name="literal" select="regexp:match(@inkscape:label,$regex)[2]"/>
  1348       <xsl:variable name="literal" select="regexp:match(@inkscape:label,$regex)[2]"/>
  1327       <xsl:text>    {
  1349       <xsl:text>    {
  1328 </xsl:text>
  1350 </xsl:text>
  1329       <xsl:text>        elt:document.getElementById("</xsl:text>
  1351       <xsl:text>        elt:id("</xsl:text>
  1330       <xsl:value-of select="@id"/>
  1352       <xsl:value-of select="@id"/>
  1331       <xsl:text>"),
  1353       <xsl:text>"),
  1332 </xsl:text>
  1354 </xsl:text>
  1333       <xsl:text>        style:"</xsl:text>
  1355       <xsl:text>        style:"</xsl:text>
  1334       <xsl:value-of select="@style"/>
  1356       <xsl:value-of select="@style"/>