+ def make_linked_meta_node(pkgname, viewtext, cat):
+ return dict(text=' <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):
+ node['selectable'] = False
+ node['hideCheckbox'] = True
+ if tag == 'BR' or tag == 'br':
+ node['text'] = ''
+ elif tag == 'HR' or tag == 'hr':
+ node['text'] = '<hr style="margin-bottom: 0px; margin-top: 0px; border-style: inset; border-width: 3px" />'
+ elif tag == 'SD' or tag == 'sd':
+ node['text'] = ''
+ node['backColor'] = '#101010'
+ elif tag == 'SM' or tag == 'sm':
+ # Keep the summary text
+ node['text'] = node['text']
+ 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
+ def handle_description(node):
+ if 'metaname' in node:
+ name = node['metaname']
+ pkg_info = pkg_dict[name]
+ desc = pkg_info.get('description')
+ if desc[0:10] == '__KS_URL__':
+ logger.info("Processing "+name+" for its description: "+pkg_info.get('description'))
+ # Extract URL from __KS_URL__
+ ksURL = desc[11:].splitlines()[0].strip()
+ # Omit the first line with __KS_URL__ from showing.
+ pkg_info['description'] = desc[len(desc.splitlines(True)[0]):]
+
+ # Search for filename if directory is given
+ # 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 += "/"
+ r = requests.get(ksURL)
+ if r.status_code == requests.codes.ok:
+ m = re.search('>([^<]*\\.ks)\\s*<', r.text)
+ else:
+ error = 1
+ if error == 0 and not m:
+ m = re.search('"([^"]*\\.ks)\\s*"', r.text)
+ if not m:
+ m = re.search("'([^']*\\.ks)\\s*'", r.text)
+ 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(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]):]
+ option = desc.splitlines()[0][10:].strip(': \t')
+ if len(option) == 0:
+ node['expandcondition'] = 'all'
+ else:
+ node['expandcondition'] = option
+ return node