svghmi/widget_display.ysl2
branchsvghmi
changeset 3142 2637bb6a6bb0
parent 3065 c369a742443d
child 3204 856f4698a0a8
--- a/svghmi/widget_display.ysl2	Sun Feb 14 05:30:29 2021 +0100
+++ b/svghmi/widget_display.ysl2	Sun Feb 14 19:15:20 2021 +0100
@@ -7,15 +7,20 @@
         frequency = 5;
         dispatch(value, oldval, index) {
             this.fields[index] = value;    
-            this.element.textContent = this.args.length == 1 ? vsprintf(this.args[0],this.fields) : this.fields.join(' ');
+            this.request_animate();
         }
     }
     ||
 
 template "widget[@type='Display']", mode="widget_defs" {
     param "hmi_element";
-    if "$hmi_element[not(self::svg:text)]"
-        error > Display Widget id="«$hmi_element/@id»" is not a svg::text element
+
+    const "format" optional_labels("format");
+    const "has_format","string-length($format)>0";
+    value "$format";
+
+    if "$hmi_element[not(self::svg:text)] and not($has_format)"
+        error > Display Widget id="«$hmi_element/@id»" must be a svg::text element itself or a group containing a svg:text element labelled "format"
 
     const "field_initializer" foreach "path" {
         choose{
@@ -25,6 +30,28 @@
         if "position()!=last()" > ,
     }
     |     fields: [«$field_initializer»],
+    |     animate: function(){
+    choose {
+        when "$has_format" {
+    |       if(this.format_elt.getAttribute("lang")) {
+    |           this.format = svg_text_to_multiline(this.format_elt);
+    |           this.format_elt.removeAttribute("lang");
+    |       }
+    |       let str = vsprintf(this.format,this.fields);
+    |       multiline_to_svg_text(this.format_elt, str);
+        }
+        otherwise {
+    |       let str = this.args.length == 1 ? vsprintf(this.args[0],this.fields) : this.fields.join(' ');
+    |       multiline_to_svg_text(this.element, str);
+        }
+    }
+    |     },
+    |     
+    if "$has_format" {
+    |     init: function() {
+    |       this.format = svg_text_to_multiline(this.format_elt);
+    |     },
+    }
 }
 
 emit "preamble:display"