svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2850 e38654ec6281
parent 2848 c525b1083653
child 2851 8d15c6238e62
equal deleted inserted replaced
2849:bb89a2fbb4e0 2850:e38654ec6281
   334 </xsl:text>
   334 </xsl:text>
   335     <xsl:text>var hmi_widgets = {
   335     <xsl:text>var hmi_widgets = {
   336 </xsl:text>
   336 </xsl:text>
   337     <xsl:for-each select="$hmi_elements">
   337     <xsl:for-each select="$hmi_elements">
   338       <xsl:variable name="widget" select="func:parselabel(@inkscape:label)/widget"/>
   338       <xsl:variable name="widget" select="func:parselabel(@inkscape:label)/widget"/>
   339       <xsl:text>"</xsl:text>
   339       <xsl:text>    "</xsl:text>
   340       <xsl:value-of select="@id"/>
   340       <xsl:value-of select="@id"/>
   341       <xsl:text>": {
   341       <xsl:text>": {
   342 </xsl:text>
   342 </xsl:text>
   343       <xsl:text>    type: "</xsl:text>
   343       <xsl:text>        type: "</xsl:text>
   344       <xsl:value-of select="$widget/@type"/>
   344       <xsl:value-of select="$widget/@type"/>
   345       <xsl:text>",
   345       <xsl:text>",
   346 </xsl:text>
   346 </xsl:text>
   347       <xsl:text>    args: [
   347       <xsl:text>        args: [
   348 </xsl:text>
   348 </xsl:text>
   349       <xsl:for-each select="$widget/arg">
   349       <xsl:for-each select="$widget/arg">
   350         <xsl:text>        "</xsl:text>
   350         <xsl:text>            "</xsl:text>
   351         <xsl:value-of select="@value"/>
   351         <xsl:value-of select="@value"/>
   352         <xsl:text>"</xsl:text>
   352         <xsl:text>"</xsl:text>
   353         <xsl:if test="position()!=last()">
   353         <xsl:if test="position()!=last()">
   354           <xsl:text>,</xsl:text>
   354           <xsl:text>,</xsl:text>
   355         </xsl:if>
   355         </xsl:if>
   356         <xsl:text>
   356         <xsl:text>
   357 </xsl:text>
   357 </xsl:text>
   358       </xsl:for-each>
   358       </xsl:for-each>
   359       <xsl:text>    ],
   359       <xsl:text>        ],
   360 </xsl:text>
   360 </xsl:text>
   361       <xsl:text>    indexes: [
   361       <xsl:text>        indexes: [
   362 </xsl:text>
   362 </xsl:text>
   363       <xsl:for-each select="$widget/path">
   363       <xsl:for-each select="$widget/path">
   364         <xsl:variable name="hmipath" select="@value"/>
   364         <xsl:variable name="hmipath" select="@value"/>
   365         <xsl:variable name="hmitree_match" select="$indexed_hmitree/*[@hmipath = $hmipath]"/>
   365         <xsl:variable name="hmitree_match" select="$indexed_hmitree/*[@hmipath = $hmipath]"/>
   366         <xsl:choose>
   366         <xsl:choose>
   370               <xsl:value-of select="$hmipath"/>
   370               <xsl:value-of select="$hmipath"/>
   371               <xsl:text>" in HMI tree</xsl:text>
   371               <xsl:text>" in HMI tree</xsl:text>
   372             </xsl:message>
   372             </xsl:message>
   373           </xsl:when>
   373           </xsl:when>
   374           <xsl:otherwise>
   374           <xsl:otherwise>
   375             <xsl:text>        </xsl:text>
   375             <xsl:text>            </xsl:text>
   376             <xsl:value-of select="$hmitree_match/@index"/>
   376             <xsl:value-of select="$hmitree_match/@index"/>
   377             <xsl:if test="position()!=last()">
   377             <xsl:if test="position()!=last()">
   378               <xsl:text>,</xsl:text>
   378               <xsl:text>,</xsl:text>
   379             </xsl:if>
   379             </xsl:if>
   380             <xsl:text>
   380             <xsl:text>
   381 </xsl:text>
   381 </xsl:text>
   382           </xsl:otherwise>
   382           </xsl:otherwise>
   383         </xsl:choose>
   383         </xsl:choose>
   384       </xsl:for-each>
   384       </xsl:for-each>
   385       <xsl:text>    ],
   385       <xsl:text>        ],
   386 </xsl:text>
   386 </xsl:text>
   387       <xsl:text>    element: id("</xsl:text>
   387       <xsl:text>        element: id("</xsl:text>
   388       <xsl:value-of select="@id"/>
   388       <xsl:value-of select="@id"/>
   389       <xsl:text>"),
   389       <xsl:text>"),
   390 </xsl:text>
   390 </xsl:text>
   391       <xsl:apply-templates mode="widget_defs" select="$widget">
   391       <xsl:apply-templates mode="widget_defs" select="$widget">
   392         <xsl:with-param name="hmi_element" select="."/>
   392         <xsl:with-param name="hmi_element" select="."/>
   393       </xsl:apply-templates>
   393       </xsl:apply-templates>
   394       <xsl:text>}</xsl:text>
   394       <xsl:text>    }</xsl:text>
   395       <xsl:if test="position()!=last()">
   395       <xsl:if test="position()!=last()">
   396         <xsl:text>,</xsl:text>
   396         <xsl:text>,</xsl:text>
   397       </xsl:if>
   397       </xsl:if>
   398       <xsl:text>
   398       <xsl:text>
   399 </xsl:text>
   399 </xsl:text>
   409     <xsl:text>
   409     <xsl:text>
   410 </xsl:text>
   410 </xsl:text>
   411     <xsl:text>var hmitree_types = [
   411     <xsl:text>var hmitree_types = [
   412 </xsl:text>
   412 </xsl:text>
   413     <xsl:for-each select="$indexed_hmitree/*">
   413     <xsl:for-each select="$indexed_hmitree/*">
   414       <xsl:text>/* </xsl:text>
   414       <xsl:text>    /* </xsl:text>
   415       <xsl:value-of select="@index"/>
   415       <xsl:value-of select="@index"/>
   416       <xsl:text>  </xsl:text>
   416       <xsl:text>  </xsl:text>
   417       <xsl:value-of select="@hmipath"/>
   417       <xsl:value-of select="@hmipath"/>
   418       <xsl:text> */ "</xsl:text>
   418       <xsl:text> */ "</xsl:text>
   419       <xsl:value-of select="substring(local-name(), 5)"/>
   419       <xsl:value-of select="substring(local-name(), 5)"/>
   431     <xsl:text>var detachable_elements = {
   431     <xsl:text>var detachable_elements = {
   432 </xsl:text>
   432 </xsl:text>
   433     <xsl:for-each select="$detachable_elements">
   433     <xsl:for-each select="$detachable_elements">
   434       <xsl:text>    "</xsl:text>
   434       <xsl:text>    "</xsl:text>
   435       <xsl:value-of select="@id"/>
   435       <xsl:value-of select="@id"/>
   436       <xsl:text>" : {element: id("</xsl:text>
   436       <xsl:text>":[id("</xsl:text>
   437       <xsl:value-of select="@id"/>
   437       <xsl:value-of select="@id"/>
   438       <xsl:text>"), parent:id("</xsl:text>
   438       <xsl:text>"), id("</xsl:text>
   439       <xsl:value-of select="../@id"/>
   439       <xsl:value-of select="../@id"/>
   440       <xsl:text>")}</xsl:text>
   440       <xsl:text>")]</xsl:text>
   441       <xsl:if test="position()!=last()">
   441       <xsl:if test="position()!=last()">
   442         <xsl:text>,</xsl:text>
   442         <xsl:text>,</xsl:text>
   443       </xsl:if>
   443       </xsl:if>
   444       <xsl:text>
   444       <xsl:text>
   445 </xsl:text>
   445 </xsl:text>
   962 </xsl:text>
   962 </xsl:text>
   963     <xsl:text>
   963     <xsl:text>
   964 </xsl:text>
   964 </xsl:text>
   965     <xsl:text>function prepare_svg() {
   965     <xsl:text>function prepare_svg() {
   966 </xsl:text>
   966 </xsl:text>
   967     <xsl:text>    /* set everybody hidden initially for better performance */
   967     <xsl:text>    for(let eltid in detachable_elements){
   968 </xsl:text>
   968 </xsl:text>
   969     <xsl:text>    for(let widget in hmi_widgets){
   969     <xsl:text>        let [element,parent] = detachable_elements[eltid];
   970 </xsl:text>
   970 </xsl:text>
   971     <xsl:text>        if(widget.element != undefined)
   971     <xsl:text>        parent.removeChild(element);
   972 </xsl:text>
       
   973     <xsl:text>            widget.element.style.display = "none";
       
   974 </xsl:text>
   972 </xsl:text>
   975     <xsl:text>    }
   973     <xsl:text>    }
   976 </xsl:text>
   974 </xsl:text>
   977     <xsl:text>        /*for(let name in page_desc){
   975     <xsl:text>};
   978 </xsl:text>
   976 </xsl:text>
   979     <xsl:text>            if(name != new_desc){
   977     <xsl:text>
   980 </xsl:text>
   978 </xsl:text>
   981     <xsl:text>                page_desc[name].widget.element.style.display = "none";
   979     <xsl:text>function switch_page(page_name) {
       
   980 </xsl:text>
       
   981     <xsl:text>    let old_desc = page_desc[current_page];
       
   982 </xsl:text>
       
   983     <xsl:text>    let new_desc = page_desc[page_name];
       
   984 </xsl:text>
       
   985     <xsl:text>
       
   986 </xsl:text>
       
   987     <xsl:text>    if(new_desc == undefined){
       
   988 </xsl:text>
       
   989     <xsl:text>        /* TODO LOG ERROR */
       
   990 </xsl:text>
       
   991     <xsl:text>        return;
       
   992 </xsl:text>
       
   993     <xsl:text>    }
       
   994 </xsl:text>
       
   995     <xsl:text>
       
   996 </xsl:text>
       
   997     <xsl:text>    if(old_desc){
       
   998 </xsl:text>
       
   999     <xsl:text>        for(let widget of old_desc.widgets){
       
  1000 </xsl:text>
       
  1001     <xsl:text>            /* remove subsribers */
       
  1002 </xsl:text>
       
  1003     <xsl:text>            for(let index of widget.indexes){
       
  1004 </xsl:text>
       
  1005     <xsl:text>                subscribers[index].delete(widget);
   982 </xsl:text>
  1006 </xsl:text>
   983     <xsl:text>            }
  1007     <xsl:text>            }
   984 </xsl:text>
  1008 </xsl:text>
   985     <xsl:text>        }*/
  1009     <xsl:text>        }
   986 </xsl:text>
  1010 </xsl:text>
   987     <xsl:text>};
  1011     <xsl:text>        for(let eltid in old_desc.required_detachables){
   988 </xsl:text>
  1012 </xsl:text>
   989     <xsl:text>
  1013     <xsl:text>            if(!(eltid in new_desc.required_detachables)){
   990 </xsl:text>
  1014 </xsl:text>
   991     <xsl:text>function switch_page(page_name) {
  1015     <xsl:text>                let [element, parent] = old_desc.required_detachables[eltid];
   992 </xsl:text>
  1016 </xsl:text>
   993     <xsl:text>    let old_desc = page_desc[current_page];
  1017     <xsl:text>                parent.removeChild(element);
   994 </xsl:text>
  1018 </xsl:text>
   995     <xsl:text>    let new_desc = page_desc[page_name];
  1019     <xsl:text>            }
   996 </xsl:text>
  1020 </xsl:text>
   997     <xsl:text>
  1021     <xsl:text>        }
   998 </xsl:text>
  1022 </xsl:text>
   999     <xsl:text>    if(new_desc == undefined){
  1023     <xsl:text>        for(let eltid in new_desc.required_detachables){
  1000 </xsl:text>
  1024 </xsl:text>
  1001     <xsl:text>        /* TODO LOG ERROR */
  1025     <xsl:text>            if(!(eltid in old_desc.required_detachables)){
  1002 </xsl:text>
  1026 </xsl:text>
  1003     <xsl:text>        return;
  1027     <xsl:text>                let [element, parent] = new_desc.required_detachables[eltid];
       
  1028 </xsl:text>
       
  1029     <xsl:text>                parent.appendChild(element);
       
  1030 </xsl:text>
       
  1031     <xsl:text>            }
       
  1032 </xsl:text>
       
  1033     <xsl:text>        }
       
  1034 </xsl:text>
       
  1035     <xsl:text>    }else{
       
  1036 </xsl:text>
       
  1037     <xsl:text>        for(let eltid in new_desc.required_detachables){
       
  1038 </xsl:text>
       
  1039     <xsl:text>            let [element, parent] = new_desc.required_detachables[eltid];
       
  1040 </xsl:text>
       
  1041     <xsl:text>            parent.appendChild(element);
       
  1042 </xsl:text>
       
  1043     <xsl:text>        }
  1004 </xsl:text>
  1044 </xsl:text>
  1005     <xsl:text>    }
  1045     <xsl:text>    }
  1006 </xsl:text>
  1046 </xsl:text>
  1007     <xsl:text>
  1047     <xsl:text>
  1008 </xsl:text>
  1048 </xsl:text>
  1009     <xsl:text>    if(old_desc){
  1049     <xsl:text>    for(let widget of new_desc.widgets){
  1010 </xsl:text>
  1050 </xsl:text>
  1011     <xsl:text>        for(let widget of old_desc.widgets){
  1051     <xsl:text>        /* add widget's subsribers */
  1012 </xsl:text>
  1052 </xsl:text>
  1013     <xsl:text>
  1053     <xsl:text>        for(let index of widget.indexes){
  1014 </xsl:text>
  1054 </xsl:text>
  1015     <xsl:text>            /* hide widget */
  1055     <xsl:text>            subscribers[index].add(widget);
  1016 </xsl:text>
  1056 </xsl:text>
  1017     <xsl:text>            if(widget.element != undefined)
  1057     <xsl:text>            /* dispatch current cache in newly opened page widgets */
  1018 </xsl:text>
  1058 </xsl:text>
  1019     <xsl:text>                widget.element.style.display = "none";
  1059     <xsl:text>            let cached_val = cache[index];
  1020 </xsl:text>
  1060 </xsl:text>
  1021     <xsl:text>
  1061     <xsl:text>            if(cached_val != undefined)
  1022 </xsl:text>
  1062 </xsl:text>
  1023     <xsl:text>            /* remove subsribers */
  1063     <xsl:text>                dispatch_value_to_widget(widget, index, cached_val, cached_val);
  1024 </xsl:text>
       
  1025     <xsl:text>            for(let index of widget.indexes){
       
  1026 </xsl:text>
       
  1027     <xsl:text>                subscribers[index].delete(widget);
       
  1028 </xsl:text>
       
  1029     <xsl:text>            }
       
  1030 </xsl:text>
  1064 </xsl:text>
  1031     <xsl:text>        }
  1065     <xsl:text>        }
  1032 </xsl:text>
  1066 </xsl:text>
  1033     <xsl:text>        old_desc.widget.element.style.display = "none";
       
  1034 </xsl:text>
       
  1035     <xsl:text>    }
  1067     <xsl:text>    }
  1036 </xsl:text>
       
  1037     <xsl:text>
       
  1038 </xsl:text>
       
  1039     <xsl:text>    for(let widget of new_desc.widgets){
       
  1040 </xsl:text>
       
  1041     <xsl:text>
       
  1042 </xsl:text>
       
  1043     <xsl:text>        /* unhide widget */
       
  1044 </xsl:text>
       
  1045     <xsl:text>        if(widget.element != undefined)
       
  1046 </xsl:text>
       
  1047     <xsl:text>            widget.element.style.display = "inline";
       
  1048 </xsl:text>
       
  1049     <xsl:text>
       
  1050 </xsl:text>
       
  1051     <xsl:text>        /* add widget's subsribers */
       
  1052 </xsl:text>
       
  1053     <xsl:text>        for(let index of widget.indexes){
       
  1054 </xsl:text>
       
  1055     <xsl:text>            subscribers[index].add(widget);
       
  1056 </xsl:text>
       
  1057     <xsl:text>            /* dispatch current cache in newly opened page widgets */
       
  1058 </xsl:text>
       
  1059     <xsl:text>            let cached_val = cache[index];
       
  1060 </xsl:text>
       
  1061     <xsl:text>            if(cached_val != undefined)
       
  1062 </xsl:text>
       
  1063     <xsl:text>                dispatch_value_to_widget(widget, index, cached_val, cached_val);
       
  1064 </xsl:text>
       
  1065     <xsl:text>        }
       
  1066 </xsl:text>
       
  1067     <xsl:text>    }
       
  1068 </xsl:text>
       
  1069     <xsl:text>
       
  1070 </xsl:text>
       
  1071     <xsl:text>    new_desc.widget.element.style.display = "inline";
       
  1072 </xsl:text>
  1068 </xsl:text>
  1073     <xsl:text>
  1069     <xsl:text>
  1074 </xsl:text>
  1070 </xsl:text>
  1075     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1071     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1076 </xsl:text>
  1072 </xsl:text>