svghmi/svghmi.js
branchsvghmi
changeset 2850 e38654ec6281
parent 2843 94696b3f69fb
child 2859 517583e21bfd
--- 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 @@
 var current_page;
 
 function prepare_svg() {
-    /* set everybody hidden initially for better performance */
-    for(let widget in hmi_widgets){
-        if(widget.element != undefined)
-            widget.element.style.display = "none";
-    }
-        /*for(let name in page_desc){
-            if(name != new_desc){
-                page_desc[name].widget.element.style.display = "none";
-            }
-        }*/
+    for(let eltid in detachable_elements){
+        let [element,parent] = detachable_elements[eltid];
+        parent.removeChild(element);
+    }
 };
 
 function switch_page(page_name) {
@@ -241,25 +235,31 @@
 
     if(old_desc){
         for(let widget of old_desc.widgets){
-
-            /* hide widget */
-            if(widget.element != undefined)
-                widget.element.style.display = "none";
-
             /* remove subsribers */
             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);
+            }
+        }
+    }else{
+        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){
-
-        /* unhide widget */
-        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;