svghmi/gen_index_xhtml.ysl2
author Edouard Tisserant
Fri, 03 Apr 2020 09:52:57 +0200
branchsvghmi
changeset 2916 4f3b130fd197
parent 2913 ac4328e69079
child 2937 9226a830fbc3
permissions -rw-r--r--
SVGHMI: fix keyboard not showing
include yslt_noindent.yml2

// overrides yslt's output function to set CDATA
decl output(method, cdata-section-elements="xhtml:script");

in xsl decl labels(*ptr, name="defs_by_labels") alias call-template {
    with "hmi_element", "$hmi_element";
    with "labels"{text *ptr};
};

in xsl decl optional_labels(*ptr, name="defs_by_labels") alias call-template {
    with "hmi_element", "$hmi_element";
    with "labels"{text *ptr};
    with "mandatory","'no'";
};

in xsl decl svgtmpl(match, xmlns="http://www.w3.org/2000/svg") alias template;
in xsl decl svgfunc(name, xmlns="http://www.w3.org/2000/svg") alias template;

istylesheet
            /* From Inkscape */
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:cc="http://creativecommons.org/ns#"
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:svg="http://www.w3.org/2000/svg"
            xmlns:xlink="http://www.w3.org/1999/xlink"
            xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
            xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
            xmlns:xhtml="http://www.w3.org/1999/xhtml"
            xmlns:reflect="reflect"

            /* Our namespace to invoke python code */
            xmlns:ns="beremiz"
            extension-element-prefixes="ns func exsl regexp str dyn"
            exclude-result-prefixes="ns str regexp exsl func dyn reflect" {


    const "hmi_elements", "//svg:*[starts-with(@inkscape:label, 'HMI:')]";

    include hmi_tree.ysl2

    include geometry.ysl2

    include detachable_pages.ysl2

    include inline_svg.ysl2

    include widgets_common.ysl2

    include widget_*.ysl2

    template "*[namespace-uri()='reflect']", mode="debug_as_comment" {
        comment {
            | «local-name()» :
            apply ".", mode="debug";
        }
    }

    template "/" {
        comment > Made with SVGHMI. https://beremiz.org

        // all debug output from included definitions, as comments
        // apply "document('')/*/reflect:*", mode="debug_as_comment";

        html xmlns="http://www.w3.org/1999/xhtml"
             xmlns:svg="http://www.w3.org/2000/svg"
             xmlns:xlink="http://www.w3.org/1999/xlink" {
            head;
            body style="margin:0;overflow:hidden;" {
                // Inline SVG
                copy "$result_svg";
                script{
                    call "scripts";
                }
            }
        }
    }

    function "scripts"
    {
        |
        | id = idstr => document.getElementById(idstr);
        |
        | var hmi_hash = [«$hmitree/@hash»]; 

        | var hmi_widgets = {
        apply "$hmi_elements", mode="hmi_elements";
        | }
        |
        | var heartbeat_index = «$indexed_hmitree/*[@hmipath = '/HEARTBEAT']/@index»;
        |
        | var hmitree_types = [

        foreach "$indexed_hmitree/*" {
        |     /* «@index»  «@hmipath» */ "«substring(local-name(), 5)»"`if "position()!=last()" > ,`
        }

        | ]
        |

        | var detachable_elements = {
        foreach "$detachable_elements"{
        |     "«@id»":[id("«@id»"), id("«../@id»")]`if "position()!=last()" > ,`
        }
        | }

        |
        | var page_desc = {
        apply "$hmi_pages", mode="page_desc";
        | }

        | var keypads = {
        foreach "$keypads_descs"{
            const "keypad_id","@id";
            foreach "arg"{
                const "g", "$geometry[@Id = $keypad_id]"; 
        |     "«@value»":["«$keypad_id»", «$g/@x», «$g/@y»],
            }
        }
        | }


        |
        | var default_page = "«$default_page»";
        | var svg_root = id("«/svg:svg/@id»");
        include text svghmi.js
    }
}