262 <xsl:value-of select="local-name()"/> |
262 <xsl:value-of select="local-name()"/> |
263 <xsl:text>="</xsl:text> |
263 <xsl:text>="</xsl:text> |
264 <xsl:value-of select="."/> |
264 <xsl:value-of select="."/> |
265 <xsl:text>" </xsl:text> |
265 <xsl:text>" </xsl:text> |
266 </xsl:for-each> |
266 </xsl:for-each> |
267 <xsl:text> [</xsl:text> |
267 <xsl:text> |
268 <xsl:value-of select="text()"/> |
|
269 <xsl:text>] |
|
270 </xsl:text> |
268 </xsl:text> |
271 <xsl:apply-templates mode="testtree" select="*"> |
269 <xsl:apply-templates mode="testtree" select="*"> |
272 <xsl:with-param name="indent"> |
270 <xsl:with-param name="indent"> |
273 <xsl:value-of select="concat($indent,'>')"/> |
271 <xsl:value-of select="concat($indent,'>')"/> |
274 </xsl:with-param> |
272 </xsl:with-param> |
509 </xsl:template> |
511 </xsl:template> |
510 <xsl:variable name="forEach_widgets_ids" select="$parsed_widgets/widget[@type = 'ForEach']/@id"/> |
512 <xsl:variable name="forEach_widgets_ids" select="$parsed_widgets/widget[@type = 'ForEach']/@id"/> |
511 <xsl:variable name="forEach_widgets" select="$hmi_elements[@id = $forEach_widgets_ids]"/> |
513 <xsl:variable name="forEach_widgets" select="$hmi_elements[@id = $forEach_widgets_ids]"/> |
512 <xsl:variable name="in_forEach_widget_ids" select="func:refered_elements($forEach_widgets)[not(@id = $forEach_widgets_ids)]/@id"/> |
514 <xsl:variable name="in_forEach_widget_ids" select="func:refered_elements($forEach_widgets)[not(@id = $forEach_widgets_ids)]/@id"/> |
513 <xsl:template mode="page_desc" match="svg:*"> |
515 <xsl:template mode="page_desc" match="svg:*"> |
|
516 <xsl:if test="ancestor::*[@id = $hmi_pages/@id]"> |
|
517 <xsl:message terminate="yes"> |
|
518 <xsl:text>HMI:Page </xsl:text> |
|
519 <xsl:value-of select="@id"/> |
|
520 <xsl:text> is nested in another HMI:Page</xsl:text> |
|
521 </xsl:message> |
|
522 </xsl:if> |
514 <xsl:variable name="desc" select="func:widget(@id)"/> |
523 <xsl:variable name="desc" select="func:widget(@id)"/> |
515 <xsl:variable name="page" select="."/> |
524 <xsl:variable name="page" select="."/> |
516 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
525 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
517 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
526 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
518 <xsl:variable name="all_page_widgets" select="$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]"/> |
527 <xsl:variable name="all_page_widgets" select="$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]"/> |
4217 <xsl:text> } |
4226 <xsl:text> } |
4218 </xsl:text> |
4227 </xsl:text> |
4219 </xsl:template> |
4228 </xsl:template> |
4220 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
4229 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
4221 <xsl:param name="hmi_element"/> |
4230 <xsl:param name="hmi_element"/> |
4222 <xsl:variable name="key_pos_elt"> |
|
4223 <xsl:call-template name="defs_by_labels"> |
|
4224 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
|
4225 <xsl:with-param name="labels"> |
|
4226 <xsl:text>key_pos</xsl:text> |
|
4227 </xsl:with-param> |
|
4228 <xsl:with-param name="mandatory" select="'no'"/> |
|
4229 </xsl:call-template> |
|
4230 </xsl:variable> |
|
4231 <xsl:value-of select="$key_pos_elt"/> |
|
4232 <xsl:variable name="value_elt"> |
4231 <xsl:variable name="value_elt"> |
4233 <xsl:call-template name="defs_by_labels"> |
4232 <xsl:call-template name="defs_by_labels"> |
4234 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
4233 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
4235 <xsl:with-param name="labels"> |
4234 <xsl:with-param name="labels"> |
4236 <xsl:text>value</xsl:text> |
4235 <xsl:text>value</xsl:text> |
4278 </xsl:text> |
4277 </xsl:text> |
4279 </xsl:if> |
4278 </xsl:if> |
4280 <xsl:text> init: function() { |
4279 <xsl:text> init: function() { |
4281 </xsl:text> |
4280 </xsl:text> |
4282 <xsl:if test="$have_edit"> |
4281 <xsl:if test="$have_edit"> |
4283 <xsl:text> this.edit_elt.onclick = () => edit_value( |
4282 <xsl:text> this.edit_elt.onclick = () => edit_value("</xsl:text> |
4284 </xsl:text> |
|
4285 <xsl:text> "</xsl:text> |
|
4286 <xsl:value-of select="path/@value"/> |
4283 <xsl:value-of select="path/@value"/> |
4287 <xsl:text>", "</xsl:text> |
4284 <xsl:text>", "</xsl:text> |
4288 <xsl:value-of select="path/@type"/> |
4285 <xsl:value-of select="path/@type"/> |
4289 <xsl:text>", |
4286 <xsl:text>", this, this.last_val); |
4290 </xsl:text> |
|
4291 <xsl:text> this, this.last_val, |
|
4292 </xsl:text> |
|
4293 <xsl:choose> |
|
4294 <xsl:when test="string-length($key_pos_elt)>0"> |
|
4295 <xsl:text> this.key_pos_elt.getBBox() |
|
4296 </xsl:text> |
|
4297 </xsl:when> |
|
4298 <xsl:otherwise> |
|
4299 <xsl:text> undefined |
|
4300 </xsl:text> |
|
4301 </xsl:otherwise> |
|
4302 </xsl:choose> |
|
4303 <xsl:text> ); |
|
4304 </xsl:text> |
4287 </xsl:text> |
4305 </xsl:if> |
4288 </xsl:if> |
4306 <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]"> |
4289 <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-].+')]"> |
4307 <xsl:text> id("</xsl:text> |
4290 <xsl:text> id("</xsl:text> |
4308 <xsl:value-of select="@id"/> |
4291 <xsl:value-of select="@id"/> |
4981 </xsl:text> |
4964 </xsl:text> |
4982 </xsl:template> |
4965 </xsl:template> |
4983 <xsl:template mode="widget_class" match="widget[@type='Keypad']"> |
4966 <xsl:template mode="widget_class" match="widget[@type='Keypad']"> |
4984 <xsl:text>class KeypadWidget extends Widget{ |
4967 <xsl:text>class KeypadWidget extends Widget{ |
4985 </xsl:text> |
4968 </xsl:text> |
4986 <xsl:text> moving = undefined; |
|
4987 </xsl:text> |
|
4988 <xsl:text> click = undefined; |
|
4989 </xsl:text> |
|
4990 <xsl:text> offset = undefined; |
|
4991 </xsl:text> |
|
4992 <xsl:text> |
|
4993 </xsl:text> |
|
4994 <xsl:text> on_position_click(evt) { |
|
4995 </xsl:text> |
|
4996 <xsl:text> this.moving = true; |
|
4997 </xsl:text> |
|
4998 <xsl:text> |
|
4999 </xsl:text> |
|
5000 <xsl:text> // chatch window events |
|
5001 </xsl:text> |
|
5002 <xsl:text> window.addEventListener("touchmove", this.bound_on_drag, true); |
|
5003 </xsl:text> |
|
5004 <xsl:text> window.addEventListener("mousemove", this.bound_on_drag, true); |
|
5005 </xsl:text> |
|
5006 <xsl:text> |
|
5007 </xsl:text> |
|
5008 <xsl:text> window.addEventListener("mouseup", this.bound_on_release, true) |
|
5009 </xsl:text> |
|
5010 <xsl:text> window.addEventListener("touchend", this.bound_on_release, true); |
|
5011 </xsl:text> |
|
5012 <xsl:text> window.addEventListener("touchcancel", this.bound_on_release, true); |
|
5013 </xsl:text> |
|
5014 <xsl:text> |
|
5015 </xsl:text> |
|
5016 <xsl:text> // get click position offset from widget x,y and save it to variable |
|
5017 </xsl:text> |
|
5018 <xsl:text> var keypad_borders = this.position_elt.getBoundingClientRect(); |
|
5019 </xsl:text> |
|
5020 <xsl:text> var clickX = undefined; |
|
5021 </xsl:text> |
|
5022 <xsl:text> var clickY = undefined; |
|
5023 </xsl:text> |
|
5024 <xsl:text> if (evt.type == "touchstart"){ |
|
5025 </xsl:text> |
|
5026 <xsl:text> clickX = Math.ceil(evt.touches[0].clientX); |
|
5027 </xsl:text> |
|
5028 <xsl:text> clickY = Math.ceil(evt.touches[0].clientY); |
|
5029 </xsl:text> |
|
5030 <xsl:text> } |
|
5031 </xsl:text> |
|
5032 <xsl:text> else{ |
|
5033 </xsl:text> |
|
5034 <xsl:text> clickX = evt.pageX; |
|
5035 </xsl:text> |
|
5036 <xsl:text> clickY = evt.pageY; |
|
5037 </xsl:text> |
|
5038 <xsl:text> } |
|
5039 </xsl:text> |
|
5040 <xsl:text> this.offset=[clickX-keypad_borders.left,clickY-keypad_borders.top] |
|
5041 </xsl:text> |
|
5042 <xsl:text> } |
|
5043 </xsl:text> |
|
5044 <xsl:text> |
|
5045 </xsl:text> |
|
5046 <xsl:text> on_release(evt) { |
|
5047 </xsl:text> |
|
5048 <xsl:text> //relase binds |
|
5049 </xsl:text> |
|
5050 <xsl:text> window.removeEventListener("touchmove", this.bound_on_drag, true); |
|
5051 </xsl:text> |
|
5052 <xsl:text> window.removeEventListener("mousemove", this.bound_on_drag, true); |
|
5053 </xsl:text> |
|
5054 <xsl:text> |
|
5055 </xsl:text> |
|
5056 <xsl:text> window.removeEventListener("mouseup", this.bound_on_release, true) |
|
5057 </xsl:text> |
|
5058 <xsl:text> window.removeEventListener("touchend", this.bound_on_release, true); |
|
5059 </xsl:text> |
|
5060 <xsl:text> window.removeEventListener("touchcancel", this.bound_on_release, true); |
|
5061 </xsl:text> |
|
5062 <xsl:text> |
|
5063 </xsl:text> |
|
5064 <xsl:text> if(this.moving) |
|
5065 </xsl:text> |
|
5066 <xsl:text> this.moving = false; |
|
5067 </xsl:text> |
|
5068 <xsl:text> } |
|
5069 </xsl:text> |
|
5070 <xsl:text> |
|
5071 </xsl:text> |
|
5072 <xsl:text> on_drag(evt) { |
|
5073 </xsl:text> |
|
5074 <xsl:text> if(this.moving) |
|
5075 </xsl:text> |
|
5076 <xsl:text> //get mouse coordinates |
|
5077 </xsl:text> |
|
5078 <xsl:text> var clickX = undefined; |
|
5079 </xsl:text> |
|
5080 <xsl:text> var clickY = undefined; |
|
5081 </xsl:text> |
|
5082 <xsl:text> if (evt.type == "touchmove"){ |
|
5083 </xsl:text> |
|
5084 <xsl:text> clickX = Math.ceil(evt.touches[0].clientX); |
|
5085 </xsl:text> |
|
5086 <xsl:text> clickY = Math.ceil(evt.touches[0].clientY); |
|
5087 </xsl:text> |
|
5088 <xsl:text> } |
|
5089 </xsl:text> |
|
5090 <xsl:text> else{ |
|
5091 </xsl:text> |
|
5092 <xsl:text> clickX = evt.pageX; |
|
5093 </xsl:text> |
|
5094 <xsl:text> clickY = evt.pageY; |
|
5095 </xsl:text> |
|
5096 <xsl:text> } |
|
5097 </xsl:text> |
|
5098 <xsl:text> this.click = [clickX,clickY] |
|
5099 </xsl:text> |
|
5100 <xsl:text> |
|
5101 </xsl:text> |
|
5102 <xsl:text> //requeset redraw |
|
5103 </xsl:text> |
|
5104 <xsl:text> this.request_animate(); |
|
5105 </xsl:text> |
|
5106 <xsl:text> } |
|
5107 </xsl:text> |
|
5108 <xsl:text> |
|
5109 </xsl:text> |
|
5110 <xsl:text> animate(){ |
|
5111 </xsl:text> |
|
5112 <xsl:text> //get keyboard pos in html |
|
5113 </xsl:text> |
|
5114 <xsl:text> let [eltid, tmpgrp] = current_modal; |
|
5115 </xsl:text> |
|
5116 <xsl:text> let [xcoord,ycoord] = this.coordinates; |
|
5117 </xsl:text> |
|
5118 <xsl:text> let [clickX,clickY] = this.click; |
|
5119 </xsl:text> |
|
5120 <xsl:text> let [xdest,ydest,svgWidth,svgHeight] = page_desc[current_visible_page].bbox; |
|
5121 </xsl:text> |
|
5122 <xsl:text> |
|
5123 </xsl:text> |
|
5124 <xsl:text> //translate keyboard position |
|
5125 </xsl:text> |
|
5126 <xsl:text> let mouseX = ((clickX-this.offset[0])/window.innerWidth)*svgWidth; |
|
5127 </xsl:text> |
|
5128 <xsl:text> let mouseY = ((clickY-this.offset[1])/window.innerHeight)*svgHeight; |
|
5129 </xsl:text> |
|
5130 <xsl:text> tmpgrp.setAttribute("transform","translate("+String(xdest-xcoord+mouseX)+","+String(ydest-ycoord+mouseY)+")"); |
|
5131 </xsl:text> |
|
5132 <xsl:text> } |
|
5133 </xsl:text> |
|
5134 <xsl:text> |
4969 <xsl:text> |
5135 </xsl:text> |
4970 </xsl:text> |
5136 <xsl:text> on_key_click(symbols) { |
4971 <xsl:text> on_key_click(symbols) { |
5137 </xsl:text> |
4972 </xsl:text> |
5138 <xsl:text> var syms = symbols.split(" "); |
4973 <xsl:text> var syms = symbols.split(" "); |
5331 </xsl:with-param> |
5166 </xsl:with-param> |
5332 </xsl:call-template> |
5167 </xsl:call-template> |
5333 <xsl:call-template name="defs_by_labels"> |
5168 <xsl:call-template name="defs_by_labels"> |
5334 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
5169 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
5335 <xsl:with-param name="labels"> |
5170 <xsl:with-param name="labels"> |
5336 <xsl:text>Sign Space NumDot position</xsl:text> |
5171 <xsl:text>Sign Space NumDot</xsl:text> |
5337 </xsl:with-param> |
5172 </xsl:with-param> |
5338 <xsl:with-param name="mandatory" select="'no'"/> |
5173 <xsl:with-param name="mandatory" select="'no'"/> |
5339 </xsl:call-template> |
5174 </xsl:call-template> |
5340 <xsl:call-template name="defs_by_labels"> |
5175 <xsl:call-template name="defs_by_labels"> |
5341 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
5176 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
7388 </xsl:text> |
7209 </xsl:text> |
7389 <xsl:text> edit_callback = callback; |
7210 <xsl:text> edit_callback = callback; |
7390 </xsl:text> |
7211 </xsl:text> |
7391 <xsl:text> let widget = hmi_widgets[keypadid]; |
7212 <xsl:text> let widget = hmi_widgets[keypadid]; |
7392 </xsl:text> |
7213 </xsl:text> |
7393 <xsl:text> widget.start_edit(path, valuetype, callback, initial, size); |
7214 <xsl:text> widget.start_edit(path, valuetype, callback, initial); |
7394 </xsl:text> |
7215 </xsl:text> |
7395 <xsl:text>}; |
7216 <xsl:text>}; |
7396 </xsl:text> |
7217 </xsl:text> |
7397 <xsl:text> |
7218 <xsl:text> |
7398 </xsl:text> |
7219 </xsl:text> |
7399 <xsl:text>var current_modal; /* TODO stack ?*/ |
7220 <xsl:text>var current_modal; /* TODO stack ?*/ |
7400 </xsl:text> |
7221 </xsl:text> |
7401 <xsl:text> |
7222 <xsl:text> |
7402 </xsl:text> |
7223 </xsl:text> |
7403 <xsl:text>function show_modal(size) { |
7224 <xsl:text>function show_modal() { |
7404 </xsl:text> |
7225 </xsl:text> |
7405 <xsl:text> let [element, parent] = detachable_elements[this.element.id]; |
7226 <xsl:text> let [element, parent] = detachable_elements[this.element.id]; |
7406 </xsl:text> |
7227 </xsl:text> |
7407 <xsl:text> |
7228 <xsl:text> |
7408 </xsl:text> |
7229 </xsl:text> |