aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Truong <terry06890@gmail.com>2022-06-30 22:05:42 +1000
committerTerry Truong <terry06890@gmail.com>2022-06-30 22:05:42 +1000
commitc591233a4085176854b110fbffeae12d8568fe54 (patch)
treeeacd33e3e9185957c6fe9e0f349bfd9f1173361e
parentc2b9a8b7a706cdca58dab7f4a980401e1c20a602 (diff)
Account for compound-node subname-denoted nodes that were trimmed
-rwxr-xr-xbackend/cgi-bin/data.py13
-rw-r--r--src/components/TileInfoModal.vue17
-rw-r--r--src/lib.ts2
3 files changed, 17 insertions, 15 deletions
diff --git a/backend/cgi-bin/data.py b/backend/cgi-bin/data.py
index b152c14..9b4ca40 100755
--- a/backend/cgi-bin/data.py
+++ b/backend/cgi-bin/data.py
@@ -76,9 +76,9 @@ class NodeInfo:
self.imgInfo = imgInfo # null | ImgInfo
class InfoResponse:
" Sent as responses to 'info' requests "
- def __init__(self, nodeInfo, subNodesInfo = None):
+ def __init__(self, nodeInfo, subNodesInfo):
self.nodeInfo = nodeInfo # NodeInfo
- self.subNodesInfo = subNodesInfo # [] | [NodeInfo, NodeInfo]
+ self.subNodesInfo = subNodesInfo # [] | [NodeInfo | null, NodeInfo | null]
# For data lookup
def lookupNodes(names, useReducedTree, dbCur):
@@ -191,11 +191,10 @@ def lookupInfo(name, useReducedTree, dbCur):
subNames = [match.group(1), match.group(2)] if match != None else []
if len(subNames) > 0:
nameToSubNodes = lookupNodes(subNames, useReducedTree, dbCur)
- if len(nameToSubNodes) < 2:
- print(f"ERROR: Unable to find sub-names entries for {name}", file=sys.stderr)
- return None
+ if len(nameToSubNodes) < 2: # Possible when a subname-denoted node has been trimmed away
+ subNames = [n if n in nameToSubNodes else None for n in subNames]
nameToNodes.update(nameToSubNodes)
- namesToLookup = [name] if len(subNames) == 0 else subNames
+ namesToLookup = [name] if len(subNames) == 0 else [n for n in subNames if n != None]
# Get desc info
nameToDescInfo = {}
query = "SELECT name, desc, wiki_id, redirected, from_dbp FROM" \
@@ -219,7 +218,7 @@ def lookupInfo(name, useReducedTree, dbCur):
nameToNodes[n],
nameToDescInfo[n] if n in nameToDescInfo else None,
nameToImgInfo[n] if n in nameToImgInfo else None
- ) for n in [name] + subNames
+ ) if n != None else None for n in [name] + subNames
]
return InfoResponse(nodeInfoObjs[0], nodeInfoObjs[1:])
diff --git a/src/components/TileInfoModal.vue b/src/components/TileInfoModal.vue
index 129e861..6962916 100644
--- a/src/components/TileInfoModal.vue
+++ b/src/components/TileInfoModal.vue
@@ -17,7 +17,10 @@
<h1 v-if="nodes.length > 1" class="text-center font-bold">
{{getDisplayName(subNames![idx], nodes[idx])}}
</h1>
- <div class="flex gap-1">
+ <div v-if="nodes[idx] == null" class="text-center">
+ (This node was trimmed away)
+ </div>
+ <div v-else class="flex gap-1">
<div class="w-1/2">
<div v-if="imgInfos[idx] == null" :style="getImgStyles(nodes[idx])"/>
<a v-else :href="imgInfos[idx]!.url" target="_blank">
@@ -86,25 +89,25 @@ export default defineComponent({
tolNode(): TolNode {
return this.infoResponse.nodeInfo.tolNode;
},
- nodes(): TolNode[] {
+ nodes(): (TolNode | null)[] {
if (this.infoResponse.subNodesInfo.length == 0){
return [this.tolNode];
} else {
- return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo.tolNode);
+ return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo != null ? nodeInfo.tolNode : null);
}
},
imgInfos(): (ImgInfo | null)[] {
if (this.infoResponse.subNodesInfo.length == 0){
return [this.infoResponse.nodeInfo.imgInfo];
} else {
- return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo.imgInfo);
+ return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo != null ? nodeInfo.imgInfo : null);
}
},
descInfos(): (DescInfo | null)[] {
if (this.infoResponse.subNodesInfo.length == 0){
return [this.infoResponse.nodeInfo.descInfo];
} else {
- return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo.descInfo);
+ return this.infoResponse.subNodesInfo.map(nodeInfo => nodeInfo != null ? nodeInfo.descInfo : null);
}
},
subNames(): [string, string] | null {
@@ -129,9 +132,9 @@ export default defineComponent({
return `${capitalizeWords(tolNode.commonName)} (aka ${capitalizeWords(name)})`;
}
},
- getImgStyles(tolNode: TolNode): Record<string,string> {
+ getImgStyles(tolNode: TolNode | null): Record<string,string> {
let imgName = null;
- if (typeof(tolNode.imgName) === 'string'){ // Exclude string-array case
+ if (tolNode != null && typeof(tolNode.imgName) === 'string'){ // Exclude string-array case
imgName = tolNode.imgName;
}
return {
diff --git a/src/lib.ts b/src/lib.ts
index bbeb02a..614620d 100644
--- a/src/lib.ts
+++ b/src/lib.ts
@@ -58,7 +58,7 @@ export type NodeInfo = {
};
export type InfoResponse = {
nodeInfo: NodeInfo,
- subNodesInfo: [] | [NodeInfo, NodeInfo],
+ subNodesInfo: [] | [NodeInfo | null, NodeInfo | null],
};
// Used by auto-mode and tutorial