216 } |
216 } |
217 |
217 |
218 var current_page; |
218 var current_page; |
219 |
219 |
220 function prepare_svg() { |
220 function prepare_svg() { |
221 /* set everybody hidden initially for better performance */ |
221 for(let eltid in detachable_elements){ |
222 for(let widget in hmi_widgets){ |
222 let [element,parent] = detachable_elements[eltid]; |
223 if(widget.element != undefined) |
223 parent.removeChild(element); |
224 widget.element.style.display = "none"; |
224 } |
225 } |
|
226 /*for(let name in page_desc){ |
|
227 if(name != new_desc){ |
|
228 page_desc[name].widget.element.style.display = "none"; |
|
229 } |
|
230 }*/ |
|
231 }; |
225 }; |
232 |
226 |
233 function switch_page(page_name) { |
227 function switch_page(page_name) { |
234 let old_desc = page_desc[current_page]; |
228 let old_desc = page_desc[current_page]; |
235 let new_desc = page_desc[page_name]; |
229 let new_desc = page_desc[page_name]; |
239 return; |
233 return; |
240 } |
234 } |
241 |
235 |
242 if(old_desc){ |
236 if(old_desc){ |
243 for(let widget of old_desc.widgets){ |
237 for(let widget of old_desc.widgets){ |
244 |
|
245 /* hide widget */ |
|
246 if(widget.element != undefined) |
|
247 widget.element.style.display = "none"; |
|
248 |
|
249 /* remove subsribers */ |
238 /* remove subsribers */ |
250 for(let index of widget.indexes){ |
239 for(let index of widget.indexes){ |
251 subscribers[index].delete(widget); |
240 subscribers[index].delete(widget); |
252 } |
241 } |
253 } |
242 } |
254 old_desc.widget.element.style.display = "none"; |
243 for(let eltid in old_desc.required_detachables){ |
|
244 if(!(eltid in new_desc.required_detachables)){ |
|
245 let [element, parent] = old_desc.required_detachables[eltid]; |
|
246 parent.removeChild(element); |
|
247 } |
|
248 } |
|
249 for(let eltid in new_desc.required_detachables){ |
|
250 if(!(eltid in old_desc.required_detachables)){ |
|
251 let [element, parent] = new_desc.required_detachables[eltid]; |
|
252 parent.appendChild(element); |
|
253 } |
|
254 } |
|
255 }else{ |
|
256 for(let eltid in new_desc.required_detachables){ |
|
257 let [element, parent] = new_desc.required_detachables[eltid]; |
|
258 parent.appendChild(element); |
|
259 } |
255 } |
260 } |
256 |
261 |
257 for(let widget of new_desc.widgets){ |
262 for(let widget of new_desc.widgets){ |
258 |
|
259 /* unhide widget */ |
|
260 if(widget.element != undefined) |
|
261 widget.element.style.display = "inline"; |
|
262 |
|
263 /* add widget's subsribers */ |
263 /* add widget's subsribers */ |
264 for(let index of widget.indexes){ |
264 for(let index of widget.indexes){ |
265 subscribers[index].add(widget); |
265 subscribers[index].add(widget); |
266 /* dispatch current cache in newly opened page widgets */ |
266 /* dispatch current cache in newly opened page widgets */ |
267 let cached_val = cache[index]; |
267 let cached_val = cache[index]; |
268 if(cached_val != undefined) |
268 if(cached_val != undefined) |
269 dispatch_value_to_widget(widget, index, cached_val, cached_val); |
269 dispatch_value_to_widget(widget, index, cached_val, cached_val); |
270 } |
270 } |
271 } |
271 } |
272 |
272 |
273 new_desc.widget.element.style.display = "inline"; |
|
274 |
|
275 svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
273 svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
276 current_page = page_name; |
274 current_page = page_name; |
277 |
275 |
278 update_subscriptions(); |
276 update_subscriptions(); |
279 }; |
277 }; |