svghmi/svghmi.js
branchsvghmi
changeset 2869 d9eb50c015d1
parent 2867 901c89c0cc08
child 2870 634b43d69897
--- a/svghmi/svghmi.js	Thu Mar 12 13:16:18 2020 +0100
+++ b/svghmi/svghmi.js	Fri Mar 13 10:36:13 2020 +0100
@@ -257,7 +257,7 @@
     }
 };
 
-function switch_page(page_name) {
+function switch_page(page_name, root_index) {
     if(current_subscribed_page != current_visible_page){
         /* page switch already going */
         /* TODO LOG ERROR */
@@ -270,6 +270,11 @@
     switch_subscribed_page(page_name);
 };
 
+function* chain(a,b){
+    yield* a;
+    yield* b;
+};
+
 function switch_subscribed_page(page_name) {
     let old_desc = page_desc[current_subscribed_page];
     let new_desc = page_desc[page_name];
@@ -280,14 +285,14 @@
     }
 
     if(old_desc){
-        for(let widget of old_desc.widgets){
+        for(let widget of chain(old_desc.absolute_widgets,old_desc.relative_widgets)){
             /* remove subsribers */
             for(let index of widget.indexes){
                 subscribers[index].delete(widget);
             }
         }
     }
-    for(let widget of new_desc.widgets){
+    for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){
         /* add widget's subsribers */
         for(let index of widget.indexes){
             subscribers[index].add(widget);
@@ -326,7 +331,7 @@
         }
     }
 
-    for(let widget of new_desc.widgets){
+    for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){
         for(let index of widget.indexes){
             /* dispatch current cache in newly opened page widgets */
             let cached_val = cache[index];