svghmi/gen_index_xhtml.xslt
branchsvghmi
changeset 2897 bf8a39cc65e4
parent 2896 99c5335ed59f
child 2898 a2910281fcb5
equal deleted inserted replaced
2896:99c5335ed59f 2897:bf8a39cc65e4
   633   <xsl:template mode="widget_subscribe" match="widget">
   633   <xsl:template mode="widget_subscribe" match="widget">
   634     <xsl:text>    sub: subscribe,
   634     <xsl:text>    sub: subscribe,
   635 </xsl:text>
   635 </xsl:text>
   636     <xsl:text>    unsub: unsubscribe,
   636     <xsl:text>    unsub: unsubscribe,
   637 </xsl:text>
   637 </xsl:text>
       
   638     <xsl:text>    apply_cache: widget_apply_cache,
       
   639 </xsl:text>
   638   </xsl:template>
   640   </xsl:template>
   639   <xsl:template mode="widget_subscribe" match="widget[@type='Page']"/>
   641   <xsl:template mode="widget_subscribe" match="widget[@type='Page']"/>
   640   <xsl:template name="defs_by_labels">
   642   <xsl:template name="defs_by_labels">
   641     <xsl:param name="labels" select="''"/>
   643     <xsl:param name="labels" select="''"/>
   642     <xsl:param name="mandatory" select="'yes'"/>
   644     <xsl:param name="mandatory" select="'yes'"/>
   796     </xsl:for-each>
   798     </xsl:for-each>
   797     <xsl:text>        ]
   799     <xsl:text>        ]
   798 </xsl:text>
   800 </xsl:text>
   799     <xsl:text>    },
   801     <xsl:text>    },
   800 </xsl:text>
   802 </xsl:text>
   801     <xsl:text>    on_click: function(opstr, evt) {
       
   802 </xsl:text>
       
   803     <xsl:text>        console.log(opstr);
       
   804 </xsl:text>
       
   805     <xsl:text>    },
       
   806 </xsl:text>
       
   807     <xsl:text>    item_offset: 0,
   803     <xsl:text>    item_offset: 0,
   808 </xsl:text>
   804 </xsl:text>
       
   805     <xsl:text>    on_click: foreach_onclick,
       
   806 </xsl:text>
   809   </xsl:template>
   807   </xsl:template>
   810   <xsl:template mode="widget_subscribe" match="widget[@type='ForEach']">
   808   <xsl:template mode="widget_subscribe" match="widget[@type='ForEach']">
   811     <xsl:text>    sub: function(off){
   809     <xsl:text>    sub: foreach_subscribe,
   812 </xsl:text>
   810 </xsl:text>
   813     <xsl:text>        foreach_subscribe.call(this,off);
   811     <xsl:text>    unsub: foreach_unsubscribe,
   814 </xsl:text>
   812 </xsl:text>
   815     <xsl:text>    },
   813     <xsl:text>    apply_cache: foreach_apply_cache,
   816 </xsl:text>
       
   817     <xsl:text>    unsub: function(){
       
   818 </xsl:text>
       
   819     <xsl:text>        foreach_unsubscribe.call(this);
       
   820 </xsl:text>
       
   821     <xsl:text>    },
       
   822 </xsl:text>
   814 </xsl:text>
   823   </xsl:template>
   815   </xsl:template>
   824   <xsl:template mode="widget_defs" match="widget[@type='Input']">
   816   <xsl:template mode="widget_defs" match="widget[@type='Input']">
   825     <xsl:param name="hmi_element"/>
   817     <xsl:param name="hmi_element"/>
   826     <xsl:variable name="value_elt">
   818     <xsl:variable name="value_elt">
  1147 </xsl:text>
  1139 </xsl:text>
  1148     <xsl:text>var cache = hmitree_types.map(_ignored =&gt; undefined);
  1140     <xsl:text>var cache = hmitree_types.map(_ignored =&gt; undefined);
  1149 </xsl:text>
  1141 </xsl:text>
  1150     <xsl:text>var updates = {};
  1142     <xsl:text>var updates = {};
  1151 </xsl:text>
  1143 </xsl:text>
       
  1144     <xsl:text>var need_cache_apply = []; 
       
  1145 </xsl:text>
  1152     <xsl:text>
  1146     <xsl:text>
  1153 </xsl:text>
  1147 </xsl:text>
  1154     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
  1148     <xsl:text>function dispatch_value_to_widget(widget, index, value, oldval) {
  1155 </xsl:text>
  1149 </xsl:text>
  1156     <xsl:text>    try {
  1150     <xsl:text>    try {
  1317 </xsl:text>
  1311 </xsl:text>
  1318     <xsl:text>    }
  1312     <xsl:text>    }
  1319 </xsl:text>
  1313 </xsl:text>
  1320     <xsl:text>
  1314     <xsl:text>
  1321 </xsl:text>
  1315 </xsl:text>
  1322     <xsl:text>    if(current_subscribed_page_index != current_visible_page_index){
  1316     <xsl:text>    while(widget = need_cache_apply.pop()){
  1323 </xsl:text>
  1317 </xsl:text>
  1324     <xsl:text>        apply_cache();
  1318     <xsl:text>        widget.apply_cache();
  1325 </xsl:text>
  1319 </xsl:text>
  1326     <xsl:text>    }
  1320     <xsl:text>    }
       
  1321 </xsl:text>
       
  1322     <xsl:text>
  1327 </xsl:text>
  1323 </xsl:text>
  1328     <xsl:text>    apply_updates();
  1324     <xsl:text>    apply_updates();
  1329 </xsl:text>
  1325 </xsl:text>
  1330     <xsl:text>    requestAnimationFrameID = null;
  1326     <xsl:text>    requestAnimationFrameID = null;
  1331 </xsl:text>
  1327 </xsl:text>
  1657 </xsl:text>
  1653 </xsl:text>
  1658     <xsl:text>var current_visible_page;
  1654     <xsl:text>var current_visible_page;
  1659 </xsl:text>
  1655 </xsl:text>
  1660     <xsl:text>var current_subscribed_page;
  1656     <xsl:text>var current_subscribed_page;
  1661 </xsl:text>
  1657 </xsl:text>
  1662     <xsl:text>var current_visible_page_index;
       
  1663 </xsl:text>
       
  1664     <xsl:text>var current_subscribed_page_index;
       
  1665 </xsl:text>
       
  1666     <xsl:text>
  1658     <xsl:text>
  1667 </xsl:text>
  1659 </xsl:text>
  1668     <xsl:text>function prepare_svg() {
  1660     <xsl:text>function prepare_svg() {
  1669 </xsl:text>
  1661 </xsl:text>
  1670     <xsl:text>    for(let eltid in detachable_elements){
  1662     <xsl:text>    for(let eltid in detachable_elements){
  1745 </xsl:text>
  1737 </xsl:text>
  1746     <xsl:text>        subscribers[index + new_offset].add(this);
  1738     <xsl:text>        subscribers[index + new_offset].add(this);
  1747 </xsl:text>
  1739 </xsl:text>
  1748     <xsl:text>    }
  1740     <xsl:text>    }
  1749 </xsl:text>
  1741 </xsl:text>
       
  1742     <xsl:text>    need_cache_apply.push(this); 
       
  1743 </xsl:text>
  1750     <xsl:text>}
  1744     <xsl:text>}
  1751 </xsl:text>
  1745 </xsl:text>
  1752     <xsl:text>
  1746     <xsl:text>
  1753 </xsl:text>
  1747 </xsl:text>
  1754     <xsl:text>function foreach_unsubscribe(){
  1748     <xsl:text>function foreach_unsubscribe(){
  1761 </xsl:text>
  1755 </xsl:text>
  1762     <xsl:text>        }
  1756     <xsl:text>        }
  1763 </xsl:text>
  1757 </xsl:text>
  1764     <xsl:text>    }
  1758     <xsl:text>    }
  1765 </xsl:text>
  1759 </xsl:text>
       
  1760     <xsl:text>    this.offset = 0;
       
  1761 </xsl:text>
  1766     <xsl:text>}
  1762     <xsl:text>}
  1767 </xsl:text>
  1763 </xsl:text>
  1768     <xsl:text>
  1764     <xsl:text>
  1769 </xsl:text>
  1765 </xsl:text>
       
  1766     <xsl:text>function foreach_widgets_do(new_offset, todo){
       
  1767 </xsl:text>
       
  1768     <xsl:text>    this.offset = new_offset;
       
  1769 </xsl:text>
       
  1770     <xsl:text>    for(let i = 0; i &lt; this.items.length; i++) {
       
  1771 </xsl:text>
       
  1772     <xsl:text>        let item = this.items[i];
       
  1773 </xsl:text>
       
  1774     <xsl:text>        let orig_item_index = this.index_pool[i];
       
  1775 </xsl:text>
       
  1776     <xsl:text>        let item_index = this.index_pool[i+this.item_offset];
       
  1777 </xsl:text>
       
  1778     <xsl:text>        let item_index_offset = item_index - orig_item_index;
       
  1779 </xsl:text>
       
  1780     <xsl:text>        for(let widget of item) {
       
  1781 </xsl:text>
       
  1782     <xsl:text>            todo.call(widget, new_offset + item_index_offset);
       
  1783 </xsl:text>
       
  1784     <xsl:text>        }
       
  1785 </xsl:text>
       
  1786     <xsl:text>    }
       
  1787 </xsl:text>
       
  1788     <xsl:text>}
       
  1789 </xsl:text>
       
  1790     <xsl:text>
       
  1791 </xsl:text>
  1770     <xsl:text>function foreach_subscribe(new_offset=0){
  1792     <xsl:text>function foreach_subscribe(new_offset=0){
  1771 </xsl:text>
  1793 </xsl:text>
  1772     <xsl:text>    for(let i = 0; i &lt; this.items.length; i++) {
  1794     <xsl:text>    foreach_widgets_do.call(this, new_offset, subscribe);
  1773 </xsl:text>
  1795 </xsl:text>
  1774     <xsl:text>        let item = this.items[i];
  1796     <xsl:text>}
  1775 </xsl:text>
  1797 </xsl:text>
  1776     <xsl:text>        let orig_item_index = this.index_pool[i];
  1798     <xsl:text>
  1777 </xsl:text>
  1799 </xsl:text>
  1778     <xsl:text>        let item_index = this.index_pool[i+this.item_offset];
  1800     <xsl:text>function widget_apply_cache() {
  1779 </xsl:text>
  1801 </xsl:text>
  1780     <xsl:text>        let item_index_offset = item_index - orig_item_index;
  1802     <xsl:text>    for(let index of this.indexes){
  1781 </xsl:text>
  1803 </xsl:text>
  1782     <xsl:text>        for(let widget of item) {
  1804     <xsl:text>        /* dispatch current cache in newly opened page widgets */
  1783 </xsl:text>
  1805 </xsl:text>
  1784     <xsl:text>            subscribe.call(widget,new_offset + item_index_offset);
  1806     <xsl:text>        let realindex = index+this.offset;
       
  1807 </xsl:text>
       
  1808     <xsl:text>        let cached_val = cache[realindex];
       
  1809 </xsl:text>
       
  1810     <xsl:text>        if(cached_val != undefined)
       
  1811 </xsl:text>
       
  1812     <xsl:text>            dispatch_value_to_widget(this, realindex, cached_val, cached_val);
       
  1813 </xsl:text>
       
  1814     <xsl:text>    }
       
  1815 </xsl:text>
       
  1816     <xsl:text>}
       
  1817 </xsl:text>
       
  1818     <xsl:text>
       
  1819 </xsl:text>
       
  1820     <xsl:text>function foreach_apply_cache() {
       
  1821 </xsl:text>
       
  1822     <xsl:text>    foreach_widgets_do.call(this, this.offset, widget_apply_cache);
       
  1823 </xsl:text>
       
  1824     <xsl:text>}
       
  1825 </xsl:text>
       
  1826     <xsl:text>
       
  1827 </xsl:text>
       
  1828     <xsl:text>function foreach_onclick(opstr, evt) {
       
  1829 </xsl:text>
       
  1830     <xsl:text>    new_item_offset = eval(String(this.item_offset)+opstr)
       
  1831 </xsl:text>
       
  1832     <xsl:text>    if(new_item_offset + this.items.length &gt; this.index_pool.length) {
       
  1833 </xsl:text>
       
  1834     <xsl:text>        new_item_offset = 0;
       
  1835 </xsl:text>
       
  1836     <xsl:text>    } else if(new_item_offset &lt; 0) {
       
  1837 </xsl:text>
       
  1838     <xsl:text>        new_item_offset = this.index_pool.length - this.items.length;
       
  1839 </xsl:text>
       
  1840     <xsl:text>    }
       
  1841 </xsl:text>
       
  1842     <xsl:text>    this.item_offset = new_item_offset;
       
  1843 </xsl:text>
       
  1844     <xsl:text>    off = this.offset;
       
  1845 </xsl:text>
       
  1846     <xsl:text>    foreach_unsubscribe.call(this);
       
  1847 </xsl:text>
       
  1848     <xsl:text>    foreach_subscribe.call(this,off);
       
  1849 </xsl:text>
       
  1850     <xsl:text>    update_subscriptions();
       
  1851 </xsl:text>
       
  1852     <xsl:text>    need_cache_apply.push(this);
       
  1853 </xsl:text>
       
  1854     <xsl:text>    requestHMIAnimation();
       
  1855 </xsl:text>
       
  1856     <xsl:text>    console.log(opstr, new_item_offset);
       
  1857 </xsl:text>
       
  1858     <xsl:text>}
       
  1859 </xsl:text>
       
  1860     <xsl:text>
       
  1861 </xsl:text>
       
  1862     <xsl:text>function switch_subscribed_page(page_name, page_index) {
       
  1863 </xsl:text>
       
  1864     <xsl:text>    let old_desc = page_desc[current_subscribed_page];
       
  1865 </xsl:text>
       
  1866     <xsl:text>    let new_desc = page_desc[page_name];
       
  1867 </xsl:text>
       
  1868     <xsl:text>
       
  1869 </xsl:text>
       
  1870     <xsl:text>    if(new_desc == undefined){
       
  1871 </xsl:text>
       
  1872     <xsl:text>        /* TODO LOG ERROR */
       
  1873 </xsl:text>
       
  1874     <xsl:text>        return;
       
  1875 </xsl:text>
       
  1876     <xsl:text>    }
       
  1877 </xsl:text>
       
  1878     <xsl:text>
       
  1879 </xsl:text>
       
  1880     <xsl:text>    if(page_index == undefined){
       
  1881 </xsl:text>
       
  1882     <xsl:text>        page_index = new_desc.page_index;
       
  1883 </xsl:text>
       
  1884     <xsl:text>    }
       
  1885 </xsl:text>
       
  1886     <xsl:text>
       
  1887 </xsl:text>
       
  1888     <xsl:text>    if(old_desc){
       
  1889 </xsl:text>
       
  1890     <xsl:text>        old_desc.absolute_widgets.map(w=&gt;w.unsub());
       
  1891 </xsl:text>
       
  1892     <xsl:text>        old_desc.relative_widgets.map(w=&gt;w.unsub());
       
  1893 </xsl:text>
       
  1894     <xsl:text>    }
       
  1895 </xsl:text>
       
  1896     <xsl:text>    new_desc.absolute_widgets.map(w=&gt;w.sub());
       
  1897 </xsl:text>
       
  1898     <xsl:text>    var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
       
  1899 </xsl:text>
       
  1900     <xsl:text>    new_desc.relative_widgets.map(w=&gt;w.sub(new_offset));
       
  1901 </xsl:text>
       
  1902     <xsl:text>
       
  1903 </xsl:text>
       
  1904     <xsl:text>    update_subscriptions();
       
  1905 </xsl:text>
       
  1906     <xsl:text>
       
  1907 </xsl:text>
       
  1908     <xsl:text>    current_subscribed_page = page_name;
       
  1909 </xsl:text>
       
  1910     <xsl:text>
       
  1911 </xsl:text>
       
  1912     <xsl:text>    requestHMIAnimation();
       
  1913 </xsl:text>
       
  1914     <xsl:text>}
       
  1915 </xsl:text>
       
  1916     <xsl:text>
       
  1917 </xsl:text>
       
  1918     <xsl:text>function switch_visible_page(page_name) {
       
  1919 </xsl:text>
       
  1920     <xsl:text>
       
  1921 </xsl:text>
       
  1922     <xsl:text>    let old_desc = page_desc[current_visible_page];
       
  1923 </xsl:text>
       
  1924     <xsl:text>    let new_desc = page_desc[page_name];
       
  1925 </xsl:text>
       
  1926     <xsl:text>
       
  1927 </xsl:text>
       
  1928     <xsl:text>    if(old_desc){
       
  1929 </xsl:text>
       
  1930     <xsl:text>        for(let eltid in old_desc.required_detachables){
       
  1931 </xsl:text>
       
  1932     <xsl:text>            if(!(eltid in new_desc.required_detachables)){
       
  1933 </xsl:text>
       
  1934     <xsl:text>                let [element, parent] = old_desc.required_detachables[eltid];
       
  1935 </xsl:text>
       
  1936     <xsl:text>                parent.removeChild(element);
       
  1937 </xsl:text>
       
  1938     <xsl:text>            }
  1785 </xsl:text>
  1939 </xsl:text>
  1786     <xsl:text>        }
  1940     <xsl:text>        }
  1787 </xsl:text>
  1941 </xsl:text>
  1788     <xsl:text>    }
  1942     <xsl:text>        for(let eltid in new_desc.required_detachables){
  1789 </xsl:text>
  1943 </xsl:text>
  1790     <xsl:text>}
  1944     <xsl:text>            if(!(eltid in old_desc.required_detachables)){
  1791 </xsl:text>
  1945 </xsl:text>
  1792     <xsl:text>
  1946     <xsl:text>                let [element, parent] = new_desc.required_detachables[eltid];
  1793 </xsl:text>
  1947 </xsl:text>
  1794     <xsl:text>function switch_subscribed_page(page_name, page_index) {
  1948     <xsl:text>                parent.appendChild(element);
  1795 </xsl:text>
       
  1796     <xsl:text>    let old_desc = page_desc[current_subscribed_page];
       
  1797 </xsl:text>
       
  1798     <xsl:text>    let new_desc = page_desc[page_name];
       
  1799 </xsl:text>
       
  1800     <xsl:text>
       
  1801 </xsl:text>
       
  1802     <xsl:text>    if(new_desc == undefined){
       
  1803 </xsl:text>
       
  1804     <xsl:text>        /* TODO LOG ERROR */
       
  1805 </xsl:text>
       
  1806     <xsl:text>        return;
       
  1807 </xsl:text>
       
  1808     <xsl:text>    }
       
  1809 </xsl:text>
       
  1810     <xsl:text>
       
  1811 </xsl:text>
       
  1812     <xsl:text>    if(page_index == undefined){
       
  1813 </xsl:text>
       
  1814     <xsl:text>        page_index = new_desc.page_index;
       
  1815 </xsl:text>
       
  1816     <xsl:text>    }
       
  1817 </xsl:text>
       
  1818     <xsl:text>
       
  1819 </xsl:text>
       
  1820     <xsl:text>    if(old_desc){
       
  1821 </xsl:text>
       
  1822     <xsl:text>        old_desc.absolute_widgets.map(w=&gt;w.unsub());
       
  1823 </xsl:text>
       
  1824     <xsl:text>        old_desc.relative_widgets.map(w=&gt;w.unsub());
       
  1825 </xsl:text>
       
  1826     <xsl:text>    }
       
  1827 </xsl:text>
       
  1828     <xsl:text>    new_desc.absolute_widgets.map(w=&gt;w.sub());
       
  1829 </xsl:text>
       
  1830     <xsl:text>    var new_offset = page_index == undefined ? 0 : page_index - new_desc.page_index;
       
  1831 </xsl:text>
       
  1832     <xsl:text>    new_desc.relative_widgets.map(w=&gt;w.sub(new_offset));
       
  1833 </xsl:text>
       
  1834     <xsl:text>
       
  1835 </xsl:text>
       
  1836     <xsl:text>    update_subscriptions();
       
  1837 </xsl:text>
       
  1838     <xsl:text>
       
  1839 </xsl:text>
       
  1840     <xsl:text>    current_subscribed_page = page_name;
       
  1841 </xsl:text>
       
  1842     <xsl:text>    current_subscribed_page_index = page_index;
       
  1843 </xsl:text>
       
  1844     <xsl:text>
       
  1845 </xsl:text>
       
  1846     <xsl:text>    requestHMIAnimation();
       
  1847 </xsl:text>
       
  1848     <xsl:text>}
       
  1849 </xsl:text>
       
  1850     <xsl:text>
       
  1851 </xsl:text>
       
  1852     <xsl:text>function switch_visible_page(page_name) {
       
  1853 </xsl:text>
       
  1854     <xsl:text>
       
  1855 </xsl:text>
       
  1856     <xsl:text>    let old_desc = page_desc[current_visible_page];
       
  1857 </xsl:text>
       
  1858     <xsl:text>    let new_desc = page_desc[page_name];
       
  1859 </xsl:text>
       
  1860     <xsl:text>
       
  1861 </xsl:text>
       
  1862     <xsl:text>    if(old_desc){
       
  1863 </xsl:text>
       
  1864     <xsl:text>        for(let eltid in old_desc.required_detachables){
       
  1865 </xsl:text>
       
  1866     <xsl:text>            if(!(eltid in new_desc.required_detachables)){
       
  1867 </xsl:text>
       
  1868     <xsl:text>                let [element, parent] = old_desc.required_detachables[eltid];
       
  1869 </xsl:text>
       
  1870     <xsl:text>                parent.removeChild(element);
       
  1871 </xsl:text>
  1949 </xsl:text>
  1872     <xsl:text>            }
  1950     <xsl:text>            }
  1873 </xsl:text>
  1951 </xsl:text>
  1874     <xsl:text>        }
  1952     <xsl:text>        }
  1875 </xsl:text>
  1953 </xsl:text>
       
  1954     <xsl:text>    }else{
       
  1955 </xsl:text>
  1876     <xsl:text>        for(let eltid in new_desc.required_detachables){
  1956     <xsl:text>        for(let eltid in new_desc.required_detachables){
  1877 </xsl:text>
  1957 </xsl:text>
  1878     <xsl:text>            if(!(eltid in old_desc.required_detachables)){
  1958     <xsl:text>            let [element, parent] = new_desc.required_detachables[eltid];
  1879 </xsl:text>
  1959 </xsl:text>
  1880     <xsl:text>                let [element, parent] = new_desc.required_detachables[eltid];
  1960     <xsl:text>            parent.appendChild(element);
  1881 </xsl:text>
       
  1882     <xsl:text>                parent.appendChild(element);
       
  1883 </xsl:text>
       
  1884     <xsl:text>            }
       
  1885 </xsl:text>
  1961 </xsl:text>
  1886     <xsl:text>        }
  1962     <xsl:text>        }
  1887 </xsl:text>
  1963 </xsl:text>
  1888     <xsl:text>    }else{
       
  1889 </xsl:text>
       
  1890     <xsl:text>        for(let eltid in new_desc.required_detachables){
       
  1891 </xsl:text>
       
  1892     <xsl:text>            let [element, parent] = new_desc.required_detachables[eltid];
       
  1893 </xsl:text>
       
  1894     <xsl:text>            parent.appendChild(element);
       
  1895 </xsl:text>
       
  1896     <xsl:text>        }
       
  1897 </xsl:text>
       
  1898     <xsl:text>    }
  1964     <xsl:text>    }
  1899 </xsl:text>
  1965 </xsl:text>
  1900     <xsl:text>
  1966     <xsl:text>
  1901 </xsl:text>
  1967 </xsl:text>
  1902     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1968     <xsl:text>    svg_root.setAttribute('viewBox',new_desc.bbox.join(" "));
  1903 </xsl:text>
  1969 </xsl:text>
  1904     <xsl:text>    current_visible_page = page_name;
  1970     <xsl:text>    current_visible_page = page_name;
  1905 </xsl:text>
  1971 </xsl:text>
  1906     <xsl:text>};
  1972     <xsl:text>};
  1907 </xsl:text>
  1973 </xsl:text>
  1908     <xsl:text>    
       
  1909 </xsl:text>
       
  1910     <xsl:text>function apply_cache() {
       
  1911 </xsl:text>
       
  1912     <xsl:text>    let new_desc = page_desc[current_visible_page];
       
  1913 </xsl:text>
       
  1914     <xsl:text>    for(let widget of chain(new_desc.absolute_widgets,new_desc.relative_widgets)){
       
  1915 </xsl:text>
       
  1916     <xsl:text>        for(let index of widget.indexes){
       
  1917 </xsl:text>
       
  1918     <xsl:text>            /* dispatch current cache in newly opened page widgets */
       
  1919 </xsl:text>
       
  1920     <xsl:text>            let realindex = index+widget.offset;
       
  1921 </xsl:text>
       
  1922     <xsl:text>            let cached_val = cache[realindex];
       
  1923 </xsl:text>
       
  1924     <xsl:text>            if(cached_val != undefined)
       
  1925 </xsl:text>
       
  1926     <xsl:text>                dispatch_value_to_widget(widget, realindex, cached_val, cached_val);
       
  1927 </xsl:text>
       
  1928     <xsl:text>        }
       
  1929 </xsl:text>
       
  1930     <xsl:text>    }
       
  1931 </xsl:text>
       
  1932     <xsl:text>    current_visible_page_index = current_subscribed_page_index;
       
  1933 </xsl:text>
       
  1934     <xsl:text>}
       
  1935 </xsl:text>
       
  1936     <xsl:text>
       
  1937 </xsl:text>
       
  1938     <xsl:text>
       
  1939 </xsl:text>
       
  1940     <xsl:text>
  1974     <xsl:text>
  1941 </xsl:text>
  1975 </xsl:text>
  1942     <xsl:text>// Once connection established
  1976     <xsl:text>// Once connection established
  1943 </xsl:text>
  1977 </xsl:text>
  1944     <xsl:text>ws.onopen = function (evt) {
  1978     <xsl:text>ws.onopen = function (evt) {