svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 3118 e704b0487515
parent 3116 6da94ec04325
child 3124 f263359d8108
equal deleted inserted replaced
3117:f058542d0caa 3118:e704b0487515
   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,'&gt;')"/>
   271         <xsl:value-of select="concat($indent,'&gt;')"/>
   274       </xsl:with-param>
   272       </xsl:with-param>
   385         <xsl:choose>
   383         <xsl:choose>
   386           <xsl:when test="$hmi_pages_descs/arg[1]/@value = 'Home'">
   384           <xsl:when test="$hmi_pages_descs/arg[1]/@value = 'Home'">
   387             <xsl:text>Home</xsl:text>
   385             <xsl:text>Home</xsl:text>
   388           </xsl:when>
   386           </xsl:when>
   389           <xsl:otherwise>
   387           <xsl:otherwise>
   390             <xsl:message terminate="yes">No Home page defined!</xsl:message>
   388             <xsl:message terminate="yes">
       
   389               <xsl:text>No Home page defined!</xsl:text>
       
   390             </xsl:message>
   391           </xsl:otherwise>
   391           </xsl:otherwise>
   392         </xsl:choose>
   392         </xsl:choose>
   393       </xsl:when>
   393       </xsl:when>
   394       <xsl:when test="count($hmi_pages) = 0">
   394       <xsl:when test="count($hmi_pages) = 0">
   395         <xsl:message terminate="yes">No page defined!</xsl:message>
   395         <xsl:message terminate="yes">
       
   396           <xsl:text>No page defined!</xsl:text>
       
   397         </xsl:message>
   396       </xsl:when>
   398       </xsl:when>
   397       <xsl:otherwise>
   399       <xsl:otherwise>
   398         <xsl:value-of select="func:widget($hmi_pages/@id)/arg[1]/@value"/>
   400         <xsl:value-of select="func:widget($hmi_pages/@id)/arg[1]/@value"/>
   399       </xsl:otherwise>
   401       </xsl:otherwise>
   400     </xsl:choose>
   402     </xsl:choose>
   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]"/>
  1547 </xsl:text>
  1556 </xsl:text>
  1548     <xsl:text>}
  1557     <xsl:text>}
  1549 </xsl:text>
  1558 </xsl:text>
  1550   </xsl:template>
  1559   </xsl:template>
  1551   <xsl:variable name="excluded_types" select="str:split('Page Lang VarInit')"/>
  1560   <xsl:variable name="excluded_types" select="str:split('Page Lang VarInit')"/>
  1552   <xsl:variable name="included_ids" select="$parsed_widgets/widget[not(@type = $excluded_types)]/@id"/>
  1561   <xsl:variable name="included_ids" select="$parsed_widgets/widget[not(@type = $excluded_types) and not(@id = $discardable_elements/@id)]/@id"/>
  1553   <declarations:hmi-elements/>
  1562   <declarations:hmi-elements/>
  1554   <xsl:template match="declarations:hmi-elements">
  1563   <xsl:template match="declarations:hmi-elements">
  1555     <xsl:text>
  1564     <xsl:text>
  1556 </xsl:text>
  1565 </xsl:text>
  1557     <xsl:text>/* </xsl:text>
  1566     <xsl:text>/* </xsl:text>
  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 = () =&gt; edit_value(
  4282       <xsl:text>        this.edit_elt.onclick = () =&gt; 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)&gt;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"/>
  5369       <xsl:text>'].on_</xsl:text>
  5204       <xsl:text>'].on_</xsl:text>
  5370       <xsl:value-of select="."/>
  5205       <xsl:value-of select="."/>
  5371       <xsl:text>_click()");
  5206       <xsl:text>_click()");
  5372 </xsl:text>
  5207 </xsl:text>
  5373     </xsl:for-each>
  5208     </xsl:for-each>
  5374     <xsl:text>        if(this.position_elt){
       
  5375 </xsl:text>
       
  5376     <xsl:text>           this.bound_on_release = this.on_release.bind(this);
       
  5377 </xsl:text>
       
  5378     <xsl:text>           this.bound_on_drag = this.on_drag.bind(this);
       
  5379 </xsl:text>
       
  5380     <xsl:text>
       
  5381 </xsl:text>
       
  5382     <xsl:text>           this.position_elt.setAttribute("onmousedown", "hmi_widgets['"+this.element_id+"'].on_position_click(evt)");
       
  5383 </xsl:text>
       
  5384     <xsl:text>           this.position_elt.setAttribute("ontouchstart", "hmi_widgets['"+this.element_id+"'].on_position_click(evt)");
       
  5385 </xsl:text>
       
  5386     <xsl:text>       }
       
  5387 </xsl:text>
       
  5388     <xsl:text>    },
  5209     <xsl:text>    },
  5389 </xsl:text>
  5210 </xsl:text>
  5390     <xsl:text>
  5211     <xsl:text>
  5391 </xsl:text>
  5212 </xsl:text>
  5392     <xsl:variable name="g" select="$geometry[@Id = $hmi_element/@id]"/>
  5213     <xsl:variable name="g" select="$geometry[@Id = $hmi_element/@id]"/>
  7374 </xsl:text>
  7195 </xsl:text>
  7375           <xsl:text>var edit_callback;
  7196           <xsl:text>var edit_callback;
  7376 </xsl:text>
  7197 </xsl:text>
  7377           <xsl:text>const localtypes = {"PAGE_LOCAL":null, "HMI_LOCAL":null}
  7198           <xsl:text>const localtypes = {"PAGE_LOCAL":null, "HMI_LOCAL":null}
  7378 </xsl:text>
  7199 </xsl:text>
  7379           <xsl:text>function edit_value(path, valuetype, callback, initial, size) {
  7200           <xsl:text>function edit_value(path, valuetype, callback, initial) {
  7380 </xsl:text>
  7201 </xsl:text>
  7381           <xsl:text>    if(valuetype in localtypes){
  7202           <xsl:text>    if(valuetype in localtypes){
  7382 </xsl:text>
  7203 </xsl:text>
  7383           <xsl:text>        valuetype = (typeof initial) == "number" ? "HMI_REAL" : "HMI_STRING";
  7204           <xsl:text>        valuetype = (typeof initial) == "number" ? "HMI_REAL" : "HMI_STRING";
  7384 </xsl:text>
  7205 </xsl:text>
  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>
  7412 </xsl:text>
  7233 </xsl:text>
  7413           <xsl:text>    let [xcoord,ycoord] = this.coordinates;
  7234           <xsl:text>    let [xcoord,ycoord] = this.coordinates;
  7414 </xsl:text>
  7235 </xsl:text>
  7415           <xsl:text>    let [xdest,ydest] = page_desc[current_visible_page].bbox;
  7236           <xsl:text>    let [xdest,ydest] = page_desc[current_visible_page].bbox;
  7416 </xsl:text>
  7237 </xsl:text>
  7417           <xsl:text>    if (typeof size === 'undefined'){
  7238           <xsl:text>    tmpgrpattr.value = "translate("+String(xdest-xcoord)+","+String(ydest-ycoord)+")";
  7418 </xsl:text>
       
  7419           <xsl:text>        tmpgrpattr.value = "translate("+String(xdest-xcoord)+","+String(ydest-ycoord)+")";
       
  7420 </xsl:text>
       
  7421           <xsl:text>    }
       
  7422 </xsl:text>
       
  7423           <xsl:text>    else{
       
  7424 </xsl:text>
       
  7425           <xsl:text>        tmpgrpattr.value = "translate("+String(xdest-xcoord+size.x)+","+String(ydest-ycoord+size.y)+")";
       
  7426 </xsl:text>
       
  7427           <xsl:text>    }
       
  7428 </xsl:text>
  7239 </xsl:text>
  7429           <xsl:text>
  7240           <xsl:text>
  7430 </xsl:text>
  7241 </xsl:text>
  7431           <xsl:text>    tmpgrp.setAttributeNode(tmpgrpattr);
  7242           <xsl:text>    tmpgrp.setAttributeNode(tmpgrpattr);
  7432 </xsl:text>
  7243 </xsl:text>