--- a/svghmi/gen_index_xhtml.ysl2 Fri Feb 21 16:15:33 2020 +0100
+++ b/svghmi/gen_index_xhtml.ysl2 Fri Feb 21 16:18:53 2020 +0100
@@ -299,7 +299,7 @@
const "page_sub_ids", "func:refered_elements($page)[@id = $hmi_elements/@id]/@id";
const "all_page_ids","$page_ids | $page_sub_ids[not(. = $page_ids)]";
| "«$desc/arg[1]/@value»": {
+ | widget: hmi_widgets["«@id»"], | bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
foreach "$all_page_ids" {
--- a/svghmi/svghmi.js Fri Feb 21 16:15:33 2020 +0100
+++ b/svghmi/svghmi.js Fri Feb 21 16:18:53 2020 +0100
@@ -220,28 +220,42 @@
function switch_page(page_name) {
let old_desc = page_desc[current_page];
let new_desc = page_desc[page_name];
- /* TODO hide / show widgets */
+ if(new_desc == undefined){ /* remove subsribers of previous page if any */
- if(old_desc) for(let widget of old_desc.widgets){
- for(let index of widget.indexes){
- subscribers[index].delete(widget);
+ for(let widget of old_desc.widgets){ + for(let index of widget.indexes){ + subscribers[index].delete(widget); + old_desc.widget.element.style.display = "none"; + /* initial page switch : set everybody hidden */ + for(let name in page_desc){ + page_desc[name].widget.element.style.display = "none";
- /* add new subsribers if any */
- for(let widget of new_desc.widgets){
- for(let index of widget.indexes){
- subscribers[index].add(widget);
- let cached_val = cache[index];
- if(cached_val != undefined)
- dispatch_value_to_widget(widget, index, cached_val, cached_val);
+ /* add new subsribers if any */ + for(let widget of new_desc.widgets){ + for(let index of widget.indexes){ + subscribers[index].add(widget); + /* dispatch current cache in newly opened page widgets */ + let cached_val = cache[index]; + if(cached_val != undefined) + dispatch_value_to_widget(widget, index, cached_val, cached_val); - svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
- // TODO dispatch current cache in newly opened page
+ new_desc.widget.element.style.display = "inline"; + svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); current_page = page_name;