svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2861 84c16ece8e10
parent 2859 517583e21bfd
child 2862 a108677bd3d0
equal deleted inserted replaced
2860:b7650c6abeda 2861:84c16ece8e10
   623 </xsl:text>
   623 </xsl:text>
   624     <xsl:text>var cache = hmitree_types.map(_ignored =&gt; undefined);
   624     <xsl:text>var cache = hmitree_types.map(_ignored =&gt; undefined);
   625 </xsl:text>
   625 </xsl:text>
   626     <xsl:text>var updates = {};
   626     <xsl:text>var updates = {};
   627 </xsl:text>
   627 </xsl:text>
       
   628     <xsl:text>var page_switch = null;
       
   629 </xsl:text>
   628     <xsl:text>
   630     <xsl:text>
   629 </xsl:text>
   631 </xsl:text>
   630     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
   632     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
   631 </xsl:text>
   633 </xsl:text>
   632     <xsl:text>    try {
   634     <xsl:text>    try {
   751 </xsl:text>
   753 </xsl:text>
   752     <xsl:text>
   754     <xsl:text>
   753 </xsl:text>
   755 </xsl:text>
   754     <xsl:text>// Apply updates recieved through ws.onmessage to subscribed widgets
   756     <xsl:text>// Apply updates recieved through ws.onmessage to subscribed widgets
   755 </xsl:text>
   757 </xsl:text>
   756     <xsl:text>// Called on requestAnimationFram, modifies DOM
   758     <xsl:text>// Do the page swith if any one pending
   757 </xsl:text>
   759 </xsl:text>
   758     <xsl:text>function apply_pending_updates() {
   760     <xsl:text>// Called on requestAnimationFrame, modifies DOM
       
   761 </xsl:text>
       
   762     <xsl:text>function animate() {
       
   763 </xsl:text>
       
   764     <xsl:text>    if(page_switch != null){
       
   765 </xsl:text>
       
   766     <xsl:text>        do_switch_page(page_switch);
       
   767 </xsl:text>
       
   768     <xsl:text>        page_switch=null;
       
   769 </xsl:text>
       
   770     <xsl:text>    }
       
   771 </xsl:text>
       
   772     <xsl:text>
   759 </xsl:text>
   773 </xsl:text>
   760     <xsl:text>    for(let index in updates){
   774     <xsl:text>    for(let index in updates){
   761 </xsl:text>
   775 </xsl:text>
   762     <xsl:text>        // serving as a key, index becomes a string
   776     <xsl:text>        // serving as a key, index becomes a string
   763 </xsl:text>
   777 </xsl:text>
   771 </xsl:text>
   785 </xsl:text>
   772     <xsl:text>}
   786     <xsl:text>}
   773 </xsl:text>
   787 </xsl:text>
   774     <xsl:text>
   788     <xsl:text>
   775 </xsl:text>
   789 </xsl:text>
       
   790     <xsl:text>var requestAnimationFrameID = null;
       
   791 </xsl:text>
       
   792     <xsl:text>function requestHMIAnimation() {
       
   793 </xsl:text>
       
   794     <xsl:text>    if(requestAnimationFrameID != null){
       
   795 </xsl:text>
       
   796     <xsl:text>        window.cancelAnimationFrame(requestAnimationFrameID);
       
   797 </xsl:text>
       
   798     <xsl:text>        requestAnimationFrameID = null;
       
   799 </xsl:text>
       
   800     <xsl:text>    }
       
   801 </xsl:text>
       
   802     <xsl:text>    requestAnimationFrameID = window.requestAnimationFrame(animate);
       
   803 </xsl:text>
       
   804     <xsl:text>}
       
   805 </xsl:text>
       
   806     <xsl:text>
       
   807 </xsl:text>
   776     <xsl:text>// Message reception handler
   808     <xsl:text>// Message reception handler
   777 </xsl:text>
   809 </xsl:text>
   778     <xsl:text>// Hash is verified and HMI values updates resulting from binary parsing
   810     <xsl:text>// Hash is verified and HMI values updates resulting from binary parsing
   779 </xsl:text>
   811 </xsl:text>
   780     <xsl:text>// are stored until browser can compute next frame, DOM is left untouched
   812     <xsl:text>// are stored until browser can compute next frame, DOM is left untouched
   831 </xsl:text>
   863 </xsl:text>
   832     <xsl:text>        };
   864     <xsl:text>        };
   833 </xsl:text>
   865 </xsl:text>
   834     <xsl:text>        // register for rendering on next frame, since there are updates
   866     <xsl:text>        // register for rendering on next frame, since there are updates
   835 </xsl:text>
   867 </xsl:text>
   836     <xsl:text>        window.requestAnimationFrame(apply_pending_updates);
   868     <xsl:text>        window.requestAnimationFrame(animate);
   837 </xsl:text>
   869 </xsl:text>
   838     <xsl:text>    } catch(err) {
   870     <xsl:text>    } catch(err) {
   839 </xsl:text>
   871 </xsl:text>
   840     <xsl:text>        // 1003 is for "Unsupported Data"
   872     <xsl:text>        // 1003 is for "Unsupported Data"
   841 </xsl:text>
   873 </xsl:text>
  1101 </xsl:text>
  1133 </xsl:text>
  1102     <xsl:text>
  1134     <xsl:text>
  1103 </xsl:text>
  1135 </xsl:text>
  1104     <xsl:text>function switch_page(page_name) {
  1136     <xsl:text>function switch_page(page_name) {
  1105 </xsl:text>
  1137 </xsl:text>
       
  1138     <xsl:text>    page_switch = page_name;
       
  1139 </xsl:text>
       
  1140     <xsl:text>    window.requestAnimationFrame(animate);
       
  1141 </xsl:text>
       
  1142     <xsl:text>}
       
  1143 </xsl:text>
       
  1144     <xsl:text>
       
  1145 </xsl:text>
       
  1146     <xsl:text>function do_switch_page(page_name) {
       
  1147 </xsl:text>
  1106     <xsl:text>    let old_desc = page_desc[current_page];
  1148     <xsl:text>    let old_desc = page_desc[current_page];
  1107 </xsl:text>
  1149 </xsl:text>
  1108     <xsl:text>    let new_desc = page_desc[page_name];
  1150     <xsl:text>    let new_desc = page_desc[page_name];
  1109 </xsl:text>
  1151 </xsl:text>
  1110     <xsl:text>
  1152     <xsl:text>
  1193 </xsl:text>
  1235 </xsl:text>
  1194     <xsl:text>
  1236     <xsl:text>
  1195 </xsl:text>
  1237 </xsl:text>
  1196     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1238     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1197 </xsl:text>
  1239 </xsl:text>
       
  1240     <xsl:text>    
       
  1241 </xsl:text>
  1198     <xsl:text>    current_page = page_name;
  1242     <xsl:text>    current_page = page_name;
  1199 </xsl:text>
  1243 </xsl:text>
  1200     <xsl:text>
  1244     <xsl:text>
  1201 </xsl:text>
  1245 </xsl:text>
  1202     <xsl:text>    update_subscriptions();
  1246     <xsl:text>    window.setTimeout(update_subscriptions,0);
  1203 </xsl:text>
  1247 </xsl:text>
  1204     <xsl:text>};
  1248     <xsl:text>};
  1205 </xsl:text>
  1249 </xsl:text>
  1206     <xsl:text>
  1250     <xsl:text>
  1207 </xsl:text>
  1251 </xsl:text>
  1406           <xsl:text>value</xsl:text>
  1450           <xsl:text>value</xsl:text>
  1407         </xsl:with-param>
  1451         </xsl:with-param>
  1408         <xsl:with-param name="mandatory" select="'no'"/>
  1452         <xsl:with-param name="mandatory" select="'no'"/>
  1409       </xsl:call-template>
  1453       </xsl:call-template>
  1410     </xsl:variable>
  1454     </xsl:variable>
       
  1455     <xsl:variable name="have_value" select="string-length($value_elt)&gt;0"/>
  1411     <xsl:value-of select="$value_elt"/>
  1456     <xsl:value-of select="$value_elt"/>
  1412     <xsl:if test="$value_elt">
  1457     <xsl:if test="$have_value">
  1413       <xsl:text>    frequency: 5,
  1458       <xsl:text>    frequency: 5,
  1414 </xsl:text>
  1459 </xsl:text>
  1415     </xsl:if>
  1460     </xsl:if>
  1416     <xsl:text>    dispatch: function(value) {
  1461     <xsl:text>    dispatch: function(value) {
  1417 </xsl:text>
  1462 </xsl:text>
  1418     <xsl:if test="$value_elt">
  1463     <xsl:if test="$have_value">
  1419       <xsl:text>        this.value_elt.textContent = String(value);
  1464       <xsl:text>        this.value_elt.textContent = String(value);
  1420 </xsl:text>
  1465 </xsl:text>
  1421     </xsl:if>
  1466     </xsl:if>
  1422     <xsl:text>    },
  1467     <xsl:text>    },
  1423 </xsl:text>
  1468 </xsl:text>
  1443 </xsl:text>
  1488 </xsl:text>
  1444       <xsl:text>            evt =&gt; {let new_val = change_hmi_value(this.indexes[0], "</xsl:text>
  1489       <xsl:text>            evt =&gt; {let new_val = change_hmi_value(this.indexes[0], "</xsl:text>
  1445       <xsl:value-of select="func:escape_quotes(@inkscape:label)"/>
  1490       <xsl:value-of select="func:escape_quotes(@inkscape:label)"/>
  1446       <xsl:text>");
  1491       <xsl:text>");
  1447 </xsl:text>
  1492 </xsl:text>
  1448       <xsl:text>                    this.value_elt.textContent = String(new_val);});
  1493       <xsl:if test="$have_value">
       
  1494         <xsl:text>                    this.value_elt.textContent = String(new_val);
       
  1495 </xsl:text>
       
  1496       </xsl:if>
       
  1497       <xsl:text>                   });
  1449 </xsl:text>
  1498 </xsl:text>
  1450     </xsl:for-each>
  1499     </xsl:for-each>
  1451     <xsl:text>    },
  1500     <xsl:text>    },
  1452 </xsl:text>
  1501 </xsl:text>
  1453   </xsl:template>
  1502   </xsl:template>