svghmi/svghmi.js
branchsvghmi
changeset 2869 d9eb50c015d1
parent 2867 901c89c0cc08
child 2870 634b43d69897
equal deleted inserted replaced
2868:8d9757191f05 2869:d9eb50c015d1
   255         let [element,parent] = detachable_elements[eltid];
   255         let [element,parent] = detachable_elements[eltid];
   256         parent.removeChild(element);
   256         parent.removeChild(element);
   257     }
   257     }
   258 };
   258 };
   259 
   259 
   260 function switch_page(page_name) {
   260 function switch_page(page_name, root_index) {
   261     if(current_subscribed_page != current_visible_page){
   261     if(current_subscribed_page != current_visible_page){
   262         /* page switch already going */
   262         /* page switch already going */
   263         /* TODO LOG ERROR */
   263         /* TODO LOG ERROR */
   264         return;
   264         return;
   265     } else if(page_name == current_visible_page){
   265     } else if(page_name == current_visible_page){
   268         return;
   268         return;
   269     }
   269     }
   270     switch_subscribed_page(page_name);
   270     switch_subscribed_page(page_name);
   271 };
   271 };
   272 
   272 
       
   273 function* chain(a,b){
       
   274     yield* a;
       
   275     yield* b;
       
   276 };
       
   277 
   273 function switch_subscribed_page(page_name) {
   278 function switch_subscribed_page(page_name) {
   274     let old_desc = page_desc[current_subscribed_page];
   279     let old_desc = page_desc[current_subscribed_page];
   275     let new_desc = page_desc[page_name];
   280     let new_desc = page_desc[page_name];
   276 
   281 
   277     if(new_desc == undefined){
   282     if(new_desc == undefined){
   278         /* TODO LOG ERROR */
   283         /* TODO LOG ERROR */
   279         return;
   284         return;
   280     }
   285     }
   281 
   286 
   282     if(old_desc){
   287     if(old_desc){
   283         for(let widget of old_desc.widgets){
   288         for(let widget of chain(old_desc.absolute_widgets,old_desc.relative_widgets)){
   284             /* remove subsribers */
   289             /* remove subsribers */
   285             for(let index of widget.indexes){
   290             for(let index of widget.indexes){
   286                 subscribers[index].delete(widget);
   291                 subscribers[index].delete(widget);
   287             }
   292             }
   288         }
   293         }
   289     }
   294     }
   290     for(let widget of new_desc.widgets){
   295     for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){
   291         /* add widget's subsribers */
   296         /* add widget's subsribers */
   292         for(let index of widget.indexes){
   297         for(let index of widget.indexes){
   293             subscribers[index].add(widget);
   298             subscribers[index].add(widget);
   294         }
   299         }
   295     }
   300     }
   324             let [element, parent] = new_desc.required_detachables[eltid];
   329             let [element, parent] = new_desc.required_detachables[eltid];
   325             parent.appendChild(element);
   330             parent.appendChild(element);
   326         }
   331         }
   327     }
   332     }
   328 
   333 
   329     for(let widget of new_desc.widgets){
   334     for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){
   330         for(let index of widget.indexes){
   335         for(let index of widget.indexes){
   331             /* dispatch current cache in newly opened page widgets */
   336             /* dispatch current cache in newly opened page widgets */
   332             let cached_val = cache[index];
   337             let cached_val = cache[index];
   333             if(cached_val != undefined)
   338             if(cached_val != undefined)
   334                 dispatch_value_to_widget(widget, index, cached_val, cached_val);
   339                 dispatch_value_to_widget(widget, index, cached_val, cached_val);