# HG changeset patch # User Edouard Tisserant # Date 1589121284 -7200 # Node ID 506fe92726608976d19b715e522b27f72c8da784 # Parent 1e53d8b60ee9a155dcb496c17f11c9c553ec8b82 SVGHMI: Widget's specific sub/unsub traits are now wxpressed in widget's class. diff -r 1e53d8b60ee9 -r 506fe9272660 svghmi/svghmi.js --- a/svghmi/svghmi.js Sun May 10 16:32:19 2020 +0200 +++ b/svghmi/svghmi.js Sun May 10 16:34:44 2020 +0200 @@ -325,40 +325,6 @@ return true; }; -function* chain(a,b){ - yield* a; - yield* b; -}; - -function unsubscribe(){ - /* remove subsribers */ - for(let index of this.indexes){ - let idx = index + this.offset; - subscribers[idx].delete(this); - } - this.offset = 0; -} - -function subscribe(new_offset=0){ - /* set the offset because relative */ - this.offset = new_offset; - /* add this's subsribers */ - for(let index of this.indexes){ - subscribers[index + new_offset].add(this); - } - need_cache_apply.push(this); -} - -function widget_apply_cache() { - for(let index of this.indexes){ - /* dispatch current cache in newly opened page widgets */ - let realindex = index+this.offset; - let cached_val = cache[realindex]; - if(cached_val != undefined) - dispatch_value_to_widget(this, realindex, cached_val, cached_val); - } -} - function switch_visible_page(page_name) { let old_desc = page_desc[current_visible_page]; diff -r 1e53d8b60ee9 -r 506fe9272660 svghmi/widgets_common.ysl2 --- a/svghmi/widgets_common.ysl2 Sun May 10 16:32:19 2020 +0200 +++ b/svghmi/widgets_common.ysl2 Sun May 10 16:34:44 2020 +0200 @@ -73,6 +73,35 @@ this.offset = 0; Object.keys(members).forEach(prop => this[prop]=members[prop]); } + unsub(){ + /* remove subsribers */ + for(let index of this.indexes){ + let idx = index + this.offset; + subscribers[idx].delete(this); + } + this.offset = 0; + } + + sub(new_offset=0){ + /* set the offset because relative */ + this.offset = new_offset; + /* add this's subsribers */ + for(let index of this.indexes){ + subscribers[index + new_offset].add(this); + } + need_cache_apply.push(this); + } + + apply_cache() { + for(let index of this.indexes){ + /* dispatch current cache in newly opened page widgets */ + let realindex = index+this.offset; + let cached_val = cache[realindex]; + if(cached_val != undefined) + dispatch_value_to_widget(this, realindex, cached_val, cached_val); + } + } + } || } @@ -98,9 +127,6 @@ // default : normal subscribing template "widget", mode="widget_subscribe" { - | sub: subscribe, - | unsub: unsubscribe, - | apply_cache: widget_apply_cache, } // page aren't subscribers template "widget[@type='Page']", mode="widget_subscribe";