100 const "page", "."; |
100 const "page", "."; |
101 const "p", "$geometry[@Id = $page/@id]"; |
101 const "p", "$geometry[@Id = $page/@id]"; |
102 |
102 |
103 const "page_all_elements", "func:all_related_elements($page)"; |
103 const "page_all_elements", "func:all_related_elements($page)"; |
104 |
104 |
105 const "all_page_widgets","$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id and not(@id=$in_forEach_widget_ids)]"; |
105 const "all_page_widgets","$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]"; |
|
106 const "page_managed_widgets","$all_page_widgets[not(@id=$in_forEach_widget_ids)]"; |
106 const "page_relative_widgets", |
107 const "page_relative_widgets", |
107 "$all_page_widgets[func:is_descendant_path(func:widget(@id)/path/@value, $desc/path/@value)]"; |
108 "$page_managed_widgets[func:is_descendant_path(func:widget(@id)/path/@value, $desc/path/@value)]"; |
108 |
109 |
109 // Take closest ancestor in detachable_elements |
110 // Take closest ancestor in detachable_elements |
110 // since nested detachable elements are filtered out |
111 // since nested detachable elements are filtered out |
111 const "required_detachables", |
112 const "required_detachables", |
112 """func:sumarized_elements($page_all_elements)/ |
113 """func:sumarized_elements($page_all_elements)/ |
124 foreach "$page_relative_widgets" { |
125 foreach "$page_relative_widgets" { |
125 | hmi_widgets["«@id»"]`if "position()!=last()" > ,` |
126 | hmi_widgets["«@id»"]`if "position()!=last()" > ,` |
126 } |
127 } |
127 | ], |
128 | ], |
128 | absolute_widgets: [ |
129 | absolute_widgets: [ |
129 foreach "$all_page_widgets[not(@id = $page_relative_widgets/@id)]" { |
130 foreach "$page_managed_widgets[not(@id = $page_relative_widgets/@id)]" { |
130 | hmi_widgets["«@id»"]`if "position()!=last()" > ,` |
131 | hmi_widgets["«@id»"]`if "position()!=last()" > ,` |
131 } |
132 } |
132 | ], |
133 | ], |
133 | required_detachables: { |
134 | required_detachables: { |
134 foreach "$required_detachables" { |
135 foreach "$required_detachables" { |
135 | "«@id»": detachable_elements["«@id»"]`if "position()!=last()" > ,` |
136 | "«@id»": detachable_elements["«@id»"]`if "position()!=last()" > ,` |
136 } |
137 } |
137 | } |
138 | } |
|
139 apply "$parsed_widgets/widget[@id = $all_page_widgets/@id]", mode="per_page_widget_template"{ |
|
140 with "page_desc", "$desc"; |
|
141 } |
138 | }`if "position()!=last()" > ,` |
142 | }`if "position()!=last()" > ,` |
139 } |
143 } |
|
144 |
|
145 template "*", mode="per_page_widget_template"; |
140 |
146 |
141 function "debug_detachables" { |
147 function "debug_detachables" { |
142 | DETACHABLES: |
148 | DETACHABLES: |
143 foreach "$detachable_elements"{ |
149 foreach "$detachable_elements"{ |
144 | «@id» |
150 | «@id» |