diff options
| -rwxr-xr-x | backend/server.py | 22 | ||||
| -rw-r--r-- | 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({ </ul> </div> </div> - <div v-if="descObj != null"> + <div v-if="descData == null"> + (No description found) + </div> + <div v-else-if="!Array.isArray(descData)"> <div> - Redirected: {{descObj.fromRedirect}} <br/> - Short-description from {{descObj.fromDbp ? 'DBpedia' : 'Wikipedia'}} <br/> - <a :href="'https://en.wikipedia.org/?curid=' + descObj.wikiId" class="underline"> + Redirected: {{descData.fromRedirect}} <br/> + Short-description from {{descData.fromDbp ? 'DBpedia' : 'Wikipedia'}} <br/> + <a :href="'https://en.wikipedia.org/?curid=' + descData.wikiId" class="underline"> Wikipedia Link </a> </div> <hr/> - <div> - {{descObj.text}} - </div> + <div>{{descData.text}}</div> </div> <div v-else> - (No description found) + <div> + <h2 class="font-bold">{{displayName.substring(1, displayName.indexOf(' + '))}}</h2> + <div>{{descData[0].text}}</div> + </div> + <div> + <h2 class="font-bold">{{displayName.substring(displayName.indexOf(' + ') + 3, displayName.length - 1)}}</h2> + <div>{{descData[1].text}}</div> + </div> </div> </div> |
