--- a/svghmi/gen_index_xhtml.xslt Wed May 13 18:47:09 2020 +0200
+++ b/svghmi/gen_index_xhtml.xslt Wed May 13 18:50:07 2020 +0200
@@ -868,6 +868,8 @@
<xsl:text> constructor(elt_id,args,indexes,members){
+ <xsl:text> this.element_id = elt_id; <xsl:text> this.element = id(elt_id);
<xsl:text> this.args = args;
@@ -880,6 +882,8 @@
<xsl:text> /* remove subsribers */
@@ -1078,9 +1082,10 @@
- <xsl:template mode="widget_defs" match="widget[@type='Back']">
- <xsl:param name="hmi_element"/>
- <xsl:text> on_click: function(evt) {
+ <xsl:template mode="widget_class" match="widget[@type='Back']"> + <xsl:text>class BackWidget extends Widget{ + <xsl:text> on_click(evt) { <xsl:text> if(jump_history.length > 1){
@@ -1092,44 +1097,47 @@
- <xsl:text> init: function() {
- <xsl:text> this.element.setAttribute("onclick", "hmi_widgets['</xsl:text>
- <xsl:value-of select="$hmi_element/@id"/>
- <xsl:text>'].on_click(evt)");
+ <xsl:text> this.element.setAttribute("onclick", "hmi_widgets['"+this.element_id+"'].on_click(evt)"); - <xsl:template mode="widget_defs" match="widget[@type='Button']">
- <xsl:param name="hmi_element"/>
- <xsl:text>frequency: 5,
- <xsl:text>init: function() {
- <xsl:text> this.element.addEventListener(
- <xsl:text> "mousedown",
- <xsl:text> change_hmi_value(this.indexes[0], "=1");
- <xsl:text> this.element.addEventListener(
- <xsl:text> change_hmi_value(this.indexes[0], "=0");
+ <xsl:template mode="widget_class" match="widget[@type='Button']"> + <xsl:text>class ButtonWidget extends Widget{ + <xsl:text> frequency = 5; + <xsl:text> this.element.addEventListener( + <xsl:text> "mousedown", + <xsl:text> change_hmi_value(this.indexes[0], "=1"); + <xsl:text> this.element.addEventListener( + <xsl:text> change_hmi_value(this.indexes[0], "=0"); <xsl:template mode="widget_defs" match="widget[@type='CircularBar']">
@@ -1767,7 +1775,6 @@
<xsl:template mode="widget_defs" match="widget[@type='ForEach']">
<xsl:param name="hmi_element"/>
- <xsl:variable name="widgets" select="func:refered_elements($forEach_widgets)[not(@id = $forEach_widgets_ids)]"/>
<xsl:variable name="class" select="arg[1]/@value"/>
<xsl:variable name="base_path" select="path/@value"/>
<xsl:variable name="hmi_index_base" select="$indexed_hmitree/*[@hmipath = $base_path]"/>
@@ -3104,11 +3111,15 @@
<xsl:text> let maxfreq = 0;
- <xsl:text> for(let widget of widgets)
- <xsl:text> if(maxfreq < widget.frequency)
- <xsl:text> maxfreq = widget.frequency;
+ <xsl:text> for(let widget of widgets){ + <xsl:text> let wf = widget.frequency; + <xsl:text> if(wf != undefined && maxfreq < wf) + <xsl:text> maxfreq = wf; --- a/svghmi/widget_button.ysl2 Wed May 13 18:47:09 2020 +0200
+++ b/svghmi/widget_button.ysl2 Wed May 13 18:50:07 2020 +0200
@@ -1,18 +1,20 @@
-template "widget[@type='Button']", mode="widget_defs" {
- | this.element.addEventListener(
- | change_hmi_value(this.indexes[0], "=1");
- | this.element.addEventListener(
- | change_hmi_value(this.indexes[0], "=0");
\ No newline at end of file
+template "widget[@type='Button']", mode="widget_class" + class ButtonWidget extends Widget{ + this.element.addEventListener( + change_hmi_value(this.indexes[0], "=1"); + this.element.addEventListener( + change_hmi_value(this.indexes[0], "=0"); --- a/tests/svghmi/svghmi_0@svghmi/svghmi.svg Wed May 13 18:47:09 2020 +0200
+++ b/tests/svghmi/svghmi_0@svghmi/svghmi.svg Wed May 13 18:50:07 2020 +0200
@@ -16,7 +16,7 @@
sodipodi:docname="svghmi.svg"
- inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"> @@ -127,13 +127,13 @@
inkscape:current-layer="hmi0"
- inkscape:zoom="0.35355339"
- inkscape:cx="-418.67433"
- inkscape:cy="-1206.7258"
+ inkscape:zoom="0.70710678" + inkscape:cx="263.37056" + inkscape:cy="-24.461312" inkscape:window-width="1920"
- inkscape:window-height="1080"
+ inkscape:window-height="1348" - inkscape:window-y="968"
+ inkscape:window-y="700" inkscape:window-maximized="0"
inkscape:guide-bbox="true" />
@@ -912,29 +912,29 @@
style="font-style:normal;font-weight:normal;font-size:80px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
inkscape:label="HMI:Display@/PUMP0/STROUT"><tspan
style="fill:#ffffff;fill-opacity:1;stroke-width:0.5px">8888</tspan></text>
inkscape:label="HMI:Display@/PUMP0/BOOLOUT"
style="font-style:normal;font-weight:normal;font-size:80px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.5px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
xml:space="preserve"><tspan
style="fill:#ffffff;fill-opacity:1;stroke-width:0.5px"
sodipodi:role="line">8888</tspan></text>
- transform="matrix(0.5,0,0,0.5,90.110264,225.71623)"
+ transform="matrix(0.5,0,0,0.5,-9.889736,205.71623)" inkscape:label="HMI:Input@/PUMP0/STRIN"
@@ -1124,196 +1124,6 @@
- transform="matrix(0.5,0,0,0.5,126.87458,546.40152)"
- inkscape:label="HMI:Input@/PUMP0/STRIN"
- style="stroke-width:2">
- style="font-style:normal;font-weight:normal;font-size:160px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="stroke-width:2px"
- sodipodi:role="line">8888</tspan></text>
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ff00ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- inkscape:label="edit" />
- transform="translate(-416.52022,170.47452)"
- inkscape:label="+"dhu""
- style="stroke-width:2">
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- inkscape:transform-center-y="-14.956361"
- d="m 797.19546,145.18619 -80.62929,0.60214 -0.60215,-80.629288 80.6293,-0.60214 z"
- inkscape:connector-curvature="0" />
- style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- style="stroke-width:1px">dhu</tspan></text>
- transform="translate(-416.52022,170.47452)"
- inkscape:label="="plop""
- style="stroke-width:2">
- transform="matrix(0,-2.0000001,1.9999999,0,1034.195,1298.6541)"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- sodipodi:cx="596.74072"
- sodipodi:cy="-184.98808"
- sodipodi:r1="29.912722"
- sodipodi:r2="14.956361"
- sodipodi:arg1="0.52359878"
- sodipodi:arg2="1.5707963"
- inkscape:flatsided="true"
- inkscape:randomized="0"
- d="m 622.6459,-170.03172 -51.81035,0 25.90517,-44.86908 z"
- inkscape:transform-center-y="-3.6154501e-05"
- inkscape:transform-center-x="14.956371" />
- style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="stroke-width:1px"
- sodipodi:role="line">plop</tspan></text>
- transform="translate(-416.52022,170.47452)"
- inkscape:label="="mhoo""
- style="stroke-width:2">
- inkscape:transform-center-y="-5.9989963e-06"
- d="m 648.55108,-186.34718 -103.62071,0 51.81035,-89.73817 z"
- inkscape:randomized="0"
- inkscape:flatsided="true"
- sodipodi:arg2="1.5707963"
- sodipodi:arg1="0.52359878"
- sodipodi:r2="29.912722"
- sodipodi:r1="59.825443"
- sodipodi:cy="-216.2599"
- sodipodi:cx="596.74072"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- transform="rotate(-90,746.45698,-44.543641)"
- inkscape:transform-center-x="14.956364" />
- style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- style="stroke-width:1px">mhoo</tspan></text>
- transform="translate(-416.52022,170.47452)"
- inkscape:label="="yodl""
- style="stroke-width:2">
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- sodipodi:cx="596.74072"
- sodipodi:cy="105.17262"
- sodipodi:r1="59.825443"
- sodipodi:r2="29.912722"
- sodipodi:arg1="0.52359878"
- sodipodi:arg2="1.5707963"
- inkscape:flatsided="true"
- inkscape:randomized="0"
- d="m 648.55108,135.08534 -103.62071,0 51.81035,-89.738161 z"
- inkscape:transform-center-y="-5.5023185e-06"
- transform="matrix(0,-1,-1,0,1043.9134,701.91334)"
- inkscape:transform-center-x="-14.956365" />
- style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- style="stroke-width:1px">yodl</tspan></text>
- transform="translate(-416.52022,170.47452)"
- inkscape:label="="mhe""
- style="stroke-width:2">
- inkscape:transform-center-y="-3.3040441e-05"
- d="m 622.6459,151.4008 -51.81035,0 25.90517,-44.86908 z"
- inkscape:randomized="0"
- inkscape:flatsided="true"
- sodipodi:arg2="1.5707963"
- sodipodi:arg1="0.52359878"
- sodipodi:r2="14.956361"
- sodipodi:r1="29.912722"
- sodipodi:cy="136.44444"
- sodipodi:cx="596.74072"
- style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
- transform="matrix(0,-2.0000001,-1.9999999,0,1122.1514,1298.6541)"
- inkscape:transform-center-x="-14.956349" />
- style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
- xml:space="preserve"><tspan
- style="stroke-width:1px"
- sodipodi:role="line">mhe</tspan></text>
inkscape:label="HMI:Keypad:HMI_INT:HMI_REAL"
style="fill-rule:evenodd;stroke-width:0.47631353"
@@ -2692,4 +2502,38 @@
inkscape:transform-center-x="1.0089177e-06" />
+ transform="translate(-867.71696,-14.163562)" + inkscape:label="HMI:Button@/SELECTION"> + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#ff6600;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + inkscape:label="button" /> + inkscape:label="setting_jmp" + style="font-style:normal;font-weight:normal;font-size:40px;line-height:125%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;display:inline;fill:#ff6600;fill-opacity:1;stroke:none;stroke-width:0.99999994px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + xml:space="preserve"><tspan + style="text-align:center;text-anchor:middle;fill:#ff6600;stroke-width:0.99999994px" + sodipodi:role="line">up</tspan></text>