svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2903 881d0248b3ce
parent 2902 1fcb50af0335
child 2904 92d115d8828d
equal deleted inserted replaced
2902:1fcb50af0335 2903:881d0248b3ce
   402       <xsl:text>
   402       <xsl:text>
   403 </xsl:text>
   403 </xsl:text>
   404     </xsl:for-each>
   404     </xsl:for-each>
   405     <xsl:text>    ],
   405     <xsl:text>    ],
   406 </xsl:text>
   406 </xsl:text>
       
   407     <xsl:text>    jumps: [
       
   408 </xsl:text>
       
   409     <xsl:for-each select="$parsed_widgets/widget[@id = $all_page_widgets/@id and @type='Jump']">
       
   410       <xsl:variable name="_id" select="@id"/>
       
   411       <xsl:variable name="opts">
       
   412         <xsl:call-template name="jump_widget_activity">
       
   413           <xsl:with-param name="hmi_element" select="$hmi_elements[@id=$_id]"/>
       
   414         </xsl:call-template>
       
   415       </xsl:variable>
       
   416       <xsl:if test="string-length($opts)&gt;0">
       
   417         <xsl:text>        hmi_widgets["</xsl:text>
       
   418         <xsl:value-of select="@id"/>
       
   419         <xsl:text>"]</xsl:text>
       
   420         <xsl:if test="position()!=last()">
       
   421           <xsl:text>,</xsl:text>
       
   422         </xsl:if>
       
   423         <xsl:text>
       
   424 </xsl:text>
       
   425       </xsl:if>
       
   426     </xsl:for-each>
       
   427     <xsl:text>    ],
       
   428 </xsl:text>
   407     <xsl:text>    required_detachables: {
   429     <xsl:text>    required_detachables: {
   408 </xsl:text>
   430 </xsl:text>
   409     <xsl:for-each select="$required_detachables">
   431     <xsl:for-each select="$required_detachables">
   410       <xsl:text>        "</xsl:text>
   432       <xsl:text>        "</xsl:text>
   411       <xsl:value-of select="@id"/>
   433       <xsl:value-of select="@id"/>
   909 </xsl:text>
   931 </xsl:text>
   910     </xsl:for-each>
   932     </xsl:for-each>
   911     <xsl:text>    },
   933     <xsl:text>    },
   912 </xsl:text>
   934 </xsl:text>
   913   </xsl:template>
   935   </xsl:template>
       
   936   <xsl:template name="jump_widget_activity">
       
   937     <xsl:param name="hmi_element"/>
       
   938     <xsl:call-template name="defs_by_labels">
       
   939       <xsl:with-param name="hmi_element" select="$hmi_element"/>
       
   940       <xsl:with-param name="labels">
       
   941         <xsl:text>active inactive</xsl:text>
       
   942       </xsl:with-param>
       
   943       <xsl:with-param name="mandatory" select="'no'"/>
       
   944     </xsl:call-template>
       
   945   </xsl:template>
   914   <xsl:template mode="widget_defs" match="widget[@type='Jump']">
   946   <xsl:template mode="widget_defs" match="widget[@type='Jump']">
   915     <xsl:param name="hmi_element"/>
   947     <xsl:param name="hmi_element"/>
       
   948     <xsl:variable name="opts">
       
   949       <xsl:call-template name="jump_widget_activity">
       
   950         <xsl:with-param name="hmi_element" select="$hmi_element"/>
       
   951       </xsl:call-template>
       
   952     </xsl:variable>
       
   953     <xsl:variable name="have_opt" select="string-length($opts)&gt;0"/>
       
   954     <xsl:value-of select="$opts"/>
   916     <xsl:text>    on_click: function(evt) {
   955     <xsl:text>    on_click: function(evt) {
   917 </xsl:text>
   956 </xsl:text>
   918     <xsl:text>        const index = this.indexes.length &gt; 0 ? this.indexes[0] + this.offset : undefined;
   957     <xsl:text>        const index = this.indexes.length &gt; 0 ? this.indexes[0] + this.offset : undefined;
   919 </xsl:text>
   958 </xsl:text>
   920     <xsl:text>        const name = this.args[0];
   959     <xsl:text>        const name = this.args[0];
   921 </xsl:text>
   960 </xsl:text>
   922     <xsl:text>        switch_page(name, index);
   961     <xsl:text>        switch_page(name, index);
   923 </xsl:text>
   962 </xsl:text>
   924     <xsl:text>    },
   963     <xsl:text>    },
   925 </xsl:text>
   964 </xsl:text>
       
   965     <xsl:if test="$have_opt">
       
   966       <xsl:text>    notify_page_change: function(page_name, index){
       
   967 </xsl:text>
       
   968       <xsl:text>        const ref_index = this.indexes.length &gt; 0 ? this.indexes[0] + this.offset : undefined;
       
   969 </xsl:text>
       
   970       <xsl:text>        const ref_name = this.args[0];
       
   971 </xsl:text>
       
   972       <xsl:text>        if((ref_name == undefined || ref_name == page_name) &amp;&amp; index == ref_index) {
       
   973 </xsl:text>
       
   974       <xsl:text>             console.log("active", ref_name, ref_index, page_name, index);
       
   975 </xsl:text>
       
   976       <xsl:text>             /* show active */ 
       
   977 </xsl:text>
       
   978       <xsl:text>             this.active_elt.setAttribute("style", this.active_elt_style);
       
   979 </xsl:text>
       
   980       <xsl:text>             /* hide inactive */ 
       
   981 </xsl:text>
       
   982       <xsl:text>             this.inactive_elt.setAttribute("style", "display:none");
       
   983 </xsl:text>
       
   984       <xsl:text>        } else {
       
   985 </xsl:text>
       
   986       <xsl:text>             console.log("inactive",ref_name, ref_index,  page_name, index);
       
   987 </xsl:text>
       
   988       <xsl:text>             /* show inactive */ 
       
   989 </xsl:text>
       
   990       <xsl:text>             this.inactive_elt.setAttribute("style", this.inactive_elt_style);
       
   991 </xsl:text>
       
   992       <xsl:text>             /* hide active */ 
       
   993 </xsl:text>
       
   994       <xsl:text>             this.active_elt.setAttribute("style", "display:none");
       
   995 </xsl:text>
       
   996       <xsl:text>        }
       
   997 </xsl:text>
       
   998       <xsl:text>    },
       
   999 </xsl:text>
       
  1000     </xsl:if>
   926     <xsl:text>    init: function() {
  1001     <xsl:text>    init: function() {
   927 </xsl:text>
  1002 </xsl:text>
   928     <xsl:text>        this.element.setAttribute("onclick", "hmi_widgets['</xsl:text>
  1003     <xsl:text>        this.element.setAttribute("onclick", "hmi_widgets['</xsl:text>
   929     <xsl:value-of select="$hmi_element/@id"/>
  1004     <xsl:value-of select="$hmi_element/@id"/>
   930     <xsl:text>'].on_click(evt)");
  1005     <xsl:text>'].on_click(evt)");
   931 </xsl:text>
  1006 </xsl:text>
       
  1007     <xsl:if test="$have_opt">
       
  1008       <xsl:text>        this.active_elt_style = this.active_elt.getAttribute("style");
       
  1009 </xsl:text>
       
  1010       <xsl:text>        this.inactive_elt_style = this.inactive_elt.getAttribute("style");
       
  1011 </xsl:text>
       
  1012     </xsl:if>
   932     <xsl:text>    },
  1013     <xsl:text>    },
   933 </xsl:text>
  1014 </xsl:text>
   934   </xsl:template>
  1015   </xsl:template>
   935   <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']">
  1016   <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']">
   936     <xsl:param name="page_desc"/>
  1017     <xsl:param name="page_desc"/>
  1222 </xsl:text>
  1303 </xsl:text>
  1223     <xsl:text>var updates = {};
  1304     <xsl:text>var updates = {};
  1224 </xsl:text>
  1305 </xsl:text>
  1225     <xsl:text>var need_cache_apply = []; 
  1306     <xsl:text>var need_cache_apply = []; 
  1226 </xsl:text>
  1307 </xsl:text>
       
  1308     <xsl:text>var jumps_need_update = false;
       
  1309 </xsl:text>
  1227     <xsl:text>var jump_history = [[default_page, undefined]];
  1310     <xsl:text>var jump_history = [[default_page, undefined]];
  1228 </xsl:text>
  1311 </xsl:text>
  1229     <xsl:text>
  1312     <xsl:text>
  1230 </xsl:text>
  1313 </xsl:text>
  1231     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
  1314     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
  1402 </xsl:text>
  1485 </xsl:text>
  1403     <xsl:text>    }
  1486     <xsl:text>    }
  1404 </xsl:text>
  1487 </xsl:text>
  1405     <xsl:text>
  1488     <xsl:text>
  1406 </xsl:text>
  1489 </xsl:text>
       
  1490     <xsl:text>    if(jumps_need_update) update_jumps();
       
  1491 </xsl:text>
       
  1492     <xsl:text>
       
  1493 </xsl:text>
  1407     <xsl:text>    apply_updates();
  1494     <xsl:text>    apply_updates();
  1408 </xsl:text>
  1495 </xsl:text>
  1409     <xsl:text>    requestAnimationFrameID = null;
  1496     <xsl:text>    requestAnimationFrameID = null;
  1410 </xsl:text>
  1497 </xsl:text>
  1411     <xsl:text>}
  1498     <xsl:text>}
  1736 </xsl:text>
  1823 </xsl:text>
  1737     <xsl:text>var current_visible_page;
  1824     <xsl:text>var current_visible_page;
  1738 </xsl:text>
  1825 </xsl:text>
  1739     <xsl:text>var current_subscribed_page;
  1826     <xsl:text>var current_subscribed_page;
  1740 </xsl:text>
  1827 </xsl:text>
       
  1828     <xsl:text>var current_page_index;
       
  1829 </xsl:text>
  1741     <xsl:text>
  1830     <xsl:text>
  1742 </xsl:text>
  1831 </xsl:text>
  1743     <xsl:text>function prepare_svg() {
  1832     <xsl:text>function prepare_svg() {
  1744 </xsl:text>
  1833 </xsl:text>
  1745     <xsl:text>    for(let eltid in detachable_elements){
  1834     <xsl:text>    for(let eltid in detachable_elements){
  1772 </xsl:text>
  1861 </xsl:text>
  1773     <xsl:text>        page_name = current_subscribed_page;
  1862     <xsl:text>        page_name = current_subscribed_page;
  1774 </xsl:text>
  1863 </xsl:text>
  1775     <xsl:text>
  1864     <xsl:text>
  1776 </xsl:text>
  1865 </xsl:text>
  1777     <xsl:text>    return switch_subscribed_page(page_name, page_index);
  1866     <xsl:text>
       
  1867 </xsl:text>
       
  1868     <xsl:text>    let old_desc = page_desc[current_subscribed_page];
       
  1869 </xsl:text>
       
  1870     <xsl:text>    let new_desc = page_desc[page_name];
       
  1871 </xsl:text>
       
  1872     <xsl:text>
       
  1873 </xsl:text>
       
  1874     <xsl:text>    if(new_desc == undefined){
       
  1875 </xsl:text>
       
  1876     <xsl:text>        /* TODO LOG ERROR */
       
  1877 </xsl:text>
       
  1878     <xsl:text>        return false;
       
  1879 </xsl:text>
       
  1880     <xsl:text>    }
       
  1881 </xsl:text>
       
  1882     <xsl:text>
       
  1883 </xsl:text>
       
  1884     <xsl:text>    if(page_index == undefined){
       
  1885 </xsl:text>
       
  1886     <xsl:text>        page_index = new_desc.page_index;
       
  1887 </xsl:text>
       
  1888     <xsl:text>    }
       
  1889 </xsl:text>
       
  1890     <xsl:text>
       
  1891 </xsl:text>
       
  1892     <xsl:text>    if(old_desc){
       
  1893 </xsl:text>
       
  1894     <xsl:text>        old_desc.absolute_widgets.map(w=&gt;w.unsub());
       
  1895 </xsl:text>
       
  1896     <xsl:text>        old_desc.relative_widgets.map(w=&gt;w.unsub());
       
  1897 </xsl:text>
       
  1898     <xsl:text>    }
       
  1899 </xsl:text>
       
  1900     <xsl:text>    new_desc.absolute_widgets.map(w=&gt;w.sub());
       
  1901 </xsl:text>
       
  1902     <xsl:text>    var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
       
  1903 </xsl:text>
       
  1904     <xsl:text>    new_desc.relative_widgets.map(w=&gt;w.sub(new_offset));
       
  1905 </xsl:text>
       
  1906     <xsl:text>
       
  1907 </xsl:text>
       
  1908     <xsl:text>    update_subscriptions();
       
  1909 </xsl:text>
       
  1910     <xsl:text>
       
  1911 </xsl:text>
       
  1912     <xsl:text>    current_subscribed_page = page_name;
       
  1913 </xsl:text>
       
  1914     <xsl:text>    current_page_index = page_index;
       
  1915 </xsl:text>
       
  1916     <xsl:text>
       
  1917 </xsl:text>
       
  1918     <xsl:text>    jumps_need_update = true;
       
  1919 </xsl:text>
       
  1920     <xsl:text>
       
  1921 </xsl:text>
       
  1922     <xsl:text>    requestHMIAnimation();
       
  1923 </xsl:text>
       
  1924     <xsl:text>
       
  1925 </xsl:text>
       
  1926     <xsl:text>    jump_history.push([page_name, page_index]);
       
  1927 </xsl:text>
       
  1928     <xsl:text>
       
  1929 </xsl:text>
       
  1930     <xsl:text>    return true;
  1778 </xsl:text>
  1931 </xsl:text>
  1779     <xsl:text>};
  1932     <xsl:text>};
  1780 </xsl:text>
  1933 </xsl:text>
  1781     <xsl:text>
  1934     <xsl:text>
  1782 </xsl:text>
  1935 </xsl:text>
  1944 </xsl:text>
  2097 </xsl:text>
  1945     <xsl:text>    update_subscriptions();
  2098     <xsl:text>    update_subscriptions();
  1946 </xsl:text>
  2099 </xsl:text>
  1947     <xsl:text>    need_cache_apply.push(this);
  2100     <xsl:text>    need_cache_apply.push(this);
  1948 </xsl:text>
  2101 </xsl:text>
       
  2102     <xsl:text>    jumps_need_update = true;
       
  2103 </xsl:text>
  1949     <xsl:text>    requestHMIAnimation();
  2104     <xsl:text>    requestHMIAnimation();
  1950 </xsl:text>
  2105 </xsl:text>
  1951     <xsl:text>    console.log(opstr, new_item_offset);
  2106     <xsl:text>    console.log(opstr, new_item_offset);
  1952 </xsl:text>
  2107 </xsl:text>
  1953     <xsl:text>}
  2108     <xsl:text>}
  1954 </xsl:text>
  2109 </xsl:text>
  1955     <xsl:text>
  2110     <xsl:text>
  1956 </xsl:text>
  2111 </xsl:text>
  1957     <xsl:text>function switch_subscribed_page(page_name, page_index) {
  2112     <xsl:text>
  1958 </xsl:text>
  2113 </xsl:text>
  1959     <xsl:text>    let old_desc = page_desc[current_subscribed_page];
  2114     <xsl:text>function switch_visible_page(page_name) {
       
  2115 </xsl:text>
       
  2116     <xsl:text>
       
  2117 </xsl:text>
       
  2118     <xsl:text>    let old_desc = page_desc[current_visible_page];
  1960 </xsl:text>
  2119 </xsl:text>
  1961     <xsl:text>    let new_desc = page_desc[page_name];
  2120     <xsl:text>    let new_desc = page_desc[page_name];
  1962 </xsl:text>
  2121 </xsl:text>
  1963     <xsl:text>
  2122     <xsl:text>
  1964 </xsl:text>
  2123 </xsl:text>
  1965     <xsl:text>    if(new_desc == undefined){
       
  1966 </xsl:text>
       
  1967     <xsl:text>        /* TODO LOG ERROR */
       
  1968 </xsl:text>
       
  1969     <xsl:text>        return false;
       
  1970 </xsl:text>
       
  1971     <xsl:text>    }
       
  1972 </xsl:text>
       
  1973     <xsl:text>
       
  1974 </xsl:text>
       
  1975     <xsl:text>    if(page_index == undefined){
       
  1976 </xsl:text>
       
  1977     <xsl:text>        page_index = new_desc.page_index;
       
  1978 </xsl:text>
       
  1979     <xsl:text>    }
       
  1980 </xsl:text>
       
  1981     <xsl:text>
       
  1982 </xsl:text>
       
  1983     <xsl:text>    if(old_desc){
  2124     <xsl:text>    if(old_desc){
  1984 </xsl:text>
  2125 </xsl:text>
  1985     <xsl:text>        old_desc.absolute_widgets.map(w=&gt;w.unsub());
       
  1986 </xsl:text>
       
  1987     <xsl:text>        old_desc.relative_widgets.map(w=&gt;w.unsub());
       
  1988 </xsl:text>
       
  1989     <xsl:text>    }
       
  1990 </xsl:text>
       
  1991     <xsl:text>    new_desc.absolute_widgets.map(w=&gt;w.sub());
       
  1992 </xsl:text>
       
  1993     <xsl:text>    var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
       
  1994 </xsl:text>
       
  1995     <xsl:text>    new_desc.relative_widgets.map(w=&gt;w.sub(new_offset));
       
  1996 </xsl:text>
       
  1997     <xsl:text>
       
  1998 </xsl:text>
       
  1999     <xsl:text>    update_subscriptions();
       
  2000 </xsl:text>
       
  2001     <xsl:text>
       
  2002 </xsl:text>
       
  2003     <xsl:text>    current_subscribed_page = page_name;
       
  2004 </xsl:text>
       
  2005     <xsl:text>
       
  2006 </xsl:text>
       
  2007     <xsl:text>    requestHMIAnimation();
       
  2008 </xsl:text>
       
  2009     <xsl:text>
       
  2010 </xsl:text>
       
  2011     <xsl:text>    jump_history.push([page_name, page_index]);
       
  2012 </xsl:text>
       
  2013     <xsl:text>
       
  2014 </xsl:text>
       
  2015     <xsl:text>    return true;
       
  2016 </xsl:text>
       
  2017     <xsl:text>}
       
  2018 </xsl:text>
       
  2019     <xsl:text>
       
  2020 </xsl:text>
       
  2021     <xsl:text>function switch_visible_page(page_name) {
       
  2022 </xsl:text>
       
  2023     <xsl:text>
       
  2024 </xsl:text>
       
  2025     <xsl:text>    let old_desc = page_desc[current_visible_page];
       
  2026 </xsl:text>
       
  2027     <xsl:text>    let new_desc = page_desc[page_name];
       
  2028 </xsl:text>
       
  2029     <xsl:text>
       
  2030 </xsl:text>
       
  2031     <xsl:text>    if(old_desc){
       
  2032 </xsl:text>
       
  2033     <xsl:text>        for(let eltid in old_desc.required_detachables){
  2126     <xsl:text>        for(let eltid in old_desc.required_detachables){
  2034 </xsl:text>
  2127 </xsl:text>
  2035     <xsl:text>            if(!(eltid in new_desc.required_detachables)){
  2128     <xsl:text>            if(!(eltid in new_desc.required_detachables)){
  2036 </xsl:text>
  2129 </xsl:text>
  2037     <xsl:text>                let [element, parent] = old_desc.required_detachables[eltid];
  2130     <xsl:text>                let [element, parent] = old_desc.required_detachables[eltid];
  2074 </xsl:text>
  2167 </xsl:text>
  2075     <xsl:text>};
  2168     <xsl:text>};
  2076 </xsl:text>
  2169 </xsl:text>
  2077     <xsl:text>
  2170     <xsl:text>
  2078 </xsl:text>
  2171 </xsl:text>
       
  2172     <xsl:text>function update_jumps() {
       
  2173 </xsl:text>
       
  2174     <xsl:text>    page_desc[current_visible_page].jumps.map(w=&gt;w.notify_page_change(current_visible_page,current_page_index));
       
  2175 </xsl:text>
       
  2176     <xsl:text>    jumps_need_update = false;
       
  2177 </xsl:text>
       
  2178     <xsl:text>};
       
  2179 </xsl:text>
       
  2180     <xsl:text>
       
  2181 </xsl:text>
       
  2182     <xsl:text>
       
  2183 </xsl:text>
  2079     <xsl:text>// Once connection established
  2184     <xsl:text>// Once connection established
  2080 </xsl:text>
  2185 </xsl:text>
  2081     <xsl:text>ws.onopen = function (evt) {
  2186     <xsl:text>ws.onopen = function (evt) {
  2082 </xsl:text>
  2187 </xsl:text>
  2083     <xsl:text>    init_widgets();
  2188     <xsl:text>    init_widgets();