[TIC-Core] UI element HF and QT implemented. GBS support of category
[archive/20170607/tools/tic-core.git] / tic / parser / view_parser.py
index eac7a55..bb6f06d 100644 (file)
@@ -76,7 +76,7 @@ def make_view_data(pkg_group):
 
                             if pkg.get('meta'):
                                 if not pkg['name'] in children:
-                                    meta_nodes.append(make_linked_meta_node(pkg['name'], pkg['summary']))
+                                    meta_nodes.append(make_linked_meta_node(pkg['name'], pkg['summary'], meta_info['category']))
                             else:
                                 meta_nodes.append(make_node(pkg, meta_info.get('category')))
         # Added 'zz' to non meta-package because they are to be listed last
@@ -91,8 +91,8 @@ def make_view_data(pkg_group):
         return n
     def make_meta_node(pkgname, viewtext):
         return dict(text=viewtext, metaname=pkgname, nodes=[])
-    def make_linked_meta_node(pkgname, viewtext):
-        return dict(text='<i>'+viewtext+'</i>', metaname=pkgname, nodes=[])
+    def make_linked_meta_node(pkgname, viewtext, cat):
+        return dict(text='&nbsp;&nbsp;<i>'+viewtext+'</i>', metaname=pkgname, nodes=[], category=cat, tooltip="This is a link of a building block.")
     def is_blank_ui_meta_node(pkgname):
         return (pkgname[-8:-2] == '__UI__')
     def handle_ui_meta_node(tag, node):
@@ -111,6 +111,10 @@ def make_view_data(pkg_group):
         elif tag == 'HT' or tag == 'ht':
             # Keep the summary (TODO: verify the usage of HTML tags.)
             node['text'] = node['text'] # Do we need conversion?
+        elif tag == 'HF' or tag == 'hf':
+            node['text'] = '<p style="height:0px; margin-bottom:-10px"></p>'
+        elif tag == 'QT' or tag == 'qt':
+            node['text'] = '<p style="height:0px; margin-bottom:-16px"></p>'
         else:
             node['text'] = ''
         return node
@@ -130,6 +134,7 @@ def make_view_data(pkg_group):
                 # e.g., Convert http://a.com/a/ to https://a.com/a/blahblah.ks
                 # Works for file-indexing html
                 if ksURL[-3:].lower() != ".ks":
+                    m = None
                     error = 0
                     if ksURL[-1:] != "/":
                         ksURL += "/"
@@ -138,23 +143,28 @@ def make_view_data(pkg_group):
                         m = re.search('>([^<]*\\.ks)\\s*<', r.text)
                     else:
                         error = 1
-                    if error == 0 and not m.group(1):
+                    if error == 0 and not m:
                         m = re.search('"([^"]*\\.ks)\\s*"', r.text)
-                        if not m.group(1):
+                        if not m:
                             m = re.search("'([^']*\\.ks)\\s*'", r.text)
-                            if not m.group(1):
+                            if not m:
                                 error = 1
                     if error == 1:
                         node['icon'] = 'glyphicon glyphicon-remove-sign'
                         node['tooltip'] = 'Cannot find image base from' + ksURL
                         return node
-                    ksURL += m.group(1)
+                    ksURL += m.group(0)
                 node['tooltip'] = 'Image base from '+ksURL
+                node['icon'] = 'glyphicon glyphicon-list-alt'
                 node['ks'] = ksURL
             elif desc[0:10] == '__EXPAND__':
                 # Omit the first line with __EXPAND__ from showing.
                 pkg_info['description'] = desc[len(desc.splitlines(True)[0]):]
-                node['state'] = { 'expanded': True }
+                option = desc.splitlines()[0][10:].strip(': \t')
+                if len(option) == 0:
+                    node['expandcondition'] = 'all'
+                else:
+                    node['expandcondition'] = option
         return node
 
     # view_data for tree view on web-ui
@@ -195,6 +205,18 @@ def make_view_data(pkg_group):
         view_ref[root[0]] = root_node
         if root[0] in category_dict:
             root_node['category'] = category_dict[root[0]]
+        else:
+            # Backup routine for GBS, which does not seem to publish suggest info correctly.
+            # TODO: This routine has hardcoded category names, which should be improved.
+            m = re.search('(?<=root-)[a-zA-Z]*', root[0])
+            if m:
+                cat = m.group(0)
+                if cat == 'domain':
+                    cat = 'domains'
+                if cat == 'feature':
+                    cat = 'epicfeatures'
+                root_node['category'] = cat
+                logger.info("Fallback for "+cat+" for "+root[0])
         if is_blank_ui_meta_node(root[0]):
             name = root[0]
             sub1_node = handle_ui_meta_node(name[-2:], root_node)