svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2801 390acff12755
parent 2800 68cee1366b9c
child 2802 64e6f73b9859
equal deleted inserted replaced
2800:68cee1366b9c 2801:390acff12755
   324 </xsl:text>
   324 </xsl:text>
   325     <xsl:text>    let widgets = subscribers[index];
   325     <xsl:text>    let widgets = subscribers[index];
   326 </xsl:text>
   326 </xsl:text>
   327     <xsl:text>
   327     <xsl:text>
   328 </xsl:text>
   328 </xsl:text>
       
   329     <xsl:text>    // TODO : value cache
       
   330 </xsl:text>
       
   331     <xsl:text>    
       
   332 </xsl:text>
   329     <xsl:text>    if(widgets.size &gt; 0) {
   333     <xsl:text>    if(widgets.size &gt; 0) {
   330 </xsl:text>
   334 </xsl:text>
   331     <xsl:text>        for(let widget of widgets){
   335     <xsl:text>        for(let widget of widgets){
   332 </xsl:text>
   336 </xsl:text>
   333     <xsl:text>            let idxidx = widget.indexes.indexOf(index);
   337     <xsl:text>            let idxidx = widget.indexes.indexOf(index);
   362 </xsl:text>
   366 </xsl:text>
   363     <xsl:text>};
   367     <xsl:text>};
   364 </xsl:text>
   368 </xsl:text>
   365     <xsl:text>
   369     <xsl:text>
   366 </xsl:text>
   370 </xsl:text>
       
   371     <xsl:text>function init_widgets() {
       
   372 </xsl:text>
       
   373     <xsl:text>    Object.keys(hmi_widgets).forEach(function(id) {
       
   374 </xsl:text>
       
   375     <xsl:text>        let widget = hmi_widgets[id];
       
   376 </xsl:text>
       
   377     <xsl:text>        let init = widget.init;
       
   378 </xsl:text>
       
   379     <xsl:text>        if(typeof(init) == "function"){
       
   380 </xsl:text>
       
   381     <xsl:text>            return init.call(widget);
       
   382 </xsl:text>
       
   383     <xsl:text>        }
       
   384 </xsl:text>
       
   385     <xsl:text>    });
       
   386 </xsl:text>
       
   387     <xsl:text>};
       
   388 </xsl:text>
       
   389     <xsl:text>
       
   390 </xsl:text>
   367     <xsl:text>// Open WebSocket to relative "/ws" address
   391     <xsl:text>// Open WebSocket to relative "/ws" address
   368 </xsl:text>
   392 </xsl:text>
   369     <xsl:text>var ws = new WebSocket(window.location.href.replace(/^http(s?:\/\/[^\/]*)\/.*$/, 'ws$1/ws'));
   393     <xsl:text>var ws = new WebSocket(window.location.href.replace(/^http(s?:\/\/[^\/]*)\/.*$/, 'ws$1/ws'));
   370 </xsl:text>
   394 </xsl:text>
   371     <xsl:text>ws.binaryType = 'arraybuffer';
   395     <xsl:text>ws.binaryType = 'arraybuffer';
   580 </xsl:text>
   604 </xsl:text>
   581     <xsl:text>};
   605     <xsl:text>};
   582 </xsl:text>
   606 </xsl:text>
   583     <xsl:text>
   607     <xsl:text>
   584 </xsl:text>
   608 </xsl:text>
   585     <xsl:text>function update_value(index, value) {
   609     <xsl:text>function send_hmi_value(index, value) {
   586 </xsl:text>
   610 </xsl:text>
   587     <xsl:text>    iectype = hmitree_types[index];
   611     <xsl:text>    iectype = hmitree_types[index];
   588 </xsl:text>
   612 </xsl:text>
   589     <xsl:text>    jstype = typedarray_types[iectypes];
   613     <xsl:text>    jstype = typedarray_types[iectype];
   590 </xsl:text>
   614 </xsl:text>
   591     <xsl:text>    send_blob([
   615     <xsl:text>    send_blob([
   592 </xsl:text>
   616 </xsl:text>
   593     <xsl:text>        new Uint8Array([0]),  /* setval = 0 */
   617     <xsl:text>        new Uint8Array([0]),  /* setval = 0 */
   594 </xsl:text>
   618 </xsl:text>
   600 </xsl:text>
   624 </xsl:text>
   601     <xsl:text>};
   625     <xsl:text>};
   602 </xsl:text>
   626 </xsl:text>
   603     <xsl:text>
   627     <xsl:text>
   604 </xsl:text>
   628 </xsl:text>
       
   629     <xsl:text>function change_hmi_value(index, opstr) {
       
   630 </xsl:text>
       
   631     <xsl:text>    let op = opstr[0];
       
   632 </xsl:text>
       
   633     <xsl:text>    if(op == "=")
       
   634 </xsl:text>
       
   635     <xsl:text>        return send_hmi_value(index, Number(opstr.slice(1)));
       
   636 </xsl:text>
       
   637     <xsl:text>
       
   638 </xsl:text>
       
   639     <xsl:text>    alert('Change '+opstr+" TODO !!! (index :"+index+")");
       
   640 </xsl:text>
       
   641     <xsl:text>}
       
   642 </xsl:text>
       
   643     <xsl:text>
       
   644 </xsl:text>
   605     <xsl:text>var current_page;
   645     <xsl:text>var current_page;
   606 </xsl:text>
   646 </xsl:text>
   607     <xsl:text>
   647     <xsl:text>
   608 </xsl:text>
   648 </xsl:text>
   609     <xsl:text>function switch_page(page_name) {
   649     <xsl:text>function switch_page(page_name) {
   657     <xsl:text>
   697     <xsl:text>
   658 </xsl:text>
   698 </xsl:text>
   659     <xsl:text>// Once connection established
   699     <xsl:text>// Once connection established
   660 </xsl:text>
   700 </xsl:text>
   661     <xsl:text>ws.onopen = function (evt) {
   701     <xsl:text>ws.onopen = function (evt) {
       
   702 </xsl:text>
       
   703     <xsl:text>    init_widgets();
   662 </xsl:text>
   704 </xsl:text>
   663     <xsl:text>    send_reset();
   705     <xsl:text>    send_reset();
   664 </xsl:text>
   706 </xsl:text>
   665     <xsl:text>    // show main page
   707     <xsl:text>    // show main page
   666 </xsl:text>
   708 </xsl:text>
   771       <xsl:when test="$hmi_element[self::svg:text]">
   813       <xsl:when test="$hmi_element[self::svg:text]">
   772         <xsl:text>  this.element.textContent = String(value);
   814         <xsl:text>  this.element.textContent = String(value);
   773 </xsl:text>
   815 </xsl:text>
   774       </xsl:when>
   816       </xsl:when>
   775       <xsl:otherwise>
   817       <xsl:otherwise>
   776         <xsl:message terminate="yes">Display widget as a group not implemented</xsl:message>
   818         <xsl:message terminate="yes">
       
   819           <xsl:text>Display widget as a group not implemented</xsl:text>
       
   820         </xsl:message>
   777       </xsl:otherwise>
   821       </xsl:otherwise>
   778     </xsl:choose>
   822     </xsl:choose>
   779     <xsl:text>},
   823     <xsl:text>},
   780 </xsl:text>
   824 </xsl:text>
   781   </xsl:template>
   825   </xsl:template>
   782   <xsl:template mode="widget_defs" match="widget[@type='Meter']">
   826   <xsl:template mode="widget_defs" match="widget[@type='Meter']">
   783     <xsl:text>    frequency: 10,
   827     <xsl:text>frequency: 10,
   784 </xsl:text>
   828 </xsl:text>
   785   </xsl:template>
   829   </xsl:template>
   786   <xsl:template mode="widget_defs" match="widget[@type='Input']">
   830   <xsl:template mode="widget_defs" match="widget[@type='Input']">
       
   831     <xsl:param name="hmi_element"/>
       
   832     <xsl:text>frequency: 5,
       
   833 </xsl:text>
       
   834     <xsl:variable name="value_elt_id" select="$hmi_element//*[self::svg:text][@inkscape:label='value'][1]/@id"/>
       
   835     <xsl:if test="not($value_elt_id)">
       
   836       <xsl:message terminate="yes">
       
   837         <xsl:text>Input widget must have a text element</xsl:text>
       
   838       </xsl:message>
       
   839     </xsl:if>
       
   840     <xsl:text>value_elt: document.getElementById("</xsl:text>
       
   841     <xsl:value-of select="$value_elt_id"/>
       
   842     <xsl:text>"),
       
   843 </xsl:text>
       
   844     <xsl:text>dispatch: function(value) {
       
   845 </xsl:text>
       
   846     <xsl:text>    this.value_elt.textContent = String(value);
       
   847 </xsl:text>
       
   848     <xsl:text>},
       
   849 </xsl:text>
       
   850     <xsl:variable name="edit_elt_id" select="$hmi_element/*[@inkscape:label='edit'][1]/@id"/>
       
   851     <xsl:text>init: function() {
       
   852 </xsl:text>
       
   853     <xsl:if test="$edit_elt_id">
       
   854       <xsl:text>    document.getElementById("</xsl:text>
       
   855       <xsl:value-of select="$edit_elt_id"/>
       
   856       <xsl:text>").addEventListener(
       
   857 </xsl:text>
       
   858       <xsl:text>        "click", 
       
   859 </xsl:text>
       
   860       <xsl:text>        evt =&gt; alert('XXX TODO : Edit value'));
       
   861 </xsl:text>
       
   862     </xsl:if>
       
   863     <xsl:for-each select="$hmi_element/*[regexp:test(@inkscape:label,'^[=+\-][0-9]+')]">
       
   864       <xsl:text>    document.getElementById("</xsl:text>
       
   865       <xsl:value-of select="@id"/>
       
   866       <xsl:text>").addEventListener(
       
   867 </xsl:text>
       
   868       <xsl:text>        "click", 
       
   869 </xsl:text>
       
   870       <xsl:text>        evt =&gt; change_hmi_value(this.indexes[0], "</xsl:text>
       
   871       <xsl:value-of select="@inkscape:label"/>
       
   872       <xsl:text>"));
       
   873 </xsl:text>
       
   874     </xsl:for-each>
       
   875     <xsl:text>},
       
   876 </xsl:text>
       
   877   </xsl:template>
       
   878   <xsl:template mode="widget_defs" match="widget[@type='Button']"/>
       
   879   <xsl:template mode="widget_defs" match="widget[@type='Toggle']">
   787     <xsl:text>    frequency: 5,
   880     <xsl:text>    frequency: 5,
   788 </xsl:text>
   881 </xsl:text>
   789   </xsl:template>
   882   </xsl:template>
       
   883   <xsl:template mode="widget_defs" match="widget[@type='Change']">
       
   884     <xsl:text>    frequency: 5,
       
   885 </xsl:text>
       
   886   </xsl:template>
   790 </xsl:stylesheet>
   887 </xsl:stylesheet>