author | Edouard Tisserant <edouard@beremiz.fr> |
Fri, 30 Aug 2024 11:50:23 +0200 | |
changeset 4008 | f30573e98600 |
parent 3386 | 608f48ad3dfc |
permissions | -rw-r--r-- |
2994
b6a9ef7f7e43
SVGHMI: minimal JSON Table Widget communication infra + corresponding python code as py_ext code in svghmi test. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
diff
changeset
|
1 |
// widget_jsontable.ysl2 |
b6a9ef7f7e43
SVGHMI: minimal JSON Table Widget communication infra + corresponding python code as py_ext code in svghmi test. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
diff
changeset
|
2 |
|
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
3 |
widget_desc("JsonTable") { |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
4 |
longdesc |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
5 |
|| |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
6 |
Send given variables as POST to http URL argument, spread returned JSON in |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
7 |
SVG sub-elements of "data" labeled element. |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
8 |
|
3386
608f48ad3dfc
SVGHMI: multiple non significant changes: doc fixes, modern style access to attributes, enforce double quotes around member name in object literals.
Edouard Tisserant
parents:
3352
diff
changeset
|
9 |
Documentation to be written. see svghmi exemple. |
3241
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
10 |
|| |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
11 |
|
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
12 |
shortdesc > Http POST variables, spread JSON back |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
13 |
|
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
14 |
arg name="url" accepts="string" > |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
15 |
|
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
16 |
path name="edit" accepts="HMI_INT, HMI_REAL, HMI_STRING" > single variable to edit |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
17 |
|
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
18 |
} |
fe945f1f48b7
SVGHMI: WIP on Widget DnD UI : Added documentation to widgets, that is injected in widget parse tree during widget analysis
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3232
diff
changeset
|
19 |
|
3232
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
20 |
widget_class("JsonTable") |
2994
b6a9ef7f7e43
SVGHMI: minimal JSON Table Widget communication infra + corresponding python code as py_ext code in svghmi test. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
diff
changeset
|
21 |
|| |
3069
a9b03c2634c5
Arbitrary variables added to JsonTable subscription are now passed as 'extra' field in json query. As an example added JsonTable filtering in tests/svghmi
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3066
diff
changeset
|
22 |
// arbitrary defaults to avoid missing entries in query |
3187
ba8ff21fd82b
SVGHMI: change default values for JsonTable, leading to scrollbar initialized at annoying non-zero position
Edouard Tisserant
parents:
3181
diff
changeset
|
23 |
cache = [0,0,0]; |
3181
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
24 |
init_common() { |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
25 |
this.spread_json_data_bound = this.spread_json_data.bind(this); |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
26 |
this.handle_http_response_bound = this.handle_http_response.bind(this); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
27 |
this.fetch_error_bound = this.fetch_error.bind(this); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
28 |
this.promised = false; |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
29 |
} |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
30 |
|
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
31 |
handle_http_response(response) { |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
32 |
if (!response.ok) { |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
33 |
console.log("HTTP error, status = " + response.status); |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
34 |
} |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
35 |
return response.json(); |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
36 |
} |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
37 |
|
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
38 |
fetch_error(e){ |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
39 |
console.log("HTTP fetch error, message = " + e.message + "Widget:" + this.element_id); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
40 |
} |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
41 |
|
3048
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
42 |
do_http_request(...opt) { |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
43 |
this.abort_controller = new AbortController(); |
3195
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
44 |
return Promise.resolve().then(() => { |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
45 |
|
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
46 |
const query = { |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
47 |
args: this.args, |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
48 |
range: this.cache[1], |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
49 |
position: this.cache[2], |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
50 |
visible: this.visible, |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
51 |
extra: this.cache.slice(4), |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
52 |
options: opt |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
53 |
}; |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
54 |
|
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
55 |
const options = { |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
56 |
method: 'POST', |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
57 |
body: JSON.stringify(query), |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
58 |
headers: {'Content-Type': 'application/json'}, |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
59 |
signal: this.abort_controller.signal |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
60 |
}; |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
61 |
|
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
62 |
return fetch(this.args[0], options) |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
63 |
.then(this.handle_http_response_bound) |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
64 |
.then(this.spread_json_data_bound) |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
65 |
.catch(this.fetch_error_bound); |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
66 |
}); |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
67 |
} |
cdd2a032b424
SVGHMI: JsonTable: Fixed options not being passed in JSON post when jumping to a page where additional variables are pre-defined by a HMI:VarInit.
Edouard Tisserant
parents:
3189
diff
changeset
|
68 |
|
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
69 |
unsub(){ |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
70 |
this.abort_controller.abort(); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
71 |
super.unsub(); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
72 |
} |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
73 |
|
3189
0733114a2090
SVGHMI: JsonTable should refresh when re-subscibing, because data might have changed while not on the page we are switching to.
Edouard Tisserant
parents:
3187
diff
changeset
|
74 |
sub(...args){ |
0733114a2090
SVGHMI: JsonTable should refresh when re-subscibing, because data might have changed while not on the page we are switching to.
Edouard Tisserant
parents:
3187
diff
changeset
|
75 |
this.cache[0] = undefined; |
0733114a2090
SVGHMI: JsonTable should refresh when re-subscibing, because data might have changed while not on the page we are switching to.
Edouard Tisserant
parents:
3187
diff
changeset
|
76 |
super.sub(...args); |
0733114a2090
SVGHMI: JsonTable should refresh when re-subscibing, because data might have changed while not on the page we are switching to.
Edouard Tisserant
parents:
3187
diff
changeset
|
77 |
} |
0733114a2090
SVGHMI: JsonTable should refresh when re-subscibing, because data might have changed while not on the page we are switching to.
Edouard Tisserant
parents:
3187
diff
changeset
|
78 |
|
3034
793ce2117258
SVGHMI: JsonTable now makes meaningfull JSON request : all arguments and variables are passed in.
Edouard Tisserant
parents:
3031
diff
changeset
|
79 |
dispatch(value, oldval, index) { |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
80 |
|
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
81 |
if(this.cache[index] != value) |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
82 |
this.cache[index] = value; |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
83 |
else |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
84 |
return; |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
85 |
|
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
86 |
if(!this.promised){ |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
87 |
this.promised = true; |
3150
5a1bb6ec48a0
SVGHMI: JsonTable removed useless promise since fetch() already does one. Updated generated XSLT.
Edouard Tisserant
parents:
3149
diff
changeset
|
88 |
this.do_http_request().finally(() => { |
5a1bb6ec48a0
SVGHMI: JsonTable removed useless promise since fetch() already does one. Updated generated XSLT.
Edouard Tisserant
parents:
3149
diff
changeset
|
89 |
this.promised = false; |
5a1bb6ec48a0
SVGHMI: JsonTable removed useless promise since fetch() already does one. Updated generated XSLT.
Edouard Tisserant
parents:
3149
diff
changeset
|
90 |
}); |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
91 |
} |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
92 |
} |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
93 |
make_on_click(...options){ |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
94 |
let that = this; |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
95 |
return function(evt){ |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
96 |
that.do_http_request(...options); |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
97 |
} |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
98 |
} |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
99 |
// on_click(evt, ...options) { |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
100 |
// this.do_http_request(...options); |
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
101 |
// } |
2994
b6a9ef7f7e43
SVGHMI: minimal JSON Table Widget communication infra + corresponding python code as py_ext code in svghmi test. To be continued.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
diff
changeset
|
102 |
|| |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
103 |
|
3232
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
104 |
gen_index_xhtml { |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
105 |
|
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
106 |
template "svg:*", mode="json_table_elt_render" { |
2997
2f298089e32e
SVGHMI: JsonTable now picks items from HMI:List, and update texts, all according to Json data. Still miss scrolling.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2996
diff
changeset
|
107 |
error > JsonTable Widget can't contain element of type «local-name()». |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
108 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
109 |
|
3028
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
110 |
|
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
111 |
def "func:json_expressions" { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
112 |
param "expressions"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
113 |
param "label"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
114 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
115 |
// compute javascript expressions to access JSON data |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
116 |
// desscribed in given svg element's "label" |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
117 |
// knowing that parent element already has given "expressions". |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
118 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
119 |
choose { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
120 |
when "$label" { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
121 |
const "suffixes", "str:split($label)"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
122 |
const "res" foreach "$suffixes" expression { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
123 |
const "suffix","."; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
124 |
const "pos","position()"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
125 |
// take last available expression (i.e can have more suffixes than expressions) |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
126 |
const "expr","$expressions[position() <= $pos][last()]/expression"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
127 |
choose { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
128 |
when "contains($suffix,'=')" { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
129 |
const "name", "substring-before($suffix,'=')"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
130 |
if "$expr/@name[. != $name]" |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
131 |
error > JsonTable : missplaced '=' or inconsistent names in Json data expressions. |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
132 |
attrib "name" value "$name"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
133 |
attrib "content" > «$expr/@content»«substring-after($suffix,'=')» |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
134 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
135 |
otherwise { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
136 |
copy "$expr/@name"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
137 |
attrib "content" > «$expr/@content»«$suffix» |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
138 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
139 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
140 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
141 |
result "exsl:node-set($res)"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
142 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
143 |
// Empty labels are ignored, expressions are then passed as-is. |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
144 |
otherwise result "$expressions"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
145 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
146 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
147 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
148 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
149 |
const "initexpr" expression attrib "content" > jdata |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
150 |
const "initexpr_ns", "exsl:node-set($initexpr)"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
151 |
|
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
152 |
template "svg:use", mode="json_table_elt_render" { |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
153 |
param "expressions"; |
3386
608f48ad3dfc
SVGHMI: multiple non significant changes: doc fixes, modern style access to attributes, enforce double quotes around member name in object literals.
Edouard Tisserant
parents:
3352
diff
changeset
|
154 |
// cloned element must be part of a HMI:List or a HMI:List |
2997
2f298089e32e
SVGHMI: JsonTable now picks items from HMI:List, and update texts, all according to Json data. Still miss scrolling.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2996
diff
changeset
|
155 |
const "targetid", "substring-after(@xlink:href,'#')"; |
2f298089e32e
SVGHMI: JsonTable now picks items from HMI:List, and update texts, all according to Json data. Still miss scrolling.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2996
diff
changeset
|
156 |
const "from_list", "$hmi_lists[(@id | */@id) = $targetid]"; |
2f298089e32e
SVGHMI: JsonTable now picks items from HMI:List, and update texts, all according to Json data. Still miss scrolling.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2996
diff
changeset
|
157 |
|
3028
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
158 |
choose { |
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
159 |
when "count($from_list) > 0" { |
3386
608f48ad3dfc
SVGHMI: multiple non significant changes: doc fixes, modern style access to attributes, enforce double quotes around member name in object literals.
Edouard Tisserant
parents:
3352
diff
changeset
|
160 |
| id("«@id»").href.baseVal = |
3028
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
161 |
// obtain new target id from HMI:List widget |
3386
608f48ad3dfc
SVGHMI: multiple non significant changes: doc fixes, modern style access to attributes, enforce double quotes around member name in object literals.
Edouard Tisserant
parents:
3352
diff
changeset
|
162 |
| "#"+hmi_widgets["«$from_list/@id»"].items[«$expressions/expression[1]/@content»]; |
3028
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
163 |
} |
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
164 |
otherwise |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
165 |
warning > Clones (svg:use) in JsonTable Widget must point to a valid HMI:List widget or item. Reference "«@xlink:href»" is not valid and will not be updated. |
3028
72ee99635db7
SVGHMI: HMI:JsonTable also recognize TextStyleList, but parsing of textContent is still not implemented and style is still not updated.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2997
diff
changeset
|
166 |
} |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
167 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
168 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
169 |
template "svg:text", mode="json_table_elt_render" { |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
170 |
param "expressions"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
171 |
const "value_expr", "$expressions/expression[1]/@content"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
172 |
const "original", "@original"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
173 |
const "from_textstylelist", "$textstylelist_related_ns/list[elt/@eltid = $original]"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
174 |
choose { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
175 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
176 |
when "count($from_textstylelist) > 0" { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
177 |
const "content_expr", "$expressions/expression[2]/@content"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
178 |
if "string-length($content_expr) = 0 or $expressions/expression[2]/@name != 'textContent'" |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
179 |
error > Clones (svg:use) in JsonTable Widget pointing to a HMI:TextStyleList widget or item must have a "textContent=.someVal" assignement following value expression in label. |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
180 |
| { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
181 |
| let elt = id("«@id»"); |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
182 |
| elt.textContent = String(«$content_expr»); |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
183 |
| elt.style = hmi_widgets["«$from_textstylelist/@listid»"].styles[«$value_expr»]; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
184 |
| } |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
185 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
186 |
otherwise { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
187 |
| id("«@id»").textContent = String(«$value_expr»); |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
188 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
189 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
190 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
191 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
192 |
|
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
193 |
// only labels comming from Json widget are counted in |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
194 |
def "func:filter_non_widget_label" { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
195 |
param "elt"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
196 |
param "widget_elts"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
197 |
const "eltid" choose { |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
198 |
when "$elt/@original" value "$elt/@original"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
199 |
otherwise value "$elt/@id"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
200 |
} |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
201 |
result "$widget_elts[@id=$eltid]/@inkscape:label"; |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
202 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
203 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
204 |
template "svg:*", mode="json_table_render_except_comments"{ |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
205 |
param "expressions"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
206 |
param "widget_elts"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
207 |
|
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
208 |
const "label", "func:filter_non_widget_label(., $widget_elts)"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
209 |
// filter out "# commented" elements |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
210 |
if "not(starts-with($label,'#'))" |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
211 |
apply ".", mode="json_table_render"{ |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
212 |
with "expressions", "$expressions"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
213 |
with "widget_elts", "$widget_elts"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
214 |
with "label", "$label"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
215 |
} |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
216 |
} |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
217 |
|
3048
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
218 |
|
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
219 |
template "svg:*", mode="json_table_render" { |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
220 |
param "expressions"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
221 |
param "widget_elts"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
222 |
param "label"; |
3048
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
223 |
|
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
224 |
const "new_expressions", "func:json_expressions($expressions, $label)"; |
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
225 |
|
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
226 |
const "elt","."; |
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
227 |
foreach "$new_expressions/expression[position() > 1][starts-with(@name,'onClick')]" |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
228 |
| id("«$elt/@id»").onclick = this.make_on_click('«@name»', «@content»); |
3048
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
229 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
230 |
apply ".", mode="json_table_elt_render" |
3048
d46d545ff7b7
SVGHMI: JsonTable can now have clickable elements, that trigger a request with extra argument whose content is taken from Json data.
Edouard Tisserant
parents:
3043
diff
changeset
|
231 |
with "expressions", "$new_expressions"; |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
232 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
233 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
234 |
template "svg:g", mode="json_table_render" { |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
235 |
param "expressions"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
236 |
param "widget_elts"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
237 |
param "label"; |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
238 |
|
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
239 |
// use intermediate variables for optimization |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
240 |
const "varprefix" > obj_«@id»_ |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
241 |
| try { |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
242 |
|
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
243 |
foreach "$expressions/expression"{ |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
244 |
| let «$varprefix»«position()» = «@content»; |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
245 |
| if(«$varprefix»«position()» == undefined) { |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
246 |
| throw null; |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
247 |
| } |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
248 |
} |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
249 |
|
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
250 |
// because we put values in a variables, we can replace corresponding expression with variable name |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
251 |
const "new_expressions" foreach "$expressions/expression" xsl:copy { |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
252 |
copy "@name"; |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
253 |
attrib "content" > «$varprefix»«position()» |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
254 |
} |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
255 |
|
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
256 |
// revert hiding in case it did happen before |
3080
e5fa1f49f0b9
SVGHMI: WIP trying to reduce memory usage : use .onclick onstead of SetAttribute, avoid useless closure and object creation when possible, etc.
Edouard Tisserant
parents:
3069
diff
changeset
|
257 |
| id("«@id»").style = "«@style»"; |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
258 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
259 |
apply "*", mode="json_table_render_except_comments" { |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
260 |
with "expressions", "func:json_expressions(exsl:node-set($new_expressions), $label)"; |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
261 |
with "widget_elts", "$widget_elts"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
262 |
} |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
263 |
| } catch(err) { |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
264 |
| id("«@id»").style = "display:none"; |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
265 |
| } |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
266 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
267 |
|
3232
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
268 |
} |
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
269 |
|
7bdb766c2a4d
SVGHMI: In order to allow widget signature and description to coexist in same ysl2 file, introduced widget_class, widget_defs to declare widget codegen templates and gen_index_xhtml to mark templates that are only usefull in gen_index_xhtml.xslt.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3195
diff
changeset
|
270 |
widget_defs("JsonTable") { |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
271 |
labels("data"); |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
272 |
const "data_elt", "$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']"; |
3036
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
273 |
| visible: «count($data_elt/*[@inkscape:label])», |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
274 |
| spread_json_data: function(janswer) { |
4930455428df
SVGHMI: JsonTable now use intermediate variables again to address JSON data without duplicating code or referencing. Using intermediate variables also alows to check for availability of data and stop evaluating early if data is missing. Finally added complete roundtrip example to illustrate use of JSonTable to display "alarms" collected in python from changes on PLC boolean variables.
Edouard Tisserant
parents:
3035
diff
changeset
|
275 |
| let [range,position,jdata] = janswer; |
3149
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
276 |
| [[1, range], [2, position], [3, this.visible]].map(([i,v]) => { |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
277 |
| this.apply_hmi_value(i,v); |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
278 |
| this.cache[i] = v; |
d32e6246cd59
SVGHMI: Optimization for JsonTable : reload JSON only when necessary, and avoid concurrent http requests.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3081
diff
changeset
|
279 |
| }); |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
280 |
apply "$data_elt", mode="json_table_render_except_comments" { |
3031
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
281 |
with "expressions","$initexpr_ns"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
282 |
with "widget_elts","$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*"; |
440d74319a74
SVGHMI: Refactor the way JsonTable generate javascript code to access json data. Now support multiple assignments, used in the case of text to change both content and style on the same element.
Edouard Tisserant
parents:
3028
diff
changeset
|
283 |
} |
3181
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
284 |
| }, |
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
285 |
| init() { |
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
286 |
| this.init_common(); |
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
287 |
foreach "$hmi_element/*[starts-with(@inkscape:label,'action_')]" { |
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
288 |
| id("«@id»").onclick = this.make_on_click("«func:escape_quotes(@inkscape:label)»"); |
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
289 |
} |
2997
2f298089e32e
SVGHMI: JsonTable now picks items from HMI:List, and update texts, all according to Json data. Still miss scrolling.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2996
diff
changeset
|
290 |
| } |
3181
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
291 |
|
50d0fef791d5
SVGHMI: Add generic action buttons to JSON table, with an example in tests/svghmi: wipe alar list.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
3150
diff
changeset
|
292 |
} |