diff -r d4dfd47f8156 -r 32a4675af377 svghmi/widgets_common.ysl2 --- a/svghmi/widgets_common.ysl2 Tue Feb 09 07:41:24 2021 +0100 +++ b/svghmi/widgets_common.ysl2 Tue Feb 09 07:46:02 2021 +0100 @@ -68,16 +68,32 @@ let hmi_locals = {}; var last_remote_index = hmitree_types.length - 1; var next_available_index = hmitree_types.length; + let cookies = new Map(document.cookie.split("; ").map(s=>s.split("="))); const local_defaults = { || - foreach "$parsed_widgets/widget[@type = 'VarInit']"{ + foreach "$parsed_widgets/widget[starts-with(@type,'VarInit')]"{ if "count(path) != 1" error > VarInit «@id» must have only one variable given. if "path/@type != 'PAGE_LOCAL' and path/@type != 'HMI_LOCAL'" error > VarInit «@id» only applies to HMI variable. - | "«path/@value»":«arg[1]/@value»`if "position()!=last()" > ,` + > "«path/@value»": + choose { + when "@type = 'VarInitPersistent'" > cookies.has("«path/@value»")?cookies.get("«path/@value»"):«arg[1]/@value» + otherwise > «arg[1]/@value» + } + > \n + if "position()!=last()" > , } || }; + + const persistent_locals = new Set([ + || + foreach "$parsed_widgets/widget[@type='VarInitPersistent']"{ + | "«path/@value»"`if "position()!=last()" > ,` + } + || + ]); + var persistent_indexes = new Map(); var cache = hmitree_types.map(_ignored => undefined); function page_local_index(varname, pagename){ @@ -96,8 +112,11 @@ pagevars[varname] = new_index; } let defaultval = local_defaults[varname]; - if(defaultval != undefined) + if(defaultval != undefined) { cache[new_index] = defaultval; + if(persistent_locals.has(varname)) + persistent_indexes.set(new_index, varname); + } return new_index; } @@ -265,7 +284,7 @@ || } -const "excluded_types", "str:split('Page VarInit')"; +const "excluded_types", "str:split('Page VarInit VarInitPersistent')"; // Key to filter unique types key "TypesKey", "widget", "@type";