svghmi/gen_index_xhtml.ysl2
branchsvghmi
changeset 2807 7fa21b3b5f9f
parent 2806 7d0e81cdedb0
child 2808 dc78ffa5253d
--- a/svghmi/gen_index_xhtml.ysl2	Sun Oct 27 22:28:51 2019 +0100
+++ b/svghmi/gen_index_xhtml.ysl2	Mon Oct 28 10:30:20 2019 +0100
@@ -324,8 +324,29 @@
 
     }
     template "widget[@type='Meter']", mode="widget_defs" {
+        param "hmi_element";
         | frequency: 10,
-    }
+        foreach "str:split('value min max needle range')" {
+            const "name",".";
+            const "elt_id","$hmi_element//*[@inkscape:label=$name][1]/@id";
+            if "not($elt_id)" error > Meter widget must have a «$name» element
+            | «$name»_elt: document.getElementById("«$elt_id»"),
+        }
+        | dispatch: function(value) {
+        |     this.value_elt.textContent = String(value);
+        |     let [min,max,totallength] = this.range;
+        |     let length = Math.max(0,Math.min(totallength,(Number(value)-min)*totallength/(max-min)));
+        |     let tip = this.range_elt.getPointAtLength(length);
+        |     this.needle_elt.setAttribute('d', "M "+this.origin.x+","+this.origin.y+" "+tip.x+","+tip.y);
+        | },
+        | origin: undefined,
+        | range: undefined,
+        | init: function() {
+        |     this.range = [Number(this.min_elt.textContent), Number(this.max_elt.textContent), this.range_elt.getTotalLength()]
+        |     this.origin = this.needle_elt.getPointAtLength(0);
+        | },
+    }
+
     template "widget[@type='Input']", mode="widget_defs" {
         param "hmi_element";
         | frequency: 5,