218 var current_page; |
218 var current_page; |
219 |
219 |
220 function switch_page(page_name) { |
220 function switch_page(page_name) { |
221 let old_desc = page_desc[current_page]; |
221 let old_desc = page_desc[current_page]; |
222 let new_desc = page_desc[page_name]; |
222 let new_desc = page_desc[page_name]; |
223 /* TODO hide / show widgets */ |
223 |
|
224 if(new_desc == undefined){ |
|
225 return; |
|
226 } |
224 |
227 |
225 /* remove subsribers of previous page if any */ |
228 /* remove subsribers of previous page if any */ |
226 if(old_desc) for(let widget of old_desc.widgets){ |
229 if(old_desc){ |
|
230 for(let widget of old_desc.widgets){ |
|
231 for(let index of widget.indexes){ |
|
232 subscribers[index].delete(widget); |
|
233 } |
|
234 } |
|
235 old_desc.widget.element.style.display = "none"; |
|
236 } else { |
|
237 /* initial page switch : set everybody hidden */ |
|
238 for(let name in page_desc){ |
|
239 if(name != new_desc){ |
|
240 page_desc[name].widget.element.style.display = "none"; |
|
241 } |
|
242 } |
|
243 } |
|
244 |
|
245 /* add new subsribers if any */ |
|
246 for(let widget of new_desc.widgets){ |
227 for(let index of widget.indexes){ |
247 for(let index of widget.indexes){ |
228 subscribers[index].delete(widget); |
248 subscribers[index].add(widget); |
229 } |
249 /* dispatch current cache in newly opened page widgets */ |
230 } |
250 let cached_val = cache[index]; |
231 |
251 if(cached_val != undefined) |
232 if(new_desc) { |
252 dispatch_value_to_widget(widget, index, cached_val, cached_val); |
233 /* add new subsribers if any */ |
253 } |
234 for(let widget of new_desc.widgets){ |
254 } |
235 for(let index of widget.indexes){ |
255 |
236 subscribers[index].add(widget); |
256 new_desc.widget.element.style.display = "inline"; |
237 let cached_val = cache[index]; |
257 |
238 if(cached_val != undefined) |
258 svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
239 dispatch_value_to_widget(widget, index, cached_val, cached_val); |
|
240 } |
|
241 } |
|
242 svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
|
243 // TODO dispatch current cache in newly opened page |
|
244 } |
|
245 current_page = page_name; |
259 current_page = page_name; |
246 |
260 |
247 update_subscriptions(); |
261 update_subscriptions(); |
248 }; |
262 }; |
249 |
263 |