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) { |
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 => 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 => 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> |