svghmi/gen_index_xhtml.xslt
changeset 4056 4b2de1a0fbf9
parent 4048 b3ea419a4d47
--- a/svghmi/gen_index_xhtml.xslt	Thu Nov 28 14:46:50 2024 +0100
+++ b/svghmi/gen_index_xhtml.xslt	Mon Dec 02 11:33:19 2024 +0100
@@ -4816,6 +4816,76 @@
     <xsl:text>}
 </xsl:text>
   </xsl:template>
+  <xsl:template match="widget[@type='Image']" mode="widget_desc">
+    <type>
+      <xsl:value-of select="@type"/>
+    </type>
+    <longdesc>
+      <xsl:text>If Image widget is a svg:image element, then href content is replaced by
+</xsl:text>
+      <xsl:text>value of given variable.
+</xsl:text>
+    </longdesc>
+    <shortdesc>
+      <xsl:text>Image display</xsl:text>
+    </shortdesc>
+  </xsl:template>
+  <xsl:template match="widget[@type='Image']" mode="widget_class">
+    <xsl:text>class </xsl:text>
+    <xsl:text>ImageWidget</xsl:text>
+    <xsl:text> extends Widget{
+</xsl:text>
+    <xsl:text>    frequency = 5;
+</xsl:text>
+    <xsl:text>    dispatch(value, oldval, index) {
+</xsl:text>
+    <xsl:text>        if (index == 0) {
+</xsl:text>
+    <xsl:text>            this.given_url = value;
+</xsl:text>
+    <xsl:text>            this.ready = true;
+</xsl:text>
+    <xsl:text>            this.request_animate();
+</xsl:text>
+    <xsl:text>        }
+</xsl:text>
+    <xsl:text>    }
+</xsl:text>
+    <xsl:text>}
+</xsl:text>
+  </xsl:template>
+  <xsl:template match="widget[@type='Image']" mode="widget_defs">
+    <xsl:param name="hmi_element"/>
+    <xsl:variable name="disability">
+      <xsl:call-template name="defs_by_labels">
+        <xsl:with-param name="hmi_element" select="$hmi_element"/>
+        <xsl:with-param name="labels">
+          <xsl:text>/disabled</xsl:text>
+        </xsl:with-param>
+        <xsl:with-param name="mandatory" select="'no'"/>
+      </xsl:call-template>
+    </xsl:variable>
+    <xsl:value-of select="$disability"/>
+    <xsl:variable name="has_disability" select="string-length($disability)&gt;0"/>
+    <xsl:text>    given_url: "",
+</xsl:text>
+    <xsl:text>    ready: false,
+</xsl:text>
+    <xsl:text>    animate: function(){
+</xsl:text>
+    <xsl:text>      this.element.setAttribute('href', this.given_url);
+</xsl:text>
+    <xsl:text>    },
+</xsl:text>
+    <xsl:text>
+</xsl:text>
+    <xsl:text>    init: function() {
+</xsl:text>
+    <xsl:text>      this.animate();
+</xsl:text>
+    <xsl:text>    },
+</xsl:text>
+  </xsl:template>
   <xsl:template match="widget[@type='Input']" mode="widget_desc">
     <type>
       <xsl:value-of select="@type"/>
@@ -5042,7 +5112,7 @@
 </xsl:text>
       <xsl:text>
 </xsl:text>
-      <xsl:text>Documentation to be written. see svghmi exemple.
+      <xsl:text>Documentation to be written. see svghmi example.
 </xsl:text>
     </longdesc>
     <shortdesc>
@@ -5247,7 +5317,7 @@
                   <xsl:variable name="name" select="substring-before($suffix,'=')"/>
                   <xsl:if test="$expr/@name[. != $name]">
                     <xsl:message terminate="yes">
-                      <xsl:text>JsonTable : missplaced '=' or inconsistent names in Json data expressions.</xsl:text>
+                      <xsl:text>JsonTable : misplaced '=' or inconsistent names in Json data expressions.</xsl:text>
                     </xsl:message>
                   </xsl:if>
                   <xsl:attribute name="name">
@@ -5320,7 +5390,7 @@
         <xsl:variable name="content_expr" select="$expressions/expression[2]/@content"/>
         <xsl:if test="string-length($content_expr) = 0 or $expressions/expression[2]/@name != 'textContent'">
           <xsl:message terminate="yes">
-            <xsl:text>Clones (svg:use) in JsonTable Widget pointing to a HMI:TextStyleList widget or item must have a "textContent=.someVal" assignement following value expression in label.</xsl:text>
+            <xsl:text>Clones (svg:use) in JsonTable Widget pointing to a HMI:TextStyleList widget or item must have a "textContent=.someVal" assignment following value expression in label.</xsl:text>
           </xsl:message>
         </xsl:if>
         <xsl:text>        {
@@ -5352,6 +5422,16 @@
       </xsl:otherwise>
     </xsl:choose>
   </xsl:template>
+  <xsl:template mode="json_table_elt_render" match="svg:image">
+    <xsl:param name="expressions"/>
+    <xsl:variable name="value_expr" select="$expressions/expression[1]/@content"/>
+    <xsl:text>        id("</xsl:text>
+    <xsl:value-of select="@id"/>
+    <xsl:text>").setAttribute('href', String(</xsl:text>
+    <xsl:value-of select="$value_expr"/>
+    <xsl:text>));
+</xsl:text>
+  </xsl:template>
   <func:function name="func:filter_non_widget_label">
     <xsl:param name="elt"/>
     <xsl:param name="widget_elts"/>
@@ -10142,8 +10222,6 @@
 </xsl:text>
           <xsl:text>        let widget = hmi_widgets[id];
 </xsl:text>
-          <xsl:text>        if(widget.curr_value != undefined) return;
-</xsl:text>
           <xsl:text>        widget.do_init();
 </xsl:text>
           <xsl:text>    });