diff -r 8d9757191f05 -r d9eb50c015d1 svghmi/svghmi.js --- 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];