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); |