author | Edouard Tisserant <edouard.tisserant@gmail.com> |
Tue, 09 Feb 2021 08:11:22 +0100 | |
branch | svghmi |
changeset 3132 | a1e2eff0bc58 |
parent 3081 | 9e55061c87fa |
child 3149 | d32e6246cd59 |
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 |
|
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
|
3 |
template "widget[@type='JsonTable']", mode="widget_class" |
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
|
4 |
|| |
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
|
5 |
class JsonTableWidget extends Widget{ |
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
|
6 |
// arbitrary defaults to avoid missing entries in query |
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
|
7 |
cache = [0,100,50]; |
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
|
8 |
init() { |
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
|
9 |
this.spread_json_data_bound = this.spread_json_data.bind(this); |
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
|
10 |
} |
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
|
11 |
|
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
|
12 |
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
|
13 |
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
|
14 |
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
|
15 |
} |
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
|
16 |
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
|
17 |
} |
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
|
18 |
|
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
|
19 |
do_http_request(...opt) { |
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
|
20 |
const query = { |
3034
793ce2117258
SVGHMI: JsonTable now makes meaningfull JSON request : all arguments and variables are passed in.
Edouard Tisserant
parents:
3031
diff
changeset
|
21 |
args: this.args, |
3065
c369a742443d
SVGHMI: non significant cosmetic changes
Edouard Tisserant
parents:
3048
diff
changeset
|
22 |
range: this.cache[1], |
c369a742443d
SVGHMI: non significant cosmetic changes
Edouard Tisserant
parents:
3048
diff
changeset
|
23 |
position: this.cache[2], |
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
|
24 |
visible: this.visible, |
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
|
25 |
extra: this.cache.slice(4), |
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
|
26 |
options: opt |
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
|
27 |
}; |
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
|
28 |
|
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
|
29 |
const options = { |
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
|
30 |
method: 'POST', |
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
|
31 |
body: JSON.stringify(query), |
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
|
32 |
headers: {'Content-Type': 'application/json'} |
3034
793ce2117258
SVGHMI: JsonTable now makes meaningfull JSON request : all arguments and variables are passed in.
Edouard Tisserant
parents:
3031
diff
changeset
|
33 |
}; |
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
|
34 |
|
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
|
35 |
fetch(this.args[0], 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
|
36 |
.then(this.handle_http_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
|
37 |
.then(this.spread_json_data_bound); |
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
|
38 |
|
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
|
39 |
} |
3034
793ce2117258
SVGHMI: JsonTable now makes meaningfull JSON request : all arguments and variables are passed in.
Edouard Tisserant
parents:
3031
diff
changeset
|
40 |
dispatch(value, oldval, index) { |
793ce2117258
SVGHMI: JsonTable now makes meaningfull JSON request : all arguments and variables are passed in.
Edouard Tisserant
parents:
3031
diff
changeset
|
41 |
this.cache[index] = value; |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
42 |
this.do_http_request(); |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
43 |
} |
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
|
44 |
make_on_click(...options){ |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
45 |
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
|
46 |
return function(evt){ |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
47 |
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
|
48 |
} |
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
|
49 |
} |
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
|
50 |
// 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
|
51 |
// 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
|
52 |
// } |
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
|
53 |
} |
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
|
54 |
|| |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
55 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
56 |
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
|
57 |
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
|
58 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
59 |
|
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
|
60 |
|
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
|
61 |
const "hmi_textstylelists_descs", "$parsed_widgets/widget[@type = 'TextStyleList']"; |
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
|
62 |
const "hmi_textstylelists", "$hmi_elements[@id = $hmi_textstylelists_descs/@id]"; |
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
|
63 |
|
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
|
64 |
const "textstylelist_related" foreach "$hmi_textstylelists" list { |
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
|
65 |
attrib "listid" value "@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
|
66 |
foreach "func:refered_elements(.)" 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
|
67 |
attrib "eltid" value "@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
|
68 |
} |
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
|
69 |
} |
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
|
70 |
const "textstylelist_related_ns", "exsl:node-set($textstylelist_related)"; |
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
|
71 |
|
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
|
72 |
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
|
73 |
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
|
74 |
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
|
75 |
|
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
|
76 |
// 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
|
77 |
// 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
|
78 |
// 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
|
79 |
|
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
|
80 |
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
|
81 |
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
|
82 |
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
|
83 |
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
|
84 |
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
|
85 |
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
|
86 |
// 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
|
87 |
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
|
88 |
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
|
89 |
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
|
90 |
const "name", "substring-before($suffix,'=')"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
91 |
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
|
92 |
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
|
93 |
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
|
94 |
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
|
95 |
} |
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
|
96 |
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
|
97 |
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
|
98 |
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
|
99 |
} |
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
|
100 |
} |
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
|
101 |
} |
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
|
102 |
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
|
103 |
} |
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
|
104 |
// 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
|
105 |
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
|
106 |
} |
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
|
107 |
|
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
|
108 |
} |
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
|
109 |
|
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
|
110 |
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
|
111 |
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
|
112 |
|
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
113 |
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
|
114 |
param "expressions"; |
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
|
115 |
// cloned element must be part of a HMI:List |
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
|
116 |
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
|
117 |
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
|
118 |
|
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
|
119 |
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
|
120 |
when "count($from_list) > 0" { |
3081
9e55061c87fa
SVGHMI: more attempts to prevent losing memory in JS closure
Edouard Tisserant
parents:
3080
diff
changeset
|
121 |
| id("«@id»").setAttribute("xlink:href", |
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
|
122 |
// obtain new target id from HMI:List widget |
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
|
123 |
| "#"+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
|
124 |
} |
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
|
125 |
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
|
126 |
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
|
127 |
} |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
128 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
129 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
130 |
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
|
131 |
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
|
132 |
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
|
133 |
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
|
134 |
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
|
135 |
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
|
136 |
|
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 |
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
|
138 |
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
|
139 |
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
|
140 |
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
|
141 |
| { |
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 |
| 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
|
143 |
| 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
|
144 |
| 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
|
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 |
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
|
148 |
| 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
|
149 |
} |
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 |
} |
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 |
} |
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
|
152 |
|
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 |
|
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
|
154 |
// 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
|
155 |
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
|
156 |
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
|
157 |
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
|
158 |
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
|
159 |
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
|
160 |
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
|
161 |
} |
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
|
162 |
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
|
163 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
164 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
165 |
template "svg:*", mode="json_table_render_except_comments"{ |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
166 |
param "expressions"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
167 |
param "widget_elts"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
168 |
|
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
169 |
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
|
170 |
// filter out "# commented" elements |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
171 |
if "not(starts-with($label,'#'))" |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
172 |
apply ".", mode="json_table_render"{ |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
173 |
with "expressions", "$expressions"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
174 |
with "widget_elts", "$widget_elts"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
175 |
with "label", "$label"; |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
176 |
} |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
177 |
} |
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
178 |
|
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
|
179 |
|
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
180 |
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
|
181 |
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
|
182 |
param "widget_elts"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
183 |
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
|
184 |
|
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
|
185 |
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
|
186 |
|
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
|
187 |
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
|
188 |
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
|
189 |
| 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
|
190 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
191 |
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
|
192 |
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
|
193 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
194 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
195 |
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
|
196 |
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
|
197 |
param "widget_elts"; |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
198 |
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
|
199 |
const "gid", "@id"; |
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
|
200 |
|
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
|
201 |
// use intermediate variables for optimization |
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
|
202 |
const "varprefix" > obj_«$gid»_ |
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
|
203 |
| 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
|
204 |
|
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
|
205 |
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
|
206 |
| 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
|
207 |
| 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
|
208 |
| console.log("«$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
|
209 |
| 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
|
210 |
| } |
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
|
211 |
} |
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
|
212 |
|
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
|
213 |
// 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
|
214 |
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
|
215 |
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
|
216 |
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
|
217 |
} |
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
|
218 |
|
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
|
219 |
// 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
|
220 |
| 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
|
221 |
|
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
222 |
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
|
223 |
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
|
224 |
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
|
225 |
} |
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
|
226 |
| } catch(err) { |
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
|
227 |
| id("«$gid»").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
|
228 |
| } |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
229 |
} |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
230 |
|
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
231 |
template "widget[@type='JsonTable']", mode="widget_defs" { |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
232 |
param "hmi_element"; |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
233 |
labels("data"); |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
234 |
optional_labels("forward backward cursor"); |
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
235 |
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
|
236 |
| 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
|
237 |
| 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
|
238 |
| let [range,position,jdata] = janswer; |
3041
de4503de2f8c
SVGHMI: JsonTable now updates range and position variables so that slider widget can update.
Edouard Tisserant
parents:
3036
diff
changeset
|
239 |
| this.apply_hmi_value(1, range); |
de4503de2f8c
SVGHMI: JsonTable now updates range and position variables so that slider widget can update.
Edouard Tisserant
parents:
3036
diff
changeset
|
240 |
| this.apply_hmi_value(2, position); |
3066
d7b9c2ceb3fb
SVGHMI: JsonTable now outputs "visible" value as well.
Edouard Tisserant
parents:
3065
diff
changeset
|
241 |
| this.apply_hmi_value(3, this.visible); |
3043
d7b009e49e87
SVGHMI: JsonTable now ignores elements and groups starting with #
Edouard Tisserant
parents:
3041
diff
changeset
|
242 |
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
|
243 |
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
|
244 |
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
|
245 |
} |
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
|
246 |
| } |
2996
14635b09d329
SVGHMI: JsonTable now generate working data access code for data/* elements.
Edouard Tisserant <edouard.tisserant@gmail.com>
parents:
2994
diff
changeset
|
247 |
} |