197 <xsl:value-of select="$parentpath"/> |
197 <xsl:value-of select="$parentpath"/> |
198 </xsl:with-param> |
198 </xsl:with-param> |
199 </xsl:apply-templates> |
199 </xsl:apply-templates> |
200 </xsl:template> |
200 </xsl:template> |
201 <func:function name="func:is_descendant_path"> |
201 <func:function name="func:is_descendant_path"> |
|
202 <xsl:param name="descend"/> |
202 <xsl:param name="ancest"/> |
203 <xsl:param name="ancest"/> |
203 <xsl:param name="descend"/> |
204 <func:result select="string-length($ancest) > 0 and starts-with($descend,$ancest)"/> |
204 <func:result select="starts-with($descend,$ancest)"/> |
|
205 </func:function> |
205 </func:function> |
206 <xsl:template mode="inline_svg" match="@* | node()"> |
206 <xsl:template mode="inline_svg" match="@* | node()"> |
207 <xsl:if test="not(@id = $discardable_elements/@id)"> |
207 <xsl:if test="not(@id = $discardable_elements/@id)"> |
208 <xsl:copy> |
208 <xsl:copy> |
209 <xsl:apply-templates mode="inline_svg" select="@* | node()"/> |
209 <xsl:apply-templates mode="inline_svg" select="@* | node()"/> |
562 <xsl:variable name="desc" select="func:parselabel(@inkscape:label)/widget"/> |
562 <xsl:variable name="desc" select="func:parselabel(@inkscape:label)/widget"/> |
563 <xsl:variable name="page" select="."/> |
563 <xsl:variable name="page" select="."/> |
564 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
564 <xsl:variable name="p" select="$geometry[@Id = $page/@id]"/> |
565 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
565 <xsl:variable name="page_all_elements" select="func:all_related_elements($page)"/> |
566 <xsl:variable name="all_page_widgets" select="$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]"/> |
566 <xsl:variable name="all_page_widgets" select="$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]"/> |
567 <xsl:variable name="page_relative_widgets" select="$all_page_widgets[func:is_descendant_path($desc/path/@value, path/@value)]"/> |
567 <xsl:variable name="page_relative_widgets" select="$all_page_widgets[func:is_descendant_path(func:parselabel(@inkscape:label)/widget/path/@value, $desc/path/@value)]"/> |
568 <xsl:variable name="required_detachables" select="func:sumarized_elements($page_all_elements)/ ancestor-or-self::*[@id = $detachable_elements/@id]"/> |
568 <xsl:variable name="required_detachables" select="func:sumarized_elements($page_all_elements)/ ancestor-or-self::*[@id = $detachable_elements/@id]"/> |
569 <xsl:text> "</xsl:text> |
569 <xsl:text> "</xsl:text> |
570 <xsl:value-of select="$desc/arg[1]/@value"/> |
570 <xsl:value-of select="$desc/arg[1]/@value"/> |
571 <xsl:text>": { |
571 <xsl:text>": { |
572 </xsl:text> |
572 </xsl:text> |
674 </xsl:text> |
674 </xsl:text> |
675 <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) { |
675 <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) { |
676 </xsl:text> |
676 </xsl:text> |
677 <xsl:text> try { |
677 <xsl:text> try { |
678 </xsl:text> |
678 </xsl:text> |
679 <xsl:text> let idxidx = widget.indexes.indexOf(index); |
679 <xsl:text> let idx = widget.offset ? index - widget.offset : index; |
|
680 </xsl:text> |
|
681 <xsl:text> let idxidx = widget.indexes.indexOf(idx); |
680 </xsl:text> |
682 </xsl:text> |
681 <xsl:text> let d = widget.dispatch; |
683 <xsl:text> let d = widget.dispatch; |
682 </xsl:text> |
684 </xsl:text> |
|
685 <xsl:text> console.log(index, idx, idxidx, value); |
|
686 </xsl:text> |
683 <xsl:text> if(typeof(d) == "function" && idxidx == 0){ |
687 <xsl:text> if(typeof(d) == "function" && idxidx == 0){ |
684 </xsl:text> |
688 </xsl:text> |
685 <xsl:text> d.call(widget, value, oldval); |
689 <xsl:text> d.call(widget, value, oldval); |
686 </xsl:text> |
690 </xsl:text> |
687 <xsl:text> }else if(typeof(d) == "object" && d.length >= idxidx){ |
691 <xsl:text> } |
|
692 </xsl:text> |
|
693 <xsl:text> /* TODO deal with multiple paths |
|
694 </xsl:text> |
|
695 <xsl:text> and dispatch according to index+page_offset */ |
|
696 </xsl:text> |
|
697 <xsl:text> /*else if(typeof(d) == "object" && d.length >= idxidx){ |
688 </xsl:text> |
698 </xsl:text> |
689 <xsl:text> d[idxidx].call(widget, value, oldval); |
699 <xsl:text> d[idxidx].call(widget, value, oldval); |
690 </xsl:text> |
700 </xsl:text> |
691 <xsl:text> }/* else dispatch_0, ..., dispatch_n ? */ |
701 <xsl:text> }*/ |
|
702 </xsl:text> |
|
703 <xsl:text> /* else dispatch_0, ..., dispatch_n ? */ |
692 </xsl:text> |
704 </xsl:text> |
693 <xsl:text> /*else { |
705 <xsl:text> /*else { |
694 </xsl:text> |
706 </xsl:text> |
695 <xsl:text> throw new Error("Dunno how to dispatch to widget at index = " + index); |
707 <xsl:text> throw new Error("Dunno how to dispatch to widget at index = " + index); |
696 </xsl:text> |
708 </xsl:text> |
1232 </xsl:text> |
1244 </xsl:text> |
1233 <xsl:text> } |
1245 <xsl:text> } |
1234 </xsl:text> |
1246 </xsl:text> |
1235 <xsl:text> |
1247 <xsl:text> |
1236 </xsl:text> |
1248 </xsl:text> |
|
1249 <xsl:text> if(page_index == undefined){ |
|
1250 </xsl:text> |
|
1251 <xsl:text> page_index = new_desc.page_index; |
|
1252 </xsl:text> |
|
1253 <xsl:text> } |
|
1254 </xsl:text> |
|
1255 <xsl:text> |
|
1256 </xsl:text> |
1237 <xsl:text> if(old_desc){ |
1257 <xsl:text> if(old_desc){ |
1238 </xsl:text> |
1258 </xsl:text> |
1239 <xsl:text> for(let widget of chain(old_desc.absolute_widgets,old_desc.relative_widgets)){ |
1259 <xsl:text> for(let widget of old_desc.absolute_widgets){ |
1240 </xsl:text> |
1260 </xsl:text> |
1241 <xsl:text> /* remove subsribers */ |
1261 <xsl:text> /* remove subsribers */ |
1242 </xsl:text> |
1262 </xsl:text> |
1243 <xsl:text> for(let index of widget.indexes){ |
1263 <xsl:text> for(let index of widget.indexes){ |
1244 </xsl:text> |
1264 </xsl:text> |
1246 </xsl:text> |
1266 </xsl:text> |
1247 <xsl:text> } |
1267 <xsl:text> } |
1248 </xsl:text> |
1268 </xsl:text> |
1249 <xsl:text> } |
1269 <xsl:text> } |
1250 </xsl:text> |
1270 </xsl:text> |
1251 <xsl:text> } |
1271 <xsl:text> for(let widget of old_desc.relative_widgets){ |
1252 </xsl:text> |
1272 </xsl:text> |
1253 <xsl:text> for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){ |
1273 <xsl:text> /* remove subsribers */ |
|
1274 </xsl:text> |
|
1275 <xsl:text> for(let index of widget.indexes){ |
|
1276 </xsl:text> |
|
1277 <xsl:text> let idx = widget.offset ? index + widget.offset : index; |
|
1278 </xsl:text> |
|
1279 <xsl:text> subscribers[idx].delete(widget); |
|
1280 </xsl:text> |
|
1281 <xsl:text> } |
|
1282 </xsl:text> |
|
1283 <xsl:text> /* lose the offset */ |
|
1284 </xsl:text> |
|
1285 <xsl:text> delete widget.offset; |
|
1286 </xsl:text> |
|
1287 <xsl:text> } |
|
1288 </xsl:text> |
|
1289 <xsl:text> } |
|
1290 </xsl:text> |
|
1291 <xsl:text> for(let widget of new_desc.absolute_widgets){ |
1254 </xsl:text> |
1292 </xsl:text> |
1255 <xsl:text> /* add widget's subsribers */ |
1293 <xsl:text> /* add widget's subsribers */ |
1256 </xsl:text> |
1294 </xsl:text> |
1257 <xsl:text> for(let index of widget.indexes){ |
1295 <xsl:text> for(let index of widget.indexes){ |
1258 </xsl:text> |
1296 </xsl:text> |
1259 <xsl:text> subscribers[index].add(widget); |
1297 <xsl:text> subscribers[index].add(widget); |
|
1298 </xsl:text> |
|
1299 <xsl:text> } |
|
1300 </xsl:text> |
|
1301 <xsl:text> } |
|
1302 </xsl:text> |
|
1303 <xsl:text> var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index; |
|
1304 </xsl:text> |
|
1305 <xsl:text> for(let widget of new_desc.relative_widgets){ |
|
1306 </xsl:text> |
|
1307 <xsl:text> /* set the offset because relative */ |
|
1308 </xsl:text> |
|
1309 <xsl:text> widget.offset = new_offset; |
|
1310 </xsl:text> |
|
1311 <xsl:text> /* add widget's subsribers */ |
|
1312 </xsl:text> |
|
1313 <xsl:text> for(let index of widget.indexes){ |
|
1314 </xsl:text> |
|
1315 <xsl:text> subscribers[index + new_offset].add(widget); |
1260 </xsl:text> |
1316 </xsl:text> |
1261 <xsl:text> } |
1317 <xsl:text> } |
1262 </xsl:text> |
1318 </xsl:text> |
1263 <xsl:text> } |
1319 <xsl:text> } |
1264 </xsl:text> |
1320 </xsl:text> |