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 => this[prop]=members[prop]); |
883 <xsl:text> Object.keys(members).forEach(prop => 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 > 1){ |
1092 <xsl:text> if(jump_history.length > 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 => { |
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 => { |
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 => { |
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 => { |
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="'^("[^"].*"|\-?[0-9]+|false|true)(#.*)?$'"/> |
2631 <xsl:variable name="regex" select="'^("[^"].*"|\-?[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 > 0) { |
3116 <xsl:text> if(widgets.size > 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 < 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 && maxfreq < 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> |