782 </xsl:text> |
782 </xsl:text> |
783 </xsl:template> |
783 </xsl:template> |
784 <xsl:template mode="hmi_elements" match="svg:*"> |
784 <xsl:template mode="hmi_elements" match="svg:*"> |
785 <xsl:variable name="widget" select="func:widget(@id)"/> |
785 <xsl:variable name="widget" select="func:widget(@id)"/> |
786 <xsl:variable name="eltid" select="@id"/> |
786 <xsl:variable name="eltid" select="@id"/> |
|
787 <xsl:variable name="args"> |
|
788 <xsl:for-each select="$widget/arg"> |
|
789 <xsl:text>"</xsl:text> |
|
790 <xsl:value-of select="@value"/> |
|
791 <xsl:text>"</xsl:text> |
|
792 <xsl:if test="position()!=last()"> |
|
793 <xsl:text>,</xsl:text> |
|
794 </xsl:if> |
|
795 </xsl:for-each> |
|
796 </xsl:variable> |
|
797 <xsl:variable name="indexes"> |
|
798 <xsl:for-each select="$widget/path"> |
|
799 <xsl:choose> |
|
800 <xsl:when test="not(@index)"> |
|
801 <xsl:message terminate="no"> |
|
802 <xsl:text>Widget </xsl:text> |
|
803 <xsl:value-of select="$widget/@type"/> |
|
804 <xsl:text> id="</xsl:text> |
|
805 <xsl:value-of select="$eltid"/> |
|
806 <xsl:text>" : No match for path "</xsl:text> |
|
807 <xsl:value-of select="@value"/> |
|
808 <xsl:text>" in HMI tree</xsl:text> |
|
809 </xsl:message> |
|
810 </xsl:when> |
|
811 <xsl:otherwise> |
|
812 <xsl:value-of select="@index"/> |
|
813 <xsl:if test="position()!=last()"> |
|
814 <xsl:text>,</xsl:text> |
|
815 </xsl:if> |
|
816 </xsl:otherwise> |
|
817 </xsl:choose> |
|
818 </xsl:for-each> |
|
819 </xsl:variable> |
787 <xsl:text> "</xsl:text> |
820 <xsl:text> "</xsl:text> |
788 <xsl:value-of select="@id"/> |
821 <xsl:value-of select="@id"/> |
789 <xsl:text>": new </xsl:text> |
822 <xsl:text>": new </xsl:text> |
790 <xsl:value-of select="$widget/@type"/> |
823 <xsl:value-of select="$widget/@type"/> |
791 <xsl:text>Widget ({ |
824 <xsl:text>Widget ("</xsl:text> |
792 </xsl:text> |
|
793 <xsl:text> args: [ |
|
794 </xsl:text> |
|
795 <xsl:for-each select="$widget/arg"> |
|
796 <xsl:text> "</xsl:text> |
|
797 <xsl:value-of select="@value"/> |
|
798 <xsl:text>"</xsl:text> |
|
799 <xsl:if test="position()!=last()"> |
|
800 <xsl:text>,</xsl:text> |
|
801 </xsl:if> |
|
802 <xsl:text> |
|
803 </xsl:text> |
|
804 </xsl:for-each> |
|
805 <xsl:text> ], |
|
806 </xsl:text> |
|
807 <xsl:text> offset: 0, |
|
808 </xsl:text> |
|
809 <xsl:text> indexes: [ |
|
810 </xsl:text> |
|
811 <xsl:for-each select="$widget/path"> |
|
812 <xsl:choose> |
|
813 <xsl:when test="not(@index)"> |
|
814 <xsl:message terminate="no"> |
|
815 <xsl:text>Widget </xsl:text> |
|
816 <xsl:value-of select="$widget/@type"/> |
|
817 <xsl:text> id="</xsl:text> |
|
818 <xsl:value-of select="$eltid"/> |
|
819 <xsl:text>" : No match for path "</xsl:text> |
|
820 <xsl:value-of select="@value"/> |
|
821 <xsl:text>" in HMI tree</xsl:text> |
|
822 </xsl:message> |
|
823 </xsl:when> |
|
824 <xsl:otherwise> |
|
825 <xsl:text> </xsl:text> |
|
826 <xsl:value-of select="@index"/> |
|
827 <xsl:text> /* </xsl:text> |
|
828 <xsl:value-of select="@value"/> |
|
829 <xsl:text> */ </xsl:text> |
|
830 <xsl:if test="position()!=last()"> |
|
831 <xsl:text>,</xsl:text> |
|
832 </xsl:if> |
|
833 <xsl:text> |
|
834 </xsl:text> |
|
835 </xsl:otherwise> |
|
836 </xsl:choose> |
|
837 </xsl:for-each> |
|
838 <xsl:text> ], |
|
839 </xsl:text> |
|
840 <xsl:text> element: id("</xsl:text> |
|
841 <xsl:value-of select="@id"/> |
825 <xsl:value-of select="@id"/> |
842 <xsl:text>"), |
826 <xsl:text>",[</xsl:text> |
|
827 <xsl:value-of select="$args"/> |
|
828 <xsl:text>],[</xsl:text> |
|
829 <xsl:value-of select="$indexes"/> |
|
830 <xsl:text>],{ |
843 </xsl:text> |
831 </xsl:text> |
844 <xsl:apply-templates mode="widget_defs" select="$widget"> |
832 <xsl:apply-templates mode="widget_defs" select="$widget"> |
845 <xsl:with-param name="hmi_element" select="."/> |
|
846 </xsl:apply-templates> |
|
847 <xsl:apply-templates mode="widget_subscribe" select="$widget"> |
|
848 <xsl:with-param name="hmi_element" select="."/> |
833 <xsl:with-param name="hmi_element" select="."/> |
849 </xsl:apply-templates> |
834 </xsl:apply-templates> |
850 <xsl:text> })</xsl:text> |
835 <xsl:text> })</xsl:text> |
851 <xsl:if test="position()!=last()"> |
836 <xsl:if test="position()!=last()"> |
852 <xsl:text>,</xsl:text> |
837 <xsl:text>,</xsl:text> |
883 </xsl:text> |
868 </xsl:text> |
884 <xsl:text> |
869 <xsl:text> |
885 </xsl:text> |
870 </xsl:text> |
886 <xsl:text>class Widget { |
871 <xsl:text>class Widget { |
887 </xsl:text> |
872 </xsl:text> |
888 <xsl:text> constructor(members){ |
873 <xsl:text> constructor(elt_id,args,indexes,members){ |
|
874 </xsl:text> |
|
875 <xsl:text> this.element = id(elt_id); |
|
876 </xsl:text> |
|
877 <xsl:text> this.args = args; |
|
878 </xsl:text> |
|
879 <xsl:text> this.indexes = indexes; |
|
880 </xsl:text> |
|
881 <xsl:text> this.offset = 0; |
889 </xsl:text> |
882 </xsl:text> |
890 <xsl:text> Object.keys(members).forEach(prop => this[prop]=members[prop]); |
883 <xsl:text> Object.keys(members).forEach(prop => this[prop]=members[prop]); |
891 </xsl:text> |
884 </xsl:text> |
892 <xsl:text> } |
885 <xsl:text> } |
|
886 </xsl:text> |
|
887 <xsl:text> unsub(){ |
|
888 </xsl:text> |
|
889 <xsl:text> /* remove subsribers */ |
|
890 </xsl:text> |
|
891 <xsl:text> for(let index of this.indexes){ |
|
892 </xsl:text> |
|
893 <xsl:text> let idx = index + this.offset; |
|
894 </xsl:text> |
|
895 <xsl:text> subscribers[idx].delete(this); |
|
896 </xsl:text> |
|
897 <xsl:text> } |
|
898 </xsl:text> |
|
899 <xsl:text> this.offset = 0; |
|
900 </xsl:text> |
|
901 <xsl:text> } |
|
902 </xsl:text> |
|
903 <xsl:text> |
|
904 </xsl:text> |
|
905 <xsl:text> sub(new_offset=0){ |
|
906 </xsl:text> |
|
907 <xsl:text> /* set the offset because relative */ |
|
908 </xsl:text> |
|
909 <xsl:text> this.offset = new_offset; |
|
910 </xsl:text> |
|
911 <xsl:text> /* add this's subsribers */ |
|
912 </xsl:text> |
|
913 <xsl:text> for(let index of this.indexes){ |
|
914 </xsl:text> |
|
915 <xsl:text> subscribers[index + new_offset].add(this); |
|
916 </xsl:text> |
|
917 <xsl:text> } |
|
918 </xsl:text> |
|
919 <xsl:text> need_cache_apply.push(this); |
|
920 </xsl:text> |
|
921 <xsl:text> } |
|
922 </xsl:text> |
|
923 <xsl:text> |
|
924 </xsl:text> |
|
925 <xsl:text> apply_cache() { |
|
926 </xsl:text> |
|
927 <xsl:text> for(let index of this.indexes){ |
|
928 </xsl:text> |
|
929 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
930 </xsl:text> |
|
931 <xsl:text> let realindex = index+this.offset; |
|
932 </xsl:text> |
|
933 <xsl:text> let cached_val = cache[realindex]; |
|
934 </xsl:text> |
|
935 <xsl:text> if(cached_val != undefined) |
|
936 </xsl:text> |
|
937 <xsl:text> dispatch_value_to_widget(this, realindex, cached_val, cached_val); |
|
938 </xsl:text> |
|
939 <xsl:text> } |
|
940 </xsl:text> |
|
941 <xsl:text> } |
|
942 </xsl:text> |
|
943 <xsl:text> |
893 </xsl:text> |
944 </xsl:text> |
894 <xsl:text>} |
945 <xsl:text>} |
895 </xsl:text> |
946 </xsl:text> |
896 <xsl:text> |
947 <xsl:text> |
897 </xsl:text> |
948 </xsl:text> |
1823 </xsl:text> |
1865 </xsl:text> |
1824 <xsl:text> }, |
1866 <xsl:text> }, |
1825 </xsl:text> |
1867 </xsl:text> |
1826 <xsl:text> item_offset: 0, |
1868 <xsl:text> item_offset: 0, |
1827 </xsl:text> |
1869 </xsl:text> |
1828 <xsl:text> on_click: foreach_onclick, |
1870 </xsl:template> |
1829 </xsl:text> |
1871 <xsl:template mode="widget_class" match="widget[@type='ForEach']"> |
1830 </xsl:template> |
1872 <xsl:text>class ForEachWidget extends Widget{ |
1831 <xsl:template mode="widget_subscribe" match="widget[@type='ForEach']"> |
1873 </xsl:text> |
1832 <xsl:text> sub: foreach_subscribe, |
1874 <xsl:text> unsub(){ |
1833 </xsl:text> |
1875 </xsl:text> |
1834 <xsl:text> unsub: foreach_unsubscribe, |
1876 <xsl:text> for(let item of this.items){ |
1835 </xsl:text> |
1877 </xsl:text> |
1836 <xsl:text> apply_cache: foreach_apply_cache, |
1878 <xsl:text> for(let widget of item) { |
1837 </xsl:text> |
1879 </xsl:text> |
1838 </xsl:template> |
1880 <xsl:text> widget.unsub(); |
1839 <definitions:foreach/> |
1881 </xsl:text> |
1840 <xsl:template match="definitions:foreach"> |
1882 <xsl:text> } |
1841 <xsl:text> |
|
1842 </xsl:text> |
|
1843 <xsl:text>/* </xsl:text> |
|
1844 <xsl:value-of select="local-name()"/> |
|
1845 <xsl:text> */ |
|
1846 </xsl:text> |
|
1847 <xsl:text> |
|
1848 </xsl:text> |
|
1849 <xsl:text>function foreach_unsubscribe(){ |
|
1850 </xsl:text> |
|
1851 <xsl:text> for(let item of this.items){ |
|
1852 </xsl:text> |
|
1853 <xsl:text> for(let widget of item) { |
|
1854 </xsl:text> |
|
1855 <xsl:text> unsubscribe.call(widget); |
|
1856 </xsl:text> |
1883 </xsl:text> |
1857 <xsl:text> } |
1884 <xsl:text> } |
1858 </xsl:text> |
1885 </xsl:text> |
|
1886 <xsl:text> this.offset = 0; |
|
1887 </xsl:text> |
1859 <xsl:text> } |
1888 <xsl:text> } |
1860 </xsl:text> |
1889 </xsl:text> |
1861 <xsl:text> this.offset = 0; |
1890 <xsl:text> |
|
1891 </xsl:text> |
|
1892 <xsl:text> foreach_widgets_do(new_offset, todo){ |
|
1893 </xsl:text> |
|
1894 <xsl:text> this.offset = new_offset; |
|
1895 </xsl:text> |
|
1896 <xsl:text> for(let i = 0; i < this.items.length; i++) { |
|
1897 </xsl:text> |
|
1898 <xsl:text> let item = this.items[i]; |
|
1899 </xsl:text> |
|
1900 <xsl:text> let orig_item_index = this.index_pool[i]; |
|
1901 </xsl:text> |
|
1902 <xsl:text> let item_index = this.index_pool[i+this.item_offset]; |
|
1903 </xsl:text> |
|
1904 <xsl:text> let item_index_offset = item_index - orig_item_index; |
|
1905 </xsl:text> |
|
1906 <xsl:text> for(let widget of item) { |
|
1907 </xsl:text> |
|
1908 <xsl:text> todo(widget).call(widget, new_offset + item_index_offset); |
|
1909 </xsl:text> |
|
1910 <xsl:text> } |
|
1911 </xsl:text> |
|
1912 <xsl:text> } |
|
1913 </xsl:text> |
|
1914 <xsl:text> } |
|
1915 </xsl:text> |
|
1916 <xsl:text> |
|
1917 </xsl:text> |
|
1918 <xsl:text> sub(new_offset=0){ |
|
1919 </xsl:text> |
|
1920 <xsl:text> this.foreach_widgets_do(new_offset, w=>w.sub); |
|
1921 </xsl:text> |
|
1922 <xsl:text> } |
|
1923 </xsl:text> |
|
1924 <xsl:text> |
|
1925 </xsl:text> |
|
1926 <xsl:text> apply_cache() { |
|
1927 </xsl:text> |
|
1928 <xsl:text> this.foreach_widgets_do(this.offset, w=>w.apply_cache); |
|
1929 </xsl:text> |
|
1930 <xsl:text> } |
|
1931 </xsl:text> |
|
1932 <xsl:text> |
|
1933 </xsl:text> |
|
1934 <xsl:text> on_click(opstr, evt) { |
|
1935 </xsl:text> |
|
1936 <xsl:text> let new_item_offset = eval(String(this.item_offset)+opstr); |
|
1937 </xsl:text> |
|
1938 <xsl:text> if(new_item_offset + this.items.length > this.index_pool.length) { |
|
1939 </xsl:text> |
|
1940 <xsl:text> if(this.item_offset + this.items.length == this.index_pool.length) |
|
1941 </xsl:text> |
|
1942 <xsl:text> new_item_offset = 0; |
|
1943 </xsl:text> |
|
1944 <xsl:text> else |
|
1945 </xsl:text> |
|
1946 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1947 </xsl:text> |
|
1948 <xsl:text> } else if(new_item_offset < 0) { |
|
1949 </xsl:text> |
|
1950 <xsl:text> if(this.item_offset == 0) |
|
1951 </xsl:text> |
|
1952 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1953 </xsl:text> |
|
1954 <xsl:text> else |
|
1955 </xsl:text> |
|
1956 <xsl:text> new_item_offset = 0; |
|
1957 </xsl:text> |
|
1958 <xsl:text> } |
|
1959 </xsl:text> |
|
1960 <xsl:text> this.item_offset = new_item_offset; |
|
1961 </xsl:text> |
|
1962 <xsl:text> this.unsub(); |
|
1963 </xsl:text> |
|
1964 <xsl:text> this.sub(this.offset); |
|
1965 </xsl:text> |
|
1966 <xsl:text> update_subscriptions(); |
|
1967 </xsl:text> |
|
1968 <xsl:text> need_cache_apply.push(this); |
|
1969 </xsl:text> |
|
1970 <xsl:text> jumps_need_update = true; |
|
1971 </xsl:text> |
|
1972 <xsl:text> requestHMIAnimation(); |
|
1973 </xsl:text> |
|
1974 <xsl:text> } |
1862 </xsl:text> |
1975 </xsl:text> |
1863 <xsl:text>} |
1976 <xsl:text>} |
1864 </xsl:text> |
|
1865 <xsl:text> |
|
1866 </xsl:text> |
|
1867 <xsl:text>function foreach_widgets_do(new_offset, todo){ |
|
1868 </xsl:text> |
|
1869 <xsl:text> this.offset = new_offset; |
|
1870 </xsl:text> |
|
1871 <xsl:text> for(let i = 0; i < this.items.length; i++) { |
|
1872 </xsl:text> |
|
1873 <xsl:text> let item = this.items[i]; |
|
1874 </xsl:text> |
|
1875 <xsl:text> let orig_item_index = this.index_pool[i]; |
|
1876 </xsl:text> |
|
1877 <xsl:text> let item_index = this.index_pool[i+this.item_offset]; |
|
1878 </xsl:text> |
|
1879 <xsl:text> let item_index_offset = item_index - orig_item_index; |
|
1880 </xsl:text> |
|
1881 <xsl:text> for(let widget of item) { |
|
1882 </xsl:text> |
|
1883 <xsl:text> todo.call(widget, new_offset + item_index_offset); |
|
1884 </xsl:text> |
|
1885 <xsl:text> } |
|
1886 </xsl:text> |
|
1887 <xsl:text> } |
|
1888 </xsl:text> |
|
1889 <xsl:text>} |
|
1890 </xsl:text> |
|
1891 <xsl:text> |
|
1892 </xsl:text> |
|
1893 <xsl:text>function foreach_subscribe(new_offset=0){ |
|
1894 </xsl:text> |
|
1895 <xsl:text> foreach_widgets_do.call(this, new_offset, subscribe); |
|
1896 </xsl:text> |
|
1897 <xsl:text>} |
|
1898 </xsl:text> |
|
1899 <xsl:text> |
|
1900 </xsl:text> |
|
1901 <xsl:text>function foreach_apply_cache() { |
|
1902 </xsl:text> |
|
1903 <xsl:text> foreach_widgets_do.call(this, this.offset, widget_apply_cache); |
|
1904 </xsl:text> |
|
1905 <xsl:text>} |
|
1906 </xsl:text> |
|
1907 <xsl:text> |
|
1908 </xsl:text> |
|
1909 <xsl:text>function foreach_onclick(opstr, evt) { |
|
1910 </xsl:text> |
|
1911 <xsl:text> new_item_offset = eval(String(this.item_offset)+opstr) |
|
1912 </xsl:text> |
|
1913 <xsl:text> if(new_item_offset + this.items.length > this.index_pool.length) { |
|
1914 </xsl:text> |
|
1915 <xsl:text> if(this.item_offset + this.items.length == this.index_pool.length) |
|
1916 </xsl:text> |
|
1917 <xsl:text> new_item_offset = 0; |
|
1918 </xsl:text> |
|
1919 <xsl:text> else |
|
1920 </xsl:text> |
|
1921 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1922 </xsl:text> |
|
1923 <xsl:text> } else if(new_item_offset < 0) { |
|
1924 </xsl:text> |
|
1925 <xsl:text> if(this.item_offset == 0) |
|
1926 </xsl:text> |
|
1927 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1928 </xsl:text> |
|
1929 <xsl:text> else |
|
1930 </xsl:text> |
|
1931 <xsl:text> new_item_offset = 0; |
|
1932 </xsl:text> |
|
1933 <xsl:text> } |
|
1934 </xsl:text> |
|
1935 <xsl:text> this.item_offset = new_item_offset; |
|
1936 </xsl:text> |
|
1937 <xsl:text> off = this.offset; |
|
1938 </xsl:text> |
|
1939 <xsl:text> foreach_unsubscribe.call(this); |
|
1940 </xsl:text> |
|
1941 <xsl:text> foreach_subscribe.call(this,off); |
|
1942 </xsl:text> |
|
1943 <xsl:text> update_subscriptions(); |
|
1944 </xsl:text> |
|
1945 <xsl:text> need_cache_apply.push(this); |
|
1946 </xsl:text> |
|
1947 <xsl:text> jumps_need_update = true; |
|
1948 </xsl:text> |
|
1949 <xsl:text> requestHMIAnimation(); |
|
1950 </xsl:text> |
|
1951 <xsl:text>} |
|
1952 </xsl:text> |
|
1953 <xsl:text> |
|
1954 </xsl:text> |
|
1955 <xsl:text> |
|
1956 </xsl:text> |
1977 </xsl:text> |
1957 </xsl:template> |
1978 </xsl:template> |
1958 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
1979 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
1959 <xsl:param name="hmi_element"/> |
1980 <xsl:param name="hmi_element"/> |
1960 <xsl:variable name="value_elt"> |
1981 <xsl:variable name="value_elt"> |
2178 <xsl:text> this.active_elt_style = this.active_elt.getAttribute("style"); |
2199 <xsl:text> this.active_elt_style = this.active_elt.getAttribute("style"); |
2179 </xsl:text> |
2200 </xsl:text> |
2180 <xsl:text> this.inactive_elt_style = this.inactive_elt.getAttribute("style"); |
2201 <xsl:text> this.inactive_elt_style = this.inactive_elt.getAttribute("style"); |
2181 </xsl:text> |
2202 </xsl:text> |
2182 </xsl:if> |
2203 </xsl:if> |
2183 <xsl:if test="$have_disability"> |
|
2184 <xsl:text> this.disabled_elt_style = this.disabled_elt.getAttribute("style"); |
|
2185 </xsl:text> |
|
2186 </xsl:if> |
|
2187 <xsl:text> }, |
|
2188 </xsl:text> |
|
2189 </xsl:template> |
|
2190 <xsl:template mode="widget_subscribe" match="widget[@type='Jump']"> |
|
2191 <xsl:param name="hmi_element"/> |
|
2192 <xsl:variable name="activity"> |
|
2193 <xsl:call-template name="jump_widget_activity"> |
|
2194 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
|
2195 </xsl:call-template> |
|
2196 </xsl:variable> |
|
2197 <xsl:variable name="have_activity" select="string-length($activity)>0"/> |
|
2198 <xsl:variable name="disability"> |
|
2199 <xsl:call-template name="jump_widget_disability"> |
|
2200 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
|
2201 </xsl:call-template> |
|
2202 </xsl:variable> |
|
2203 <xsl:variable name="have_disability" select="$have_activity and string-length($disability)>0"/> |
|
2204 <xsl:choose> |
2204 <xsl:choose> |
2205 <xsl:when test="$have_disability"> |
2205 <xsl:when test="$have_disability"> |
2206 <xsl:text> sub: subscribe, |
2206 <xsl:text> this.disabled_elt_style = this.disabled_elt.getAttribute("style"); |
2207 </xsl:text> |
|
2208 <xsl:text> unsub: unsubscribe, |
|
2209 </xsl:text> |
|
2210 <xsl:text> apply_cache: widget_apply_cache, |
|
2211 </xsl:text> |
2207 </xsl:text> |
2212 </xsl:when> |
2208 </xsl:when> |
2213 <xsl:otherwise> |
2209 <xsl:otherwise> |
2214 <xsl:text> sub: function(){}, |
2210 <xsl:text> this.sub = function(){}; |
2215 </xsl:text> |
2211 </xsl:text> |
2216 <xsl:text> unsub: function(){}, |
2212 <xsl:text> this.unsub = function(){}; |
2217 </xsl:text> |
2213 </xsl:text> |
2218 <xsl:text> apply_cache: function(){}, |
2214 <xsl:text> this.apply_cache = function(){}; |
2219 </xsl:text> |
2215 </xsl:text> |
2220 </xsl:otherwise> |
2216 </xsl:otherwise> |
2221 </xsl:choose> |
2217 </xsl:choose> |
|
2218 <xsl:text> }, |
|
2219 </xsl:text> |
2222 </xsl:template> |
2220 </xsl:template> |
2223 <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']"> |
2221 <xsl:template mode="per_page_widget_template" match="widget[@type='Jump']"> |
2224 <xsl:param name="page_desc"/> |
2222 <xsl:param name="page_desc"/> |
2225 <xsl:if test="path"> |
2223 <xsl:if test="path"> |
2226 <xsl:variable name="target_page_name"> |
2224 <xsl:variable name="target_page_name"> |
3342 </xsl:text> |
3340 </xsl:text> |
3343 <xsl:text>}; |
3341 <xsl:text>}; |
3344 </xsl:text> |
3342 </xsl:text> |
3345 <xsl:text> |
3343 <xsl:text> |
3346 </xsl:text> |
3344 </xsl:text> |
3347 <xsl:text>function* chain(a,b){ |
|
3348 </xsl:text> |
|
3349 <xsl:text> yield* a; |
|
3350 </xsl:text> |
|
3351 <xsl:text> yield* b; |
|
3352 </xsl:text> |
|
3353 <xsl:text>}; |
|
3354 </xsl:text> |
|
3355 <xsl:text> |
|
3356 </xsl:text> |
|
3357 <xsl:text>function unsubscribe(){ |
|
3358 </xsl:text> |
|
3359 <xsl:text> /* remove subsribers */ |
|
3360 </xsl:text> |
|
3361 <xsl:text> for(let index of this.indexes){ |
|
3362 </xsl:text> |
|
3363 <xsl:text> let idx = index + this.offset; |
|
3364 </xsl:text> |
|
3365 <xsl:text> subscribers[idx].delete(this); |
|
3366 </xsl:text> |
|
3367 <xsl:text> } |
|
3368 </xsl:text> |
|
3369 <xsl:text> this.offset = 0; |
|
3370 </xsl:text> |
|
3371 <xsl:text>} |
|
3372 </xsl:text> |
|
3373 <xsl:text> |
|
3374 </xsl:text> |
|
3375 <xsl:text>function subscribe(new_offset=0){ |
|
3376 </xsl:text> |
|
3377 <xsl:text> /* set the offset because relative */ |
|
3378 </xsl:text> |
|
3379 <xsl:text> this.offset = new_offset; |
|
3380 </xsl:text> |
|
3381 <xsl:text> /* add this's subsribers */ |
|
3382 </xsl:text> |
|
3383 <xsl:text> for(let index of this.indexes){ |
|
3384 </xsl:text> |
|
3385 <xsl:text> subscribers[index + new_offset].add(this); |
|
3386 </xsl:text> |
|
3387 <xsl:text> } |
|
3388 </xsl:text> |
|
3389 <xsl:text> need_cache_apply.push(this); |
|
3390 </xsl:text> |
|
3391 <xsl:text>} |
|
3392 </xsl:text> |
|
3393 <xsl:text> |
|
3394 </xsl:text> |
|
3395 <xsl:text>function widget_apply_cache() { |
|
3396 </xsl:text> |
|
3397 <xsl:text> for(let index of this.indexes){ |
|
3398 </xsl:text> |
|
3399 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
3400 </xsl:text> |
|
3401 <xsl:text> let realindex = index+this.offset; |
|
3402 </xsl:text> |
|
3403 <xsl:text> let cached_val = cache[realindex]; |
|
3404 </xsl:text> |
|
3405 <xsl:text> if(cached_val != undefined) |
|
3406 </xsl:text> |
|
3407 <xsl:text> dispatch_value_to_widget(this, realindex, cached_val, cached_val); |
|
3408 </xsl:text> |
|
3409 <xsl:text> } |
|
3410 </xsl:text> |
|
3411 <xsl:text>} |
|
3412 </xsl:text> |
|
3413 <xsl:text> |
|
3414 </xsl:text> |
|
3415 <xsl:text>function switch_visible_page(page_name) { |
3345 <xsl:text>function switch_visible_page(page_name) { |
3416 </xsl:text> |
3346 </xsl:text> |
3417 <xsl:text> |
3347 <xsl:text> |
3418 </xsl:text> |
3348 </xsl:text> |
3419 <xsl:text> let old_desc = page_desc[current_visible_page]; |
3349 <xsl:text> let old_desc = page_desc[current_visible_page]; |