svghmi/gen_index_xhtml.ysl2
branchsvghmi
changeset 2877 682bce953795
parent 2876 d2adbc273125
child 2878 bec552270ad1
--- a/svghmi/gen_index_xhtml.ysl2	Tue Mar 17 10:34:26 2020 +0100
+++ b/svghmi/gen_index_xhtml.ysl2	Tue Mar 17 11:24:07 2020 +0100
@@ -36,47 +36,14 @@
             exclude-result-prefixes="ns str regexp exsl func dyn" {
 
 
+    include hmi_tree.ysl2
+
+    include geometry.ysl2
+
     const "svg_root_id", "/svg:svg/@id";
     const "hmi_elements", "//svg:*[starts-with(@inkscape:label, 'HMI:')]";
 
-    const "hmi_pages", "$hmi_elements[func:parselabel(@inkscape:label)/widget/@type = 'Page']";
-
-    const "default_page" choose {
-        when "count($hmi_pages) > 1" {
-            const "Home_page", 
-                "$hmi_pages[func:parselabel(@inkscape:label)/widget/arg[1]/@value = 'Home']";
-            choose {
-                when "$Home_page" > Home
-                otherwise {
-                    error "No Home page defined!";
-                }
-            }
-        }
-        when "count($hmi_pages) = 0" {
-            error "No page defined!";
-        }
-        otherwise > «func:parselabel($hmi_pages/@inkscape:label)/widget/arg[1]/@value»
-    }
-
-    const "_categories" {
-        noindex > HMI_ROOT
-        noindex > HMI_PLC_STATUS
-        noindex > HMI_CURRENT_PAGE
-    }
-    const "categories", "exsl:node-set($_categories)";
-
-    include geometry.ysl2
-
-    include detachable_elements.ysl2
-
-    include hmi_tree.ysl2
-
-
-    def "func:is_descendant_path" {
-        param "descend";
-        param "ancest";
-        result "string-length($ancest) > 0 and starts-with($descend,$ancest)";
-    }
+    include detachable_pages.ysl2
 
     //////////////// Inline SVG
 
@@ -230,43 +197,6 @@
         }
     */
 
-    def "func:parselabel" {
-        param "label";
-        const "description", "substring-after($label,'HMI:')";
-
-        const "_args", "substring-before($description,'@')";
-        const "args" choose {
-            when "$_args" value "$_args";
-            otherwise value "$description";
-        }
-
-        const "_type", "substring-before($args,':')";
-        const "type" choose {
-            when "$_type" value "$_type";
-            otherwise value "$args";
-        }
-
-        const "ast" if "$type" widget {
-            attrib "type" > «$type»
-            foreach "str:split(substring-after($args, ':'), ':')" {
-                arg {
-                    attrib "value" > «.»
-                }
-            }
-            const "paths", "substring-after($description,'@')";
-            foreach "str:split($paths, '@')" {
-                if "string-length(.) > 0" path {
-                    attrib "value" > «.»
-                    const "path", ".";
-                    const "item", "$indexed_hmitree/*[@hmipath = $path]";
-                    if "count($item) = 1"
-                        attrib "index" > «$item/@index»
-                }
-            }
-        }
-
-        result "exsl:node-set($ast)";
-    }
 
     function "scripts"
     {
@@ -341,50 +271,7 @@
 
         |
         | var page_desc = {
-
-        foreach "$hmi_pages" {
-            const "desc", "func:parselabel(@inkscape:label)/widget";
-            const "page", ".";
-            const "p", "$geometry[@Id = $page/@id]";
-
-            const "page_all_elements", "func:all_related_elements($page)";
-
-            const "all_page_widgets","$hmi_elements[@id = $page_all_elements/@id and @id != $page/@id]";
-
-            const "page_relative_widgets",
-                "$all_page_widgets[func:is_descendant_path(func:parselabel(@inkscape:label)/widget/path/@value, $desc/path/@value)]";
-
-            // Take closest ancestor in detachable_elements
-            // since nested detachable elements are filtered out
-            const "required_detachables", 
-                """func:sumarized_elements($page_all_elements)/
-                   ancestor-or-self::*[@id = $detachable_elements/@id]""";
-
-            |   "«$desc/arg[1]/@value»": {
-            |     widget: hmi_widgets["«@id»"],
-            |     bbox: [«$p/@x», «$p/@y», «$p/@w», «$p/@h»],
-            if "$desc/path/@value" {
-                if "count($desc/path/@index)=0"
-                    warning > Page id="«$page/@id»" : No match for path "«$desc/path/@value»" in HMI tree
-            |     page_index: «$desc/path/@index»,
-            }
-            |     relative_widgets: [
-            foreach "$page_relative_widgets" {
-            |         hmi_widgets["«@id»"]`if "position()!=last()" > ,`
-            }
-            |     ],
-            |     absolute_widgets: [
-            foreach "$all_page_widgets[not(@id = $page_relative_widgets/@id)]" {
-            |         hmi_widgets["«@id»"]`if "position()!=last()" > ,`
-            }
-            |     ],
-            |     required_detachables: {
-            foreach "$required_detachables" {
-            |         "«@id»": detachable_elements["«@id»"]`if "position()!=last()" > ,`
-            }
-            |     }
-            |   }`if "position()!=last()" > ,`
-        }
+        apply "$hmi_pages", mode="page_desc";
         | }
 
         |