153 } |
154 } |
154 |
155 |
155 template "svg:g", mode="json_table_render" { |
156 template "svg:g", mode="json_table_render" { |
156 param "expressions"; |
157 param "expressions"; |
157 param "widget_elts"; |
158 param "widget_elts"; |
158 /* TODO : use intermediate variables for optimization |
159 const "gid", "@id"; |
159 foreach "$new_expressions" |
160 |
160 | let obj_«@id»_«position()» = «.»; |
161 // use intermediate variables for optimization |
161 */ |
162 const "varprefix" > obj_«$gid»_ |
|
163 | try { |
|
164 |
|
165 foreach "$expressions/expression"{ |
|
166 | let «$varprefix»«position()» = «@content»; |
|
167 | if(«$varprefix»«position()» == undefined) { |
|
168 | console.log("«$varprefix»«position()» = «@content»"); |
|
169 | throw null; |
|
170 | } |
|
171 } |
|
172 |
|
173 // because we put values in a variables, we can replace corresponding expression with variable name |
|
174 const "new_expressions" foreach "$expressions/expression" xsl:copy { |
|
175 copy "@name"; |
|
176 attrib "content" > «$varprefix»«position()» |
|
177 } |
|
178 |
|
179 // revert hiding in case it did happen before |
|
180 | id("«@id»").setAttribute("style", "«@style»"); |
|
181 |
162 const "label", "func:filter_non_widget_label(., $widget_elts)"; |
182 const "label", "func:filter_non_widget_label(., $widget_elts)"; |
163 apply "*", mode="json_table_render" { |
183 apply "*", mode="json_table_render" { |
164 with "expressions", "func:json_expressions($expressions, $label)"; |
184 with "expressions", "func:json_expressions(exsl:node-set($new_expressions), $label)"; |
165 with "widget_elts", "$widget_elts"; |
185 with "widget_elts", "$widget_elts"; |
166 } |
186 } |
|
187 | } catch(err) { |
|
188 | id("«$gid»").setAttribute("style", "display:none"); |
|
189 | } |
167 } |
190 } |
168 |
191 |
169 template "widget[@type='JsonTable']", mode="widget_defs" { |
192 template "widget[@type='JsonTable']", mode="widget_defs" { |
170 param "hmi_element"; |
193 param "hmi_element"; |
171 labels("data"); |
194 labels("data"); |
172 optional_labels("forward backward cursor"); |
195 optional_labels("forward backward cursor"); |
173 const "data_elt", "$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']"; |
196 const "data_elt", "$result_svg_ns//*[@id = $hmi_element/@id]/*[@inkscape:label = 'data']"; |
174 | spread_json_data: function(jdata) { |
197 | visible: «count($data_elt/*[@inkscape:label])», |
|
198 | spread_json_data: function(janswer) { |
|
199 | let [range,position,jdata] = janswer; |
|
200 | console.log(range,position,jdata); |
175 apply "$data_elt/*", mode="json_table_render" { |
201 apply "$data_elt/*", mode="json_table_render" { |
176 with "expressions","$initexpr_ns"; |
202 with "expressions","$initexpr_ns"; |
177 with "widget_elts","$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*"; |
203 with "widget_elts","$hmi_element/*[@inkscape:label = 'data']/descendant::svg:*"; |
178 } |
204 } |
179 | } |
205 | } |