svghmi/gen_index_xhtml.ysl2
branchsvghmi
changeset 2807 7fa21b3b5f9f
parent 2806 7d0e81cdedb0
child 2808 dc78ffa5253d
equal deleted inserted replaced
2806:7d0e81cdedb0 2807:7fa21b3b5f9f
   322         }
   322         }
   323         | },
   323         | },
   324 
   324 
   325     }
   325     }
   326     template "widget[@type='Meter']", mode="widget_defs" {
   326     template "widget[@type='Meter']", mode="widget_defs" {
       
   327         param "hmi_element";
   327         | frequency: 10,
   328         | frequency: 10,
   328     }
   329         foreach "str:split('value min max needle range')" {
       
   330             const "name",".";
       
   331             const "elt_id","$hmi_element//*[@inkscape:label=$name][1]/@id";
       
   332             if "not($elt_id)" error > Meter widget must have a «$name» element
       
   333             | «$name»_elt: document.getElementById("«$elt_id»"),
       
   334         }
       
   335         | dispatch: function(value) {
       
   336         |     this.value_elt.textContent = String(value);
       
   337         |     let [min,max,totallength] = this.range;
       
   338         |     let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min)));
       
   339         |     let tip = this.range_elt.getPointAtLength(length);
       
   340         |     this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y);
       
   341         | },
       
   342         | origin: undefined,
       
   343         | range: undefined,
       
   344         | init: function() {
       
   345         |     this.range = [Number(this.min_elt.textContent), Number(this.max_elt.textContent), this.range_elt.getTotalLength()]
       
   346         |     this.origin = this.needle_elt.getPointAtLength(0);
       
   347         | },
       
   348     }
       
   349 
   329     template "widget[@type='Input']", mode="widget_defs" {
   350     template "widget[@type='Input']", mode="widget_defs" {
   330         param "hmi_element";
   351         param "hmi_element";
   331         | frequency: 5,
   352         | frequency: 5,
   332         const "value_elt_id","$hmi_element//*[self::svg:text][@inkscape:label='value'][1]/@id";
   353         const "value_elt_id","$hmi_element//*[self::svg:text][@inkscape:label='value'][1]/@id";
   333         if "not($value_elt_id)" error > Input widget must have a text element
   354         if "not($value_elt_id)" error > Input widget must have a text element