svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2800 68cee1366b9c
parent 2799 f5da343b9b63
child 2801 390acff12755
equal deleted inserted replaced
2799:f5da343b9b63 2800:68cee1366b9c
   196 </xsl:text>
   196 </xsl:text>
   197       <xsl:text>    type: "</xsl:text>
   197       <xsl:text>    type: "</xsl:text>
   198       <xsl:value-of select="$widget/@type"/>
   198       <xsl:value-of select="$widget/@type"/>
   199       <xsl:text>",
   199       <xsl:text>",
   200 </xsl:text>
   200 </xsl:text>
   201       <xsl:text>    frequency: </xsl:text>
       
   202       <xsl:apply-templates mode="refresh_frequency" select="$widget"/>
       
   203       <xsl:text>,
       
   204 </xsl:text>
       
   205       <xsl:text>    args: [
   201       <xsl:text>    args: [
   206 </xsl:text>
   202 </xsl:text>
   207       <xsl:for-each select="$widget/arg">
   203       <xsl:for-each select="$widget/arg">
   208         <xsl:text>        "</xsl:text>
   204         <xsl:text>        "</xsl:text>
   209         <xsl:value-of select="@value"/>
   205         <xsl:value-of select="@value"/>
   234           <xsl:text>,</xsl:text>
   230           <xsl:text>,</xsl:text>
   235         </xsl:if>
   231         </xsl:if>
   236         <xsl:text>
   232         <xsl:text>
   237 </xsl:text>
   233 </xsl:text>
   238       </xsl:for-each>
   234       </xsl:for-each>
   239       <xsl:text>    ]
   235       <xsl:text>    ],
   240 </xsl:text>
   236 </xsl:text>
       
   237       <xsl:text>    element: document.getElementById("</xsl:text>
       
   238       <xsl:value-of select="@id"/>
       
   239       <xsl:text>"),
       
   240 </xsl:text>
       
   241       <xsl:apply-templates mode="widget_defs" select="$widget">
       
   242         <xsl:with-param name="hmi_element" select="."/>
       
   243       </xsl:apply-templates>
   241       <xsl:text>}</xsl:text>
   244       <xsl:text>}</xsl:text>
   242       <xsl:if test="position()!=last()">
   245       <xsl:if test="position()!=last()">
   243         <xsl:text>,</xsl:text>
   246         <xsl:text>,</xsl:text>
   244       </xsl:if>
   247       </xsl:if>
   245       <xsl:text>
   248       <xsl:text>
   317 </xsl:text>
   320 </xsl:text>
   318     <xsl:text>
   321     <xsl:text>
   319 </xsl:text>
   322 </xsl:text>
   320     <xsl:text>function dispatch_value(index, value) {
   323     <xsl:text>function dispatch_value(index, value) {
   321 </xsl:text>
   324 </xsl:text>
   322     <xsl:text>    console.log("dispatch_value("+index+", "+value+")");
   325     <xsl:text>    let widgets = subscribers[index];
       
   326 </xsl:text>
       
   327     <xsl:text>
       
   328 </xsl:text>
       
   329     <xsl:text>    if(widgets.size &gt; 0) {
       
   330 </xsl:text>
       
   331     <xsl:text>        for(let widget of widgets){
       
   332 </xsl:text>
       
   333     <xsl:text>            let idxidx = widget.indexes.indexOf(index);
       
   334 </xsl:text>
       
   335     <xsl:text>            if(idxidx == -1){
       
   336 </xsl:text>
       
   337     <xsl:text>                throw new Error("Dispatching to widget not interested, should not happen.");
       
   338 </xsl:text>
       
   339     <xsl:text>            }
       
   340 </xsl:text>
       
   341     <xsl:text>            let d = widget.dispatch;
       
   342 </xsl:text>
       
   343     <xsl:text>            if(typeof(d) == "function" &amp;&amp; idxidx == 0){
       
   344 </xsl:text>
       
   345     <xsl:text>                return d.call(widget,value);
       
   346 </xsl:text>
       
   347     <xsl:text>            }else if(typeof(d) == "object" &amp;&amp; d.length &gt;= idxidx){
       
   348 </xsl:text>
       
   349     <xsl:text>                d[idxidx].call(widget,value);
       
   350 </xsl:text>
       
   351     <xsl:text>            }/* else dispatch_0, ..., dispatch_n ? */
       
   352 </xsl:text>
       
   353     <xsl:text>            /*else {
       
   354 </xsl:text>
       
   355     <xsl:text>                throw new Error("Dunno how to dispatch to widget at index = " + index);
       
   356 </xsl:text>
       
   357     <xsl:text>            }*/
       
   358 </xsl:text>
       
   359     <xsl:text>        }
       
   360 </xsl:text>
       
   361     <xsl:text>    }
   323 </xsl:text>
   362 </xsl:text>
   324     <xsl:text>};
   363     <xsl:text>};
   325 </xsl:text>
   364 </xsl:text>
   326     <xsl:text>
   365     <xsl:text>
   327 </xsl:text>
   366 </xsl:text>
   355 </xsl:text>
   394 </xsl:text>
   356     <xsl:text>    let dv = new DataView(data);
   395     <xsl:text>    let dv = new DataView(data);
   357 </xsl:text>
   396 </xsl:text>
   358     <xsl:text>    let i = 0;
   397     <xsl:text>    let i = 0;
   359 </xsl:text>
   398 </xsl:text>
   360     <xsl:text>    console.log("Recv something.");
   399     <xsl:text>    //console.log("Recv something.");
   361 </xsl:text>
   400 </xsl:text>
   362     <xsl:text>    try {
   401     <xsl:text>    try {
   363 </xsl:text>
   402 </xsl:text>
   364     <xsl:text>        for(let hash_int of hmi_hash) {
   403     <xsl:text>        for(let hash_int of hmi_hash) {
   365 </xsl:text>
   404 </xsl:text>
   366     <xsl:text>            if(hash_int != dv.getUint8(i)){
   405     <xsl:text>            if(hash_int != dv.getUint8(i)){
   367 </xsl:text>
   406 </xsl:text>
   368     <xsl:text>                throw new Error("Hash doesn't match")
   407     <xsl:text>                throw new Error("Hash doesn't match");
   369 </xsl:text>
   408 </xsl:text>
   370     <xsl:text>            };
   409     <xsl:text>            };
   371 </xsl:text>
   410 </xsl:text>
   372     <xsl:text>            i++;
   411     <xsl:text>            i++;
   373 </xsl:text>
   412 </xsl:text>
   374     <xsl:text>        };
   413     <xsl:text>        };
   375 </xsl:text>
   414 </xsl:text>
   376     <xsl:text>
   415     <xsl:text>
   377 </xsl:text>
   416 </xsl:text>
   378     <xsl:text>        console.log("Recv something GOOD.");
   417     <xsl:text>        //console.log("Recv something GOOD.");
   379 </xsl:text>
   418 </xsl:text>
   380     <xsl:text>
   419     <xsl:text>
   381 </xsl:text>
   420 </xsl:text>
   382     <xsl:text>        while(i &lt; data.byteLength){
   421     <xsl:text>        while(i &lt; data.byteLength){
   383 </xsl:text>
   422 </xsl:text>
   384     <xsl:text>            let index = dv.getUint32(i, true);
   423     <xsl:text>            let index = dv.getUint32(i, true);
   385 </xsl:text>
   424 </xsl:text>
   386     <xsl:text>            console.log("Recv something index is "+index);
   425     <xsl:text>            //console.log("Recv something index is "+index);
   387 </xsl:text>
   426 </xsl:text>
   388     <xsl:text>            i += 4;
   427     <xsl:text>            i += 4;
   389 </xsl:text>
   428 </xsl:text>
   390     <xsl:text>            let iectype = hmitree_types[index];
   429     <xsl:text>            let iectype = hmitree_types[index];
   391 </xsl:text>
   430 </xsl:text>
   720       <xsl:with-param name="indent">
   759       <xsl:with-param name="indent">
   721         <xsl:value-of select="concat($indent,'&gt;')"/>
   760         <xsl:value-of select="concat($indent,'&gt;')"/>
   722       </xsl:with-param>
   761       </xsl:with-param>
   723     </xsl:apply-templates>
   762     </xsl:apply-templates>
   724   </xsl:template>
   763   </xsl:template>
   725   <xsl:template mode="refresh_frequency" match="widget">
   764   <xsl:template mode="widget_defs" match="widget[@type='Display']">
   726     <xsl:text>10</xsl:text>
   765     <xsl:param name="hmi_element"/>
   727   </xsl:template>
   766     <xsl:text>frequency: 5,
   728   <xsl:template mode="refresh_frequency" match="widget[@type='Meter']">
   767 </xsl:text>
   729     <xsl:text>10</xsl:text>
   768     <xsl:text>dispatch: function(value) {
   730   </xsl:template>
   769 </xsl:text>
   731   <xsl:template mode="refresh_frequency" match="widget[@type='Display']">
   770     <xsl:choose>
   732     <xsl:text>5</xsl:text>
   771       <xsl:when test="$hmi_element[self::svg:text]">
   733   </xsl:template>
   772         <xsl:text>  this.element.textContent = String(value);
   734   <xsl:template mode="refresh_frequency" match="widget[@type='Input']">
   773 </xsl:text>
   735     <xsl:text>5</xsl:text>
   774       </xsl:when>
       
   775       <xsl:otherwise>
       
   776         <xsl:message terminate="yes">Display widget as a group not implemented</xsl:message>
       
   777       </xsl:otherwise>
       
   778     </xsl:choose>
       
   779     <xsl:text>},
       
   780 </xsl:text>
       
   781   </xsl:template>
       
   782   <xsl:template mode="widget_defs" match="widget[@type='Meter']">
       
   783     <xsl:text>    frequency: 10,
       
   784 </xsl:text>
       
   785   </xsl:template>
       
   786   <xsl:template mode="widget_defs" match="widget[@type='Input']">
       
   787     <xsl:text>    frequency: 5,
       
   788 </xsl:text>
   736   </xsl:template>
   789   </xsl:template>
   737 </xsl:stylesheet>
   790 </xsl:stylesheet>