1542 <xsl:text> unsub: foreach_unsubscribe, |
1542 <xsl:text> unsub: foreach_unsubscribe, |
1543 </xsl:text> |
1543 </xsl:text> |
1544 <xsl:text> apply_cache: foreach_apply_cache, |
1544 <xsl:text> apply_cache: foreach_apply_cache, |
1545 </xsl:text> |
1545 </xsl:text> |
1546 </xsl:template> |
1546 </xsl:template> |
|
1547 <epilogue:foreach/> |
|
1548 <xsl:template match="epilogue:foreach"> |
|
1549 <xsl:text>function foreach_unsubscribe(){ |
|
1550 </xsl:text> |
|
1551 <xsl:text> for(let item of this.items){ |
|
1552 </xsl:text> |
|
1553 <xsl:text> for(let widget of item) { |
|
1554 </xsl:text> |
|
1555 <xsl:text> unsubscribe.call(widget); |
|
1556 </xsl:text> |
|
1557 <xsl:text> } |
|
1558 </xsl:text> |
|
1559 <xsl:text> } |
|
1560 </xsl:text> |
|
1561 <xsl:text> this.offset = 0; |
|
1562 </xsl:text> |
|
1563 <xsl:text>} |
|
1564 </xsl:text> |
|
1565 <xsl:text> |
|
1566 </xsl:text> |
|
1567 <xsl:text>function foreach_widgets_do(new_offset, todo){ |
|
1568 </xsl:text> |
|
1569 <xsl:text> this.offset = new_offset; |
|
1570 </xsl:text> |
|
1571 <xsl:text> for(let i = 0; i < this.items.length; i++) { |
|
1572 </xsl:text> |
|
1573 <xsl:text> let item = this.items[i]; |
|
1574 </xsl:text> |
|
1575 <xsl:text> let orig_item_index = this.index_pool[i]; |
|
1576 </xsl:text> |
|
1577 <xsl:text> let item_index = this.index_pool[i+this.item_offset]; |
|
1578 </xsl:text> |
|
1579 <xsl:text> let item_index_offset = item_index - orig_item_index; |
|
1580 </xsl:text> |
|
1581 <xsl:text> for(let widget of item) { |
|
1582 </xsl:text> |
|
1583 <xsl:text> todo.call(widget, new_offset + item_index_offset); |
|
1584 </xsl:text> |
|
1585 <xsl:text> } |
|
1586 </xsl:text> |
|
1587 <xsl:text> } |
|
1588 </xsl:text> |
|
1589 <xsl:text>} |
|
1590 </xsl:text> |
|
1591 <xsl:text> |
|
1592 </xsl:text> |
|
1593 <xsl:text>function foreach_subscribe(new_offset=0){ |
|
1594 </xsl:text> |
|
1595 <xsl:text> foreach_widgets_do.call(this, new_offset, subscribe); |
|
1596 </xsl:text> |
|
1597 <xsl:text>} |
|
1598 </xsl:text> |
|
1599 <xsl:text> |
|
1600 </xsl:text> |
|
1601 <xsl:text>function foreach_apply_cache() { |
|
1602 </xsl:text> |
|
1603 <xsl:text> foreach_widgets_do.call(this, this.offset, widget_apply_cache); |
|
1604 </xsl:text> |
|
1605 <xsl:text>} |
|
1606 </xsl:text> |
|
1607 <xsl:text> |
|
1608 </xsl:text> |
|
1609 <xsl:text>function foreach_onclick(opstr, evt) { |
|
1610 </xsl:text> |
|
1611 <xsl:text> new_item_offset = eval(String(this.item_offset)+opstr) |
|
1612 </xsl:text> |
|
1613 <xsl:text> if(new_item_offset + this.items.length > this.index_pool.length) { |
|
1614 </xsl:text> |
|
1615 <xsl:text> if(this.item_offset + this.items.length == this.index_pool.length) |
|
1616 </xsl:text> |
|
1617 <xsl:text> new_item_offset = 0; |
|
1618 </xsl:text> |
|
1619 <xsl:text> else |
|
1620 </xsl:text> |
|
1621 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1622 </xsl:text> |
|
1623 <xsl:text> } else if(new_item_offset < 0) { |
|
1624 </xsl:text> |
|
1625 <xsl:text> if(this.item_offset == 0) |
|
1626 </xsl:text> |
|
1627 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
1628 </xsl:text> |
|
1629 <xsl:text> else |
|
1630 </xsl:text> |
|
1631 <xsl:text> new_item_offset = 0; |
|
1632 </xsl:text> |
|
1633 <xsl:text> } |
|
1634 </xsl:text> |
|
1635 <xsl:text> this.item_offset = new_item_offset; |
|
1636 </xsl:text> |
|
1637 <xsl:text> off = this.offset; |
|
1638 </xsl:text> |
|
1639 <xsl:text> foreach_unsubscribe.call(this); |
|
1640 </xsl:text> |
|
1641 <xsl:text> foreach_subscribe.call(this,off); |
|
1642 </xsl:text> |
|
1643 <xsl:text> update_subscriptions(); |
|
1644 </xsl:text> |
|
1645 <xsl:text> need_cache_apply.push(this); |
|
1646 </xsl:text> |
|
1647 <xsl:text> jumps_need_update = true; |
|
1648 </xsl:text> |
|
1649 <xsl:text> requestHMIAnimation(); |
|
1650 </xsl:text> |
|
1651 <xsl:text>} |
|
1652 </xsl:text> |
|
1653 <xsl:text> |
|
1654 </xsl:text> |
|
1655 </xsl:template> |
1547 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
1656 <xsl:template mode="widget_defs" match="widget[@type='Input']"> |
1548 <xsl:param name="hmi_element"/> |
1657 <xsl:param name="hmi_element"/> |
1549 <xsl:variable name="value_elt"> |
1658 <xsl:variable name="value_elt"> |
1550 <xsl:call-template name="defs_by_labels"> |
1659 <xsl:call-template name="defs_by_labels"> |
1551 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
1660 <xsl:with-param name="hmi_element" select="$hmi_element"/> |
2919 </xsl:text> |
3043 </xsl:text> |
2920 <xsl:text>} |
3044 <xsl:text>} |
2921 </xsl:text> |
3045 </xsl:text> |
2922 <xsl:text> |
3046 <xsl:text> |
2923 </xsl:text> |
3047 </xsl:text> |
2924 <xsl:text>function foreach_unsubscribe(){ |
3048 <xsl:text>function widget_apply_cache() { |
2925 </xsl:text> |
3049 </xsl:text> |
2926 <xsl:text> for(let item of this.items){ |
3050 <xsl:text> for(let index of this.indexes){ |
2927 </xsl:text> |
3051 </xsl:text> |
2928 <xsl:text> for(let widget of item) { |
3052 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
2929 </xsl:text> |
3053 </xsl:text> |
2930 <xsl:text> unsubscribe.call(widget); |
3054 <xsl:text> let realindex = index+this.offset; |
|
3055 </xsl:text> |
|
3056 <xsl:text> let cached_val = cache[realindex]; |
|
3057 </xsl:text> |
|
3058 <xsl:text> if(cached_val != undefined) |
|
3059 </xsl:text> |
|
3060 <xsl:text> dispatch_value_to_widget(this, realindex, cached_val, cached_val); |
|
3061 </xsl:text> |
|
3062 <xsl:text> } |
|
3063 </xsl:text> |
|
3064 <xsl:text>} |
|
3065 </xsl:text> |
|
3066 <xsl:text> |
|
3067 </xsl:text> |
|
3068 <xsl:text>function switch_visible_page(page_name) { |
|
3069 </xsl:text> |
|
3070 <xsl:text> |
|
3071 </xsl:text> |
|
3072 <xsl:text> let old_desc = page_desc[current_visible_page]; |
|
3073 </xsl:text> |
|
3074 <xsl:text> let new_desc = page_desc[page_name]; |
|
3075 </xsl:text> |
|
3076 <xsl:text> |
|
3077 </xsl:text> |
|
3078 <xsl:text> if(old_desc){ |
|
3079 </xsl:text> |
|
3080 <xsl:text> for(let eltid in old_desc.required_detachables){ |
|
3081 </xsl:text> |
|
3082 <xsl:text> if(!(eltid in new_desc.required_detachables)){ |
|
3083 </xsl:text> |
|
3084 <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; |
|
3085 </xsl:text> |
|
3086 <xsl:text> parent.removeChild(element); |
|
3087 </xsl:text> |
|
3088 <xsl:text> } |
2931 </xsl:text> |
3089 </xsl:text> |
2932 <xsl:text> } |
3090 <xsl:text> } |
2933 </xsl:text> |
3091 </xsl:text> |
|
3092 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
3093 </xsl:text> |
|
3094 <xsl:text> if(!(eltid in old_desc.required_detachables)){ |
|
3095 </xsl:text> |
|
3096 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
3097 </xsl:text> |
|
3098 <xsl:text> parent.appendChild(element); |
|
3099 </xsl:text> |
|
3100 <xsl:text> } |
|
3101 </xsl:text> |
|
3102 <xsl:text> } |
|
3103 </xsl:text> |
|
3104 <xsl:text> }else{ |
|
3105 </xsl:text> |
|
3106 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
3107 </xsl:text> |
|
3108 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
3109 </xsl:text> |
|
3110 <xsl:text> parent.appendChild(element); |
|
3111 </xsl:text> |
|
3112 <xsl:text> } |
|
3113 </xsl:text> |
2934 <xsl:text> } |
3114 <xsl:text> } |
2935 </xsl:text> |
3115 </xsl:text> |
2936 <xsl:text> this.offset = 0; |
|
2937 </xsl:text> |
|
2938 <xsl:text>} |
|
2939 </xsl:text> |
|
2940 <xsl:text> |
|
2941 </xsl:text> |
|
2942 <xsl:text>function foreach_widgets_do(new_offset, todo){ |
|
2943 </xsl:text> |
|
2944 <xsl:text> this.offset = new_offset; |
|
2945 </xsl:text> |
|
2946 <xsl:text> for(let i = 0; i < this.items.length; i++) { |
|
2947 </xsl:text> |
|
2948 <xsl:text> let item = this.items[i]; |
|
2949 </xsl:text> |
|
2950 <xsl:text> let orig_item_index = this.index_pool[i]; |
|
2951 </xsl:text> |
|
2952 <xsl:text> let item_index = this.index_pool[i+this.item_offset]; |
|
2953 </xsl:text> |
|
2954 <xsl:text> let item_index_offset = item_index - orig_item_index; |
|
2955 </xsl:text> |
|
2956 <xsl:text> for(let widget of item) { |
|
2957 </xsl:text> |
|
2958 <xsl:text> todo.call(widget, new_offset + item_index_offset); |
|
2959 </xsl:text> |
|
2960 <xsl:text> } |
|
2961 </xsl:text> |
|
2962 <xsl:text> } |
|
2963 </xsl:text> |
|
2964 <xsl:text>} |
|
2965 </xsl:text> |
|
2966 <xsl:text> |
|
2967 </xsl:text> |
|
2968 <xsl:text>function foreach_subscribe(new_offset=0){ |
|
2969 </xsl:text> |
|
2970 <xsl:text> foreach_widgets_do.call(this, new_offset, subscribe); |
|
2971 </xsl:text> |
|
2972 <xsl:text>} |
|
2973 </xsl:text> |
|
2974 <xsl:text> |
|
2975 </xsl:text> |
|
2976 <xsl:text>function widget_apply_cache() { |
|
2977 </xsl:text> |
|
2978 <xsl:text> for(let index of this.indexes){ |
|
2979 </xsl:text> |
|
2980 <xsl:text> /* dispatch current cache in newly opened page widgets */ |
|
2981 </xsl:text> |
|
2982 <xsl:text> let realindex = index+this.offset; |
|
2983 </xsl:text> |
|
2984 <xsl:text> let cached_val = cache[realindex]; |
|
2985 </xsl:text> |
|
2986 <xsl:text> if(cached_val != undefined) |
|
2987 </xsl:text> |
|
2988 <xsl:text> dispatch_value_to_widget(this, realindex, cached_val, cached_val); |
|
2989 </xsl:text> |
|
2990 <xsl:text> } |
|
2991 </xsl:text> |
|
2992 <xsl:text>} |
|
2993 </xsl:text> |
|
2994 <xsl:text> |
|
2995 </xsl:text> |
|
2996 <xsl:text>function foreach_apply_cache() { |
|
2997 </xsl:text> |
|
2998 <xsl:text> foreach_widgets_do.call(this, this.offset, widget_apply_cache); |
|
2999 </xsl:text> |
|
3000 <xsl:text>} |
|
3001 </xsl:text> |
|
3002 <xsl:text> |
|
3003 </xsl:text> |
|
3004 <xsl:text>function foreach_onclick(opstr, evt) { |
|
3005 </xsl:text> |
|
3006 <xsl:text> new_item_offset = eval(String(this.item_offset)+opstr) |
|
3007 </xsl:text> |
|
3008 <xsl:text> if(new_item_offset + this.items.length > this.index_pool.length) { |
|
3009 </xsl:text> |
|
3010 <xsl:text> if(this.item_offset + this.items.length == this.index_pool.length) |
|
3011 </xsl:text> |
|
3012 <xsl:text> new_item_offset = 0; |
|
3013 </xsl:text> |
|
3014 <xsl:text> else |
|
3015 </xsl:text> |
|
3016 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
3017 </xsl:text> |
|
3018 <xsl:text> } else if(new_item_offset < 0) { |
|
3019 </xsl:text> |
|
3020 <xsl:text> if(this.item_offset == 0) |
|
3021 </xsl:text> |
|
3022 <xsl:text> new_item_offset = this.index_pool.length - this.items.length; |
|
3023 </xsl:text> |
|
3024 <xsl:text> else |
|
3025 </xsl:text> |
|
3026 <xsl:text> new_item_offset = 0; |
|
3027 </xsl:text> |
|
3028 <xsl:text> } |
|
3029 </xsl:text> |
|
3030 <xsl:text> this.item_offset = new_item_offset; |
|
3031 </xsl:text> |
|
3032 <xsl:text> off = this.offset; |
|
3033 </xsl:text> |
|
3034 <xsl:text> foreach_unsubscribe.call(this); |
|
3035 </xsl:text> |
|
3036 <xsl:text> foreach_subscribe.call(this,off); |
|
3037 </xsl:text> |
|
3038 <xsl:text> update_subscriptions(); |
|
3039 </xsl:text> |
|
3040 <xsl:text> need_cache_apply.push(this); |
|
3041 </xsl:text> |
|
3042 <xsl:text> jumps_need_update = true; |
|
3043 </xsl:text> |
|
3044 <xsl:text> requestHMIAnimation(); |
|
3045 </xsl:text> |
|
3046 <xsl:text>} |
|
3047 </xsl:text> |
|
3048 <xsl:text> |
|
3049 </xsl:text> |
|
3050 <xsl:text> |
|
3051 </xsl:text> |
|
3052 <xsl:text>function switch_visible_page(page_name) { |
|
3053 </xsl:text> |
|
3054 <xsl:text> |
|
3055 </xsl:text> |
|
3056 <xsl:text> let old_desc = page_desc[current_visible_page]; |
|
3057 </xsl:text> |
|
3058 <xsl:text> let new_desc = page_desc[page_name]; |
|
3059 </xsl:text> |
|
3060 <xsl:text> |
|
3061 </xsl:text> |
|
3062 <xsl:text> if(old_desc){ |
|
3063 </xsl:text> |
|
3064 <xsl:text> for(let eltid in old_desc.required_detachables){ |
|
3065 </xsl:text> |
|
3066 <xsl:text> if(!(eltid in new_desc.required_detachables)){ |
|
3067 </xsl:text> |
|
3068 <xsl:text> let [element, parent] = old_desc.required_detachables[eltid]; |
|
3069 </xsl:text> |
|
3070 <xsl:text> parent.removeChild(element); |
|
3071 </xsl:text> |
|
3072 <xsl:text> } |
|
3073 </xsl:text> |
|
3074 <xsl:text> } |
|
3075 </xsl:text> |
|
3076 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
3077 </xsl:text> |
|
3078 <xsl:text> if(!(eltid in old_desc.required_detachables)){ |
|
3079 </xsl:text> |
|
3080 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
3081 </xsl:text> |
|
3082 <xsl:text> parent.appendChild(element); |
|
3083 </xsl:text> |
|
3084 <xsl:text> } |
|
3085 </xsl:text> |
|
3086 <xsl:text> } |
|
3087 </xsl:text> |
|
3088 <xsl:text> }else{ |
|
3089 </xsl:text> |
|
3090 <xsl:text> for(let eltid in new_desc.required_detachables){ |
|
3091 </xsl:text> |
|
3092 <xsl:text> let [element, parent] = new_desc.required_detachables[eltid]; |
|
3093 </xsl:text> |
|
3094 <xsl:text> parent.appendChild(element); |
|
3095 </xsl:text> |
|
3096 <xsl:text> } |
|
3097 </xsl:text> |
|
3098 <xsl:text> } |
|
3099 </xsl:text> |
|
3100 <xsl:text> |
3116 <xsl:text> |
3101 </xsl:text> |
3117 </xsl:text> |
3102 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
3118 <xsl:text> svg_root.setAttribute('viewBox',new_desc.bbox.join(" ")); |
3103 </xsl:text> |
3119 </xsl:text> |
3104 <xsl:text> current_visible_page = page_name; |
3120 <xsl:text> current_visible_page = page_name; |
3105 </xsl:text> |
3121 </xsl:text> |
3106 <xsl:text>}; |
3122 <xsl:text>}; |
3107 </xsl:text> |
|
3108 <xsl:text> |
|
3109 </xsl:text> |
|
3110 <xsl:text>function update_jumps() { |
|
3111 </xsl:text> |
|
3112 <xsl:text> page_desc[current_visible_page].jumps.map(w=>w.notify_page_change(current_visible_page,current_page_index)); |
|
3113 </xsl:text> |
|
3114 <xsl:text> jumps_need_update = false; |
|
3115 </xsl:text> |
|
3116 <xsl:text>}; |
|
3117 </xsl:text> |
|
3118 <xsl:text> |
|
3119 </xsl:text> |
3123 </xsl:text> |
3120 <xsl:text> |
3124 <xsl:text> |
3121 </xsl:text> |
3125 </xsl:text> |
3122 <xsl:text>// Once connection established |
3126 <xsl:text>// Once connection established |
3123 </xsl:text> |
3127 </xsl:text> |