--- a/svghmi/gen_index_xhtml.xslt Mon Mar 02 16:25:35 2020 +0100
+++ b/svghmi/gen_index_xhtml.xslt Mon Mar 02 16:30:29 2020 +0100
@@ -336,18 +336,18 @@
<xsl:for-each select="$hmi_elements">
<xsl:variable name="widget" select="func:parselabel(@inkscape:label)/widget"/>
+ <xsl:text> "</xsl:text> <xsl:value-of select="@id"/>
- <xsl:text> type: "</xsl:text>
+ <xsl:text> type: "</xsl:text> <xsl:value-of select="$widget/@type"/>
<xsl:for-each select="$widget/arg">
- <xsl:text> "</xsl:text>
+ <xsl:text> "</xsl:text> <xsl:value-of select="@value"/>
<xsl:if test="position()!=last()">
@@ -356,9 +356,9 @@
<xsl:for-each select="$widget/path">
<xsl:variable name="hmipath" select="@value"/>
@@ -372,7 +372,7 @@
<xsl:value-of select="$hmitree_match/@index"/>
<xsl:if test="position()!=last()">
@@ -382,16 +382,16 @@
- <xsl:text> element: id("</xsl:text>
+ <xsl:text> element: id("</xsl:text> <xsl:value-of select="@id"/>
<xsl:apply-templates mode="widget_defs" select="$widget">
<xsl:with-param name="hmi_element" select="."/>
+ <xsl:text> }</xsl:text> <xsl:if test="position()!=last()">
@@ -411,7 +411,7 @@
<xsl:text>var hmitree_types = [
<xsl:for-each select="$indexed_hmitree/*">
- <xsl:text>/* </xsl:text>
+ <xsl:text> /* </xsl:text> <xsl:value-of select="@index"/>
<xsl:value-of select="@hmipath"/>
@@ -433,11 +433,11 @@
<xsl:for-each select="$detachable_elements">
<xsl:value-of select="@id"/>
- <xsl:text>" : {element: id("</xsl:text>
+ <xsl:text>":[id("</xsl:text> <xsl:value-of select="@id"/>
- <xsl:text>"), parent:id("</xsl:text>
+ <xsl:text>"), id("</xsl:text> <xsl:value-of select="../@id"/>
- <xsl:text>")}</xsl:text>
+ <xsl:text>")]</xsl:text> <xsl:if test="position()!=last()">
@@ -964,26 +964,14 @@
<xsl:text>function prepare_svg() {
- <xsl:text> /* set everybody hidden initially for better performance */
- <xsl:text> for(let widget in hmi_widgets){
+ <xsl:text> for(let eltid in detachable_elements){ - <xsl:text> if(widget.element != undefined)
+ <xsl:text> let [element,parent] = detachable_elements[eltid]; - <xsl:text> widget.element.style.display = "none";
+ <xsl:text> parent.removeChild(element); - <xsl:text> /*for(let name in page_desc){
- <xsl:text> if(name != new_desc){
- <xsl:text> page_desc[name].widget.element.style.display = "none";
@@ -1010,16 +998,6 @@
<xsl:text> for(let widget of old_desc.widgets){
- <xsl:text> /* hide widget */
- <xsl:text> if(widget.element != undefined)
- <xsl:text> widget.element.style.display = "none";
<xsl:text> /* remove subsribers */
<xsl:text> for(let index of widget.indexes){
@@ -1030,7 +1008,39 @@
- <xsl:text> old_desc.widget.element.style.display = "none";
+ <xsl:text> for(let eltid in old_desc.required_detachables){ + <xsl:text> if(!(eltid in new_desc.required_detachables)){ + <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; + <xsl:text> parent.removeChild(element); + <xsl:text> for(let eltid in new_desc.required_detachables){ + <xsl:text> if(!(eltid in old_desc.required_detachables)){ + <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; + <xsl:text> parent.appendChild(element); + <xsl:text> for(let eltid in new_desc.required_detachables){ + <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; + <xsl:text> parent.appendChild(element); @@ -1038,16 +1048,6 @@
<xsl:text> for(let widget of new_desc.widgets){
- <xsl:text> /* unhide widget */
- <xsl:text> if(widget.element != undefined)
- <xsl:text> widget.element.style.display = "inline";
<xsl:text> /* add widget's subsribers */
<xsl:text> for(let index of widget.indexes){
@@ -1068,10 +1068,6 @@
- <xsl:text> new_desc.widget.element.style.display = "inline";
<xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
<xsl:text> current_page = page_name;
--- a/svghmi/gen_index_xhtml.ysl2 Mon Mar 02 16:25:35 2020 +0100
+++ b/svghmi/gen_index_xhtml.ysl2 Mon Mar 02 16:30:29 2020 +0100
@@ -523,7 +523,7 @@
| var detachable_elements = {
foreach "$detachable_elements"{
- | "«@id»" : {element: id("«@id»"), parent:id("«../@id»")}`if "position()!=last()" > ,`
+ | "«@id»":[id("«@id»"), id("«../@id»")]`if "position()!=last()" > ,` --- a/svghmi/svghmi.js Mon Mar 02 16:25:35 2020 +0100
+++ b/svghmi/svghmi.js Mon Mar 02 16:30:29 2020 +0100
@@ -218,16 +218,10 @@
- /* set everybody hidden initially for better performance */
- for(let widget in hmi_widgets){
- if(widget.element != undefined)
- widget.element.style.display = "none";
+ for(let eltid in detachable_elements){ + let [element,parent] = detachable_elements[eltid]; + parent.removeChild(element); - /*for(let name in page_desc){
- page_desc[name].widget.element.style.display = "none";
function switch_page(page_name) {
@@ -241,25 +235,31 @@
for(let widget of old_desc.widgets){
- if(widget.element != undefined)
- widget.element.style.display = "none";
for(let index of widget.indexes){
subscribers[index].delete(widget);
- old_desc.widget.element.style.display = "none";
+ for(let eltid in old_desc.required_detachables){ + if(!(eltid in new_desc.required_detachables)){ + let [element, parent] = old_desc.required_detachables[eltid]; + parent.removeChild(element); + for(let eltid in new_desc.required_detachables){ + if(!(eltid in old_desc.required_detachables)){ + let [element, parent] = new_desc.required_detachables[eltid]; + parent.appendChild(element); + for(let eltid in new_desc.required_detachables){ + let [element, parent] = new_desc.required_detachables[eltid]; + parent.appendChild(element); for(let widget of new_desc.widgets){
- if(widget.element != undefined)
- widget.element.style.display = "inline";
/* add widget's subsribers */
for(let index of widget.indexes){
subscribers[index].add(widget);
@@ -270,8 +270,6 @@
- new_desc.widget.element.style.display = "inline";
svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
current_page = page_name;