svghmi/widgets_common.ysl2
branchsvghmi
changeset 2949 e50908ddec60
parent 2948 faaf677ea99d
child 2950 1e53d8b60ee9
--- a/svghmi/widgets_common.ysl2	Fri May 08 16:47:52 2020 +0200
+++ b/svghmi/widgets_common.ysl2	Fri May 08 16:51:43 2020 +0200
@@ -24,8 +24,7 @@
 template "svg:*", mode="hmi_elements" {
     const "widget", "func:widget(@id)";
     const "eltid","@id";
-    |   "«@id»": {
-    |     type: "«$widget/@type»",
+    |   "«@id»": new «$widget/@type»Widget ({
     |     args: [
     foreach "$widget/arg"
     |         "«@value»"`if "position()!=last()" > ,`
@@ -46,7 +45,8 @@
     |     element: id("«@id»"),
     apply "$widget", mode="widget_defs" with "hmi_element",".";
     apply "$widget", mode="widget_subscribe" with "hmi_element",".";
-    |   }`if "position()!=last()" > ,`
+    |   })`if "position()!=last()" > ,`
+}
 
 def "func:unique_types" {
     param "elts_with_type";
@@ -69,17 +69,35 @@
     }
 }
 
+emit "preamble:widget-base-class" {
+    ||    
+    class Widget {
+        constructor(members){
+            Object.keys(members).forEach(prop => this[prop]=members[prop]);
+        }
+    }
+    ||
+}
+
 emit "preamble:hmi-classes" {
     const "used_widget_types", "func:unique_types($parsed_widgets/widget)";
     apply "$used_widget_types", mode="widget_class";
 }
 
+template "widget", mode="widget_class"
+||
+class «@type»Widget extends Widget{
+    /* empty class, as «@type» widget didn't provide any */
+}
+||
+
 emit "preamble:hmi-elements" {
     | var hmi_widgets = {
     apply "$hmi_elements", mode="hmi_elements";
     | }
 }
 
+
 // default : normal subscribing
 template "widget", mode="widget_subscribe" {
     |     sub: subscribe,