svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2859 517583e21bfd
parent 2858 39c8d6079f0f
child 2861 84c16ece8e10
equal deleted inserted replaced
2858:39c8d6079f0f 2859:517583e21bfd
   621 </xsl:text>
   621 </xsl:text>
   622     <xsl:text>
   622     <xsl:text>
   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 = {};
       
   627 </xsl:text>
   626     <xsl:text>
   628     <xsl:text>
   627 </xsl:text>
   629 </xsl:text>
   628     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
   630     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
   629 </xsl:text>
   631 </xsl:text>
   630     <xsl:text>    try {
   632     <xsl:text>    try {
   747 </xsl:text>
   749 </xsl:text>
   748     <xsl:text>};
   750     <xsl:text>};
   749 </xsl:text>
   751 </xsl:text>
   750     <xsl:text>
   752     <xsl:text>
   751 </xsl:text>
   753 </xsl:text>
   752     <xsl:text>// Register message reception handler
   754     <xsl:text>// Apply updates recieved through ws.onmessage to subscribed widgets
       
   755 </xsl:text>
       
   756     <xsl:text>// Called on requestAnimationFram, modifies DOM
       
   757 </xsl:text>
       
   758     <xsl:text>function apply_pending_updates() {
       
   759 </xsl:text>
       
   760     <xsl:text>    for(let index in updates){
       
   761 </xsl:text>
       
   762     <xsl:text>        // serving as a key, index becomes a string
       
   763 </xsl:text>
       
   764     <xsl:text>        // -&gt; pass Number(index) instead
       
   765 </xsl:text>
       
   766     <xsl:text>        dispatch_value(Number(index), updates[index]);
       
   767 </xsl:text>
       
   768     <xsl:text>        delete updates[index];
       
   769 </xsl:text>
       
   770     <xsl:text>    }
       
   771 </xsl:text>
       
   772     <xsl:text>}
       
   773 </xsl:text>
       
   774     <xsl:text>
       
   775 </xsl:text>
       
   776     <xsl:text>// Message reception handler
       
   777 </xsl:text>
       
   778     <xsl:text>// Hash is verified and HMI values updates resulting from binary parsing
       
   779 </xsl:text>
       
   780     <xsl:text>// are stored until browser can compute next frame, DOM is left untouched
   753 </xsl:text>
   781 </xsl:text>
   754     <xsl:text>ws.onmessage = function (evt) {
   782     <xsl:text>ws.onmessage = function (evt) {
   755 </xsl:text>
   783 </xsl:text>
   756     <xsl:text>
   784     <xsl:text>
   757 </xsl:text>
   785 </xsl:text>
   789 </xsl:text>
   817 </xsl:text>
   790     <xsl:text>                let dvgetter = dvgetters[iectype];
   818     <xsl:text>                let dvgetter = dvgetters[iectype];
   791 </xsl:text>
   819 </xsl:text>
   792     <xsl:text>                let [value, bytesize] = dvgetter(dv,i);
   820     <xsl:text>                let [value, bytesize] = dvgetter(dv,i);
   793 </xsl:text>
   821 </xsl:text>
   794     <xsl:text>                dispatch_value(index, value);
   822     <xsl:text>                updates[index] = value;
   795 </xsl:text>
   823 </xsl:text>
   796     <xsl:text>                i += bytesize;
   824     <xsl:text>                i += bytesize;
   797 </xsl:text>
   825 </xsl:text>
   798     <xsl:text>            } else {
   826     <xsl:text>            } else {
   799 </xsl:text>
   827 </xsl:text>
   800     <xsl:text>                throw new Error("Unknown index "+index)
   828     <xsl:text>                throw new Error("Unknown index "+index);
   801 </xsl:text>
   829 </xsl:text>
   802     <xsl:text>            }
   830     <xsl:text>            }
   803 </xsl:text>
   831 </xsl:text>
   804     <xsl:text>        };
   832     <xsl:text>        };
       
   833 </xsl:text>
       
   834     <xsl:text>        // register for rendering on next frame, since there are updates
       
   835 </xsl:text>
       
   836     <xsl:text>        window.requestAnimationFrame(apply_pending_updates);
   805 </xsl:text>
   837 </xsl:text>
   806     <xsl:text>    } catch(err) {
   838     <xsl:text>    } catch(err) {
   807 </xsl:text>
   839 </xsl:text>
   808     <xsl:text>        // 1003 is for "Unsupported Data"
   840     <xsl:text>        // 1003 is for "Unsupported Data"
   809 </xsl:text>
   841 </xsl:text>