From c8ab4952f4cd59c654e1fb386603ceee3c090d65 Mon Sep 17 00:00:00 2001 From: Terry Truong Date: Sun, 22 May 2022 20:59:33 +1000 Subject: Display multiple descriptions for compound-nodes --- backend/server.py | 22 +++++++++++++++++----- src/components/TileInfoModal.vue | 31 +++++++++++++++++++++---------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/backend/server.py b/backend/server.py index a232c48..f15c95f 100755 --- a/backend/server.py +++ b/backend/server.py @@ -105,10 +105,22 @@ def lookupNodeInfo(name, useReducedTree): temp = lookupNodes([name], useReducedTree) nodeObj = temp[name] if name in temp else None # Get node desc - row = cur.execute("SELECT desc, redirected, wiki_id, from_dbp from descs WHERE descs.name = ?", (name,)).fetchone() - descObj = None - if row != None: - descObj = {"text": row[0], "fromRedirect": row[1] == 1, "wikiId": row[2], "fromDbp": row[3] == 1} + descData = None + query = "SELECT desc, redirected, wiki_id, from_dbp from descs WHERE descs.name = ?" + match = re.fullmatch(r"\[(.+) \+ (.+)]", name) + if match == None: + row = cur.execute(query, (name,)).fetchone() + if row != None: + descData = {"text": row[0], "fromRedirect": row[1] == 1, "wikiId": row[2], "fromDbp": row[3] == 1} + else: + # Get descs for compound-node elements + descData = [None, None] + row = cur.execute(query, (match.group(1),)).fetchone() + if row != None: + descData[0] = {"text": row[0], "fromRedirect": row[1] == 1, "wikiId": row[2], "fromDbp": row[3] == 1} + row = cur.execute(query, (match.group(2),)).fetchone() + if row != None: + descData[1] = {"text": row[0], "fromRedirect": row[1] == 1, "wikiId": row[2], "fromDbp": row[3] == 1} # Get img info imgInfo = None if nodeObj != None and nodeObj["imgName"] != None: @@ -117,7 +129,7 @@ def lookupNodeInfo(name, useReducedTree): row = cur.execute(imgInfoQuery, (eolId,)).fetchone() imgInfo = {"eolId": row[0], "sourceUrl": row[1], "license": row[2], "copyrightOwner": row[3]} # - return {"descObj": descObj, "imgInfo": imgInfo, "nodeObj": nodeObj} + return {"descData": descData, "imgInfo": imgInfo, "nodeObj": nodeObj} class DbServer(BaseHTTPRequestHandler): def do_GET(self): diff --git a/src/components/TileInfoModal.vue b/src/components/TileInfoModal.vue index 0ffeb5c..4e39a4e 100644 --- a/src/components/TileInfoModal.vue +++ b/src/components/TileInfoModal.vue @@ -6,12 +6,15 @@ import type {TolMap} from '../tol'; import {TolNode} from '../tol'; import {capitalizeWords} from '../util'; +type DescData = {text: string, fromRedirect: boolean, wikiId: number, fromDbp: boolean}; + // Represents a node description + // Displays information about a tree-of-life node export default defineComponent({ data(){ return { tolNode: null as null | TolNode, - descObj: null as null | {text: string, fromRedirect: boolean, wikiId: number, fromDbp: boolean}, + descData: null as null | DescData | [DescData, DescData], imgInfo: null as null | {eolId: string, sourceUrl: string, license: string, copyrightOwner: string}, }; }, @@ -59,7 +62,7 @@ export default defineComponent({ .then(obj => { if (obj != null){ this.tolNode = obj.nodeObj; - this.descObj = obj.descObj; + this.descData = obj.descData; this.imgInfo = obj.imgInfo; } }); @@ -93,21 +96,29 @@ export default defineComponent({ -
+
+ (No description found) +
+
- Redirected: {{descObj.fromRedirect}}
- Short-description from {{descObj.fromDbp ? 'DBpedia' : 'Wikipedia'}}
- + Redirected: {{descData.fromRedirect}}
+ Short-description from {{descData.fromDbp ? 'DBpedia' : 'Wikipedia'}}
+
Wikipedia Link

-
- {{descObj.text}} -
+
{{descData.text}}
- (No description found) +
+

{{displayName.substring(1, displayName.indexOf(' + '))}}

+
{{descData[0].text}}
+
+
+

{{displayName.substring(displayName.indexOf(' + ') + 3, displayName.length - 1)}}

+
{{descData[1].text}}
+
-- cgit v1.2.3