svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2966 7349063b19d8
parent 2962 02ea529fd08c
child 2969 88988edb2e93
equal deleted inserted replaced
2965:8f928cee01e5 2966:7349063b19d8
   864 </xsl:text>
   864 </xsl:text>
   865     <xsl:text>
   865     <xsl:text>
   866 </xsl:text>
   866 </xsl:text>
   867     <xsl:text>class Widget {
   867     <xsl:text>class Widget {
   868 </xsl:text>
   868 </xsl:text>
       
   869     <xsl:text>    offset = 0;
       
   870 </xsl:text>
       
   871     <xsl:text>    frequency = 10; /* FIXME arbitrary default max freq. Obtain from config ? */
       
   872 </xsl:text>
   869     <xsl:text>    constructor(elt_id,args,indexes,members){
   873     <xsl:text>    constructor(elt_id,args,indexes,members){
   870 </xsl:text>
   874 </xsl:text>
       
   875     <xsl:text>        this.element_id = elt_id;
       
   876 </xsl:text>
   871     <xsl:text>        this.element = id(elt_id);
   877     <xsl:text>        this.element = id(elt_id);
   872 </xsl:text>
   878 </xsl:text>
   873     <xsl:text>        this.args = args;
   879     <xsl:text>        this.args = args;
   874 </xsl:text>
   880 </xsl:text>
   875     <xsl:text>        this.indexes = indexes;
   881     <xsl:text>        this.indexes = indexes;
   876 </xsl:text>
   882 </xsl:text>
   877     <xsl:text>        this.offset = 0;
       
   878 </xsl:text>
       
   879     <xsl:text>        Object.keys(members).forEach(prop =&gt; this[prop]=members[prop]);
   883     <xsl:text>        Object.keys(members).forEach(prop =&gt; this[prop]=members[prop]);
   880 </xsl:text>
   884 </xsl:text>
   881     <xsl:text>    }
   885     <xsl:text>    }
       
   886 </xsl:text>
       
   887     <xsl:text>
   882 </xsl:text>
   888 </xsl:text>
   883     <xsl:text>    unsub(){
   889     <xsl:text>    unsub(){
   884 </xsl:text>
   890 </xsl:text>
   885     <xsl:text>        /* remove subsribers */
   891     <xsl:text>        /* remove subsribers */
   886 </xsl:text>
   892 </xsl:text>
  1076       <xsl:otherwise>
  1082       <xsl:otherwise>
  1077         <func:result select="$txt"/>
  1083         <func:result select="$txt"/>
  1078       </xsl:otherwise>
  1084       </xsl:otherwise>
  1079     </xsl:choose>
  1085     </xsl:choose>
  1080   </func:function>
  1086   </func:function>
  1081   <xsl:template mode="widget_defs" match="widget[@type='Back']">
  1087   <xsl:template mode="widget_class" match="widget[@type='Back']">
  1082     <xsl:param name="hmi_element"/>
  1088     <xsl:text>class BackWidget extends Widget{
  1083     <xsl:text>    on_click: function(evt) {
  1089 </xsl:text>
       
  1090     <xsl:text>    on_click(evt) {
  1084 </xsl:text>
  1091 </xsl:text>
  1085     <xsl:text>        if(jump_history.length &gt; 1){
  1092     <xsl:text>        if(jump_history.length &gt; 1){
  1086 </xsl:text>
  1093 </xsl:text>
  1087     <xsl:text>           jump_history.pop();
  1094     <xsl:text>           jump_history.pop();
  1088 </xsl:text>
  1095 </xsl:text>
  1090 </xsl:text>
  1097 </xsl:text>
  1091     <xsl:text>           switch_page(page_name, index);
  1098     <xsl:text>           switch_page(page_name, index);
  1092 </xsl:text>
  1099 </xsl:text>
  1093     <xsl:text>        }
  1100     <xsl:text>        }
  1094 </xsl:text>
  1101 </xsl:text>
  1095     <xsl:text>    },
  1102     <xsl:text>    }
  1096 </xsl:text>
  1103 </xsl:text>
  1097     <xsl:text>    init: function() {
  1104     <xsl:text>    init() {
  1098 </xsl:text>
  1105 </xsl:text>
  1099     <xsl:text>        this.element.setAttribute("onclick", "hmi_widgets['</xsl:text>
  1106     <xsl:text>        this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)");
  1100     <xsl:value-of select="$hmi_element/@id"/>
  1107 </xsl:text>
  1101     <xsl:text>'].on_click(evt)");
  1108     <xsl:text>    }
  1102 </xsl:text>
  1109 </xsl:text>
  1103     <xsl:text>    },
  1110     <xsl:text>}
  1104 </xsl:text>
  1111 </xsl:text>
  1105   </xsl:template>
  1112   </xsl:template>
  1106   <xsl:template mode="widget_defs" match="widget[@type='Button']">
  1113   <xsl:template mode="widget_class" match="widget[@type='Button']">
  1107     <xsl:param name="hmi_element"/>
  1114     <xsl:text>class ButtonWidget extends Widget{
  1108     <xsl:text>frequency: 5,
  1115 </xsl:text>
  1109 </xsl:text>
  1116     <xsl:text>    frequency = 5;
  1110     <xsl:text>init: function() {
  1117 </xsl:text>
  1111 </xsl:text>
  1118     <xsl:text>    init() {
  1112     <xsl:text>    this.element.addEventListener(
  1119 </xsl:text>
  1113 </xsl:text>
  1120     <xsl:text>        // TODO : use attributes to allow interaction through svg:use
  1114     <xsl:text>      "mousedown",
  1121 </xsl:text>
  1115 </xsl:text>
  1122     <xsl:text>        // TODO : deal with dragging
  1116     <xsl:text>      evt =&gt; {
  1123 </xsl:text>
  1117 </xsl:text>
  1124     <xsl:text>        this.element.addEventListener(
  1118     <xsl:text>          change_hmi_value(this.indexes[0], "=1");
  1125 </xsl:text>
  1119 </xsl:text>
  1126     <xsl:text>          "mousedown",
  1120     <xsl:text>      });
  1127 </xsl:text>
  1121 </xsl:text>
  1128     <xsl:text>          evt =&gt; {
  1122     <xsl:text>    this.element.addEventListener(
  1129 </xsl:text>
  1123 </xsl:text>
  1130     <xsl:text>              change_hmi_value(this.indexes[0], "=1");
  1124     <xsl:text>      "mouseup",
  1131 </xsl:text>
  1125 </xsl:text>
  1132     <xsl:text>          });
  1126     <xsl:text>      evt =&gt; {
  1133 </xsl:text>
  1127 </xsl:text>
  1134     <xsl:text>        this.element.addEventListener(
  1128     <xsl:text>          change_hmi_value(this.indexes[0], "=0");
  1135 </xsl:text>
  1129 </xsl:text>
  1136     <xsl:text>          "mouseup",
  1130     <xsl:text>      });
  1137 </xsl:text>
  1131 </xsl:text>
  1138     <xsl:text>          evt =&gt; {
  1132     <xsl:text>},
  1139 </xsl:text>
       
  1140     <xsl:text>              change_hmi_value(this.indexes[0], "=0");
       
  1141 </xsl:text>
       
  1142     <xsl:text>          });
       
  1143 </xsl:text>
       
  1144     <xsl:text>    }
       
  1145 </xsl:text>
       
  1146     <xsl:text>}
  1133 </xsl:text>
  1147 </xsl:text>
  1134   </xsl:template>
  1148   </xsl:template>
  1135   <xsl:template mode="widget_defs" match="widget[@type='CircularBar']">
  1149   <xsl:template mode="widget_defs" match="widget[@type='CircularBar']">
  1136     <xsl:param name="hmi_element"/>
  1150     <xsl:param name="hmi_element"/>
  1137     <xsl:text>frequency: 10,
  1151     <xsl:text>frequency: 10,
  1765     <xsl:text>    },
  1779     <xsl:text>    },
  1766 </xsl:text>
  1780 </xsl:text>
  1767   </xsl:template>
  1781   </xsl:template>
  1768   <xsl:template mode="widget_defs" match="widget[@type='ForEach']">
  1782   <xsl:template mode="widget_defs" match="widget[@type='ForEach']">
  1769     <xsl:param name="hmi_element"/>
  1783     <xsl:param name="hmi_element"/>
  1770     <xsl:variable name="widgets" select="func:refered_elements($forEach_widgets)[not(@id = $forEach_widgets_ids)]"/>
       
  1771     <xsl:variable name="class" select="arg[1]/@value"/>
  1784     <xsl:variable name="class" select="arg[1]/@value"/>
  1772     <xsl:variable name="base_path" select="path/@value"/>
  1785     <xsl:variable name="base_path" select="path/@value"/>
  1773     <xsl:variable name="hmi_index_base" select="$indexed_hmitree/*[@hmipath = $base_path]"/>
  1786     <xsl:variable name="hmi_index_base" select="$indexed_hmitree/*[@hmipath = $base_path]"/>
  1774     <xsl:variable name="hmi_tree_base" select="$hmitree/descendant-or-self::*[@path = $hmi_index_base/@path]"/>
  1787     <xsl:variable name="hmi_tree_base" select="$hmitree/descendant-or-self::*[@path = $hmi_index_base/@path]"/>
  1775     <xsl:variable name="hmi_tree_items" select="$hmi_tree_base/*[@class = $class]"/>
  1788     <xsl:variable name="hmi_tree_items" select="$hmi_tree_base/*[@class = $class]"/>
  2583     <xsl:text>        this.origin = this.needle_elt.getPointAtLength(0);
  2596     <xsl:text>        this.origin = this.needle_elt.getPointAtLength(0);
  2584 </xsl:text>
  2597 </xsl:text>
  2585     <xsl:text>    },
  2598     <xsl:text>    },
  2586 </xsl:text>
  2599 </xsl:text>
  2587   </xsl:template>
  2600   </xsl:template>
       
  2601   <xsl:template mode="widget_class" match="widget[@type='Switch']">
       
  2602     <xsl:text>class SwitchWidget extends Widget{
       
  2603 </xsl:text>
       
  2604     <xsl:text>    frequency = 5;
       
  2605 </xsl:text>
       
  2606     <xsl:text>    dispatch(value) {
       
  2607 </xsl:text>
       
  2608     <xsl:text>        for(let choice of this.choices){
       
  2609 </xsl:text>
       
  2610     <xsl:text>            if(value != choice.value){
       
  2611 </xsl:text>
       
  2612     <xsl:text>                choice.elt.setAttribute("style", "display:none");
       
  2613 </xsl:text>
       
  2614     <xsl:text>            } else {
       
  2615 </xsl:text>
       
  2616     <xsl:text>                choice.elt.setAttribute("style", choice.style);
       
  2617 </xsl:text>
       
  2618     <xsl:text>            }
       
  2619 </xsl:text>
       
  2620     <xsl:text>        }
       
  2621 </xsl:text>
       
  2622     <xsl:text>    }
       
  2623 </xsl:text>
       
  2624     <xsl:text>}
       
  2625 </xsl:text>
       
  2626   </xsl:template>
  2588   <xsl:template mode="widget_defs" match="widget[@type='Switch']">
  2627   <xsl:template mode="widget_defs" match="widget[@type='Switch']">
  2589     <xsl:param name="hmi_element"/>
  2628     <xsl:param name="hmi_element"/>
  2590     <xsl:text>    frequency: 5,
       
  2591 </xsl:text>
       
  2592     <xsl:text>    dispatch: function(value) {
       
  2593 </xsl:text>
       
  2594     <xsl:text>        for(let choice of this.choices){
       
  2595 </xsl:text>
       
  2596     <xsl:text>            if(value != choice.value){
       
  2597 </xsl:text>
       
  2598     <xsl:text>                choice.elt.setAttribute("style", "display:none");
       
  2599 </xsl:text>
       
  2600     <xsl:text>            } else {
       
  2601 </xsl:text>
       
  2602     <xsl:text>                choice.elt.setAttribute("style", choice.style);
       
  2603 </xsl:text>
       
  2604     <xsl:text>            }
       
  2605 </xsl:text>
       
  2606     <xsl:text>        }
       
  2607 </xsl:text>
       
  2608     <xsl:text>    },
       
  2609 </xsl:text>
       
  2610     <xsl:text>    init: function() {
       
  2611 </xsl:text>
       
  2612     <xsl:text>        // Hello Switch
       
  2613 </xsl:text>
       
  2614     <xsl:text>    },
       
  2615 </xsl:text>
       
  2616     <xsl:text>    choices: [
  2629     <xsl:text>    choices: [
  2617 </xsl:text>
  2630 </xsl:text>
  2618     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  2631     <xsl:variable name="regex" select="'^(&quot;[^&quot;].*&quot;|\-?[0-9]+|false|true)(#.*)?$'"/>
  2619     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,$regex)]">
  2632     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,$regex)]">
  2620       <xsl:variable name="literal" select="regexp:match(@inkscape:label,$regex)[2]"/>
  2633       <xsl:variable name="literal" select="regexp:match(@inkscape:label,$regex)[2]"/>
  3102 </xsl:text>
  3115 </xsl:text>
  3103           <xsl:text>        if(widgets.size &gt; 0) {
  3116           <xsl:text>        if(widgets.size &gt; 0) {
  3104 </xsl:text>
  3117 </xsl:text>
  3105           <xsl:text>            let maxfreq = 0;
  3118           <xsl:text>            let maxfreq = 0;
  3106 </xsl:text>
  3119 </xsl:text>
  3107           <xsl:text>            for(let widget of widgets)
  3120           <xsl:text>            for(let widget of widgets){
  3108 </xsl:text>
  3121 </xsl:text>
  3109           <xsl:text>                if(maxfreq &lt; widget.frequency)
  3122           <xsl:text>                let wf = widget.frequency;
  3110 </xsl:text>
  3123 </xsl:text>
  3111           <xsl:text>                    maxfreq = widget.frequency;
  3124           <xsl:text>                if(wf != undefined &amp;&amp; maxfreq &lt; wf)
       
  3125 </xsl:text>
       
  3126           <xsl:text>                    maxfreq = wf;
       
  3127 </xsl:text>
       
  3128           <xsl:text>            }
  3112 </xsl:text>
  3129 </xsl:text>
  3113           <xsl:text>
  3130           <xsl:text>
  3114 </xsl:text>
  3131 </xsl:text>
  3115           <xsl:text>            if(maxfreq != 0)
  3132           <xsl:text>            if(maxfreq != 0)
  3116 </xsl:text>
  3133 </xsl:text>