svghmi/widget_jsontable.ysl2
branchsvghmi
changeset 3036 4930455428df
parent 3035 d1fc8c55c1d3
child 3041 de4503de2f8c
equal deleted inserted replaced
3035:d1fc8c55c1d3 3036:4930455428df
     5     class JsonTableWidget extends Widget{
     5     class JsonTableWidget extends Widget{
     6         cache = [];
     6         cache = [];
     7         do_http_request() {
     7         do_http_request() {
     8             const query = {
     8             const query = {
     9                 args: this.args,
     9                 args: this.args,
    10                 vars: this.cache
    10                 vars: this.cache,
       
    11                 visible: this.visible
    11             };
    12             };
    12 
    13 
    13             const options = {
    14             const options = {
    14                  method: 'POST',
    15                  method: 'POST',
    15                  body: JSON.stringify(query),
    16                  body: JSON.stringify(query),
   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     |     }