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 < 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 < 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 > 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 < 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=>w.unsub()); |
|
1891 </xsl:text> |
|
1892 <xsl:text> old_desc.relative_widgets.map(w=>w.unsub()); |
|
1893 </xsl:text> |
|
1894 <xsl:text> } |
|
1895 </xsl:text> |
|
1896 <xsl:text> new_desc.absolute_widgets.map(w=>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=>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=>w.unsub()); |
|
1823 </xsl:text> |
|
1824 <xsl:text> old_desc.relative_widgets.map(w=>w.unsub()); |
|
1825 </xsl:text> |
|
1826 <xsl:text> } |
|
1827 </xsl:text> |
|
1828 <xsl:text> new_desc.absolute_widgets.map(w=>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=>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) { |