aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbackend/server.py59
-rw-r--r--src/components/Tile.vue4
-rw-r--r--src/components/TileInfoModal.vue22
-rw-r--r--src/tol.ts12
4 files changed, 48 insertions, 49 deletions
diff --git a/backend/server.py b/backend/server.py
index 0e208c3..c1e5538 100755
--- a/backend/server.py
+++ b/backend/server.py
@@ -43,30 +43,23 @@ def lookupNodes(names):
# Check for image file
match = re.fullmatch(r"\[(.+) \+ (.+)]", name)
if match == None:
- nodeObj["img"] = nodeNameToFile(name)
+ nodeObj["imgName"] = getNodeImg(name)
else:
- nodeObj["img"] = nodeNameToFile(match.group(1))
- if nodeObj["img"] == None:
- nodeObj["img"] = nodeNameToFile(match.group(2))
+ nodeObj["imgName"] = getNodeImg(match.group(1))
+ if nodeObj["imgName"] == None:
+ nodeObj["imgName"] = getNodeImg(match.group(2))
# Add node object
nodeObjs[name] = nodeObj
return nodeObjs
-def nodeNameToFile(name):
+def getNodeImg(name):
cur = dbCon.cursor()
row = cur.execute("SELECT name, id FROM eol_ids WHERE name = ?", (name,)).fetchone()
- if row == None:
- return None
- eolId = row[1]
- filename = str(eolId) + ".jpg"
- if not os.path.exists(imgDir + filename):
- return None
- row = cur.execute(
- "SELECT eol_id, source_url, license, copyright_owner FROM images WHERE eol_id = ?", (eolId,)).fetchone()
- if row == None:
- print("ERROR: No 'images' entry for image file {}".format(imgDir + filename), file=sys.stderr)
- return None
- [eolId, sUrl, license, cOwner] = row
- return {"filename": filename, "eolId": eolId, "sourceUrl": sUrl, "license": license, "copyrightOwner": cOwner}
+ if row != None:
+ eolId = row[1]
+ filename = str(eolId) + ".jpg"
+ if os.path.exists(imgDir + filename):
+ return filename
+ return None
def lookupName(name):
cur = dbCon.cursor()
results = []
@@ -90,11 +83,21 @@ def lookupName(name):
if len(results) > SEARCH_SUGG_LIMIT:
hasMore = True
del results[-1]
- return json.dumps([results, hasMore])
-def lookupDesc(name):
+ return [results, hasMore]
+def lookupNodeInfo(name):
cur = dbCon.cursor()
+ # Get node desc
row = cur.execute("SELECT desc, redirected from descs WHERE descs.name = ?", (name,)).fetchone()
- return json.dumps([row[0], row[1] == 1] if row != None else None)
+ desc = {"text": row[0], "fromRedirect": row[1] == 1} if row != None else None
+ # Get img info
+ imgInfoQuery = "SELECT eol_id, source_url, license, copyright_owner FROM" \
+ " images INNER JOIN eol_ids ON images.eol_id = eol_ids.id WHERE eol_ids.name = ?"
+ row = cur.execute(imgInfoQuery, (name,)).fetchone()
+ imgInfo = None
+ if row != None:
+ imgInfo = {"eolId": row[0], "sourceUrl": row[1], "license": row[2], "copyrightOwner": row[3]}
+ #
+ return {"desc": desc, "imgInfo": imgInfo}
class DbServer(BaseHTTPRequestHandler):
def do_GET(self):
@@ -114,7 +117,7 @@ class DbServer(BaseHTTPRequestHandler):
nodeObj = nodeObjs[name]
childNodeObjs = lookupNodes(nodeObj["children"])
childNodeObjs[name] = nodeObj
- self.respondJson(json.dumps(childNodeObjs))
+ self.respondJson(childNodeObjs)
return
elif reqType == "chain":
results = {}
@@ -124,7 +127,7 @@ class DbServer(BaseHTTPRequestHandler):
nodeObjs = lookupNodes([name])
if len(nodeObjs) == 0:
if not ranOnce:
- self.respondJson(json.dumps(results))
+ self.respondJson(results)
return
print("ERROR: Parent-chain node {} not found".format(name), file=sys.stderr)
break
@@ -142,24 +145,24 @@ class DbServer(BaseHTTPRequestHandler):
results.update(childNodeObjs)
# Check if root
if nodeObj["parent"] == None:
- self.respondJson(json.dumps(results))
+ self.respondJson(results)
return
else:
name = nodeObj["parent"]
elif reqType == "search":
self.respondJson(lookupName(name))
return
- elif reqType == "desc":
- self.respondJson(lookupDesc(name))
+ elif reqType == "info":
+ self.respondJson(lookupNodeInfo(name))
return
self.send_response(404)
self.end_headers()
self.end_headers()
- def respondJson(self, jsonStr):
+ def respondJson(self, val):
self.send_response(200)
self.send_header("Content-type", "application/json")
self.end_headers()
- self.wfile.write(jsonStr.encode("utf-8"))
+ self.wfile.write(json.dumps(val).encode("utf-8"))
server = HTTPServer((hostname, port), DbServer)
print("Server started at http://{}:{}".format(hostname, port))
diff --git a/src/components/Tile.vue b/src/components/Tile.vue
index a4083bc..744adc3 100644
--- a/src/components/Tile.vue
+++ b/src/components/Tile.vue
@@ -88,9 +88,9 @@ export default defineComponent({
leafStyles(): Record<string,string> {
return {
// Image (and scrims)
- backgroundImage: this.tolNode.img?.filename != null ?
+ backgroundImage: this.tolNode.imgName != null ?
'linear-gradient(to bottom, rgba(0,0,0,0.4), #0000 40%, #0000 60%, rgba(0,0,0,0.4) 100%),' +
- 'url(\'/img/' + this.tolNode.img.filename.replaceAll('\'', '\\\'') + '\')' :
+ 'url(\'/img/' + this.tolNode.imgName.replaceAll('\'', '\\\'') + '\')' :
'none',
backgroundColor: '#1c1917',
backgroundSize: 'cover',
diff --git a/src/components/TileInfoModal.vue b/src/components/TileInfoModal.vue
index b59a5c9..7cd75b7 100644
--- a/src/components/TileInfoModal.vue
+++ b/src/components/TileInfoModal.vue
@@ -11,6 +11,7 @@ export default defineComponent({
return {
desc: null as null | string,
fromRedirect: false,
+ imgInfo: null as null | {eolId: string, sourceUrl: string, license: string, copyrightOwner: string},
};
},
props: {
@@ -24,9 +25,9 @@ export default defineComponent({
},
imgStyles(): Record<string,string> {
return {
- backgroundImage: this.tolNode.img?.filename != null ?
+ backgroundImage: this.tolNode.imgName != null ?
'linear-gradient(to bottom, rgba(0,0,0,0.4), #0000 40%, #0000 60%, rgba(0,0,0,0.4) 100%),' +
- 'url(\'/img/' + this.tolNode.img.filename.replaceAll('\'', '\\\'') + '\')' :
+ 'url(\'/img/' + this.tolNode.imgName.replaceAll('\'', '\\\'') + '\')' :
'none',
backgroundColor: '#1c1917',
width: this.uiOpts.infoModalImgSz + 'px',
@@ -45,14 +46,17 @@ export default defineComponent({
},
created(){
let url = new URL(window.location.href);
- url.pathname = '/data/desc';
+ url.pathname = '/data/info';
url.search = '?name=' + encodeURIComponent(this.node.name);
fetch(url.toString())
.then(response => response.json())
.then(obj => {
if (obj != null){
- this.desc = obj[0];
- this.fromRedirect = obj[1];
+ if (obj.desc != null){
+ this.desc = obj.desc.text;
+ this.fromRedirect = obj.desc.fromRedirect;
+ }
+ this.imgInfo = obj.imgInfo;
}
});
},
@@ -72,11 +76,11 @@ export default defineComponent({
<div class="flex">
<div>
<div :style="imgStyles" class="mr-4" alt="an image"></div>
- <div v-if="tolNode.img != null">
+ <div v-if="imgInfo != null">
<ul>
- <li>License: {{tolNode.img.license}}</li>
- <li><a :href="tolNode.img.sourceUrl" class="underline">Source URL</a></li>
- <li>Copyright Owner: {{tolNode.img.copyrightOwner}}</li>
+ <li>License: {{imgInfo.license}}</li>
+ <li><a :href="imgInfo.sourceUrl" class="underline">Source URL</a></li>
+ <li>Copyright Owner: {{imgInfo.copyrightOwner}}</li>
</ul>
</div>
</div>
diff --git a/src/tol.ts b/src/tol.ts
index 77c401e..073f848 100644
--- a/src/tol.ts
+++ b/src/tol.ts
@@ -10,20 +10,12 @@ export class TolNode {
parent: string | null;
tips: number;
pSupport: boolean;
- img: null | {
- filename: string,
- eolId: string,
- sourceUrl: string,
- license: string,
- copyrightOwner: string
- };
- desc: null | [string, boolean];
+ imgName: null | string;
constructor(children: string[] = [], parent = null, tips = 0, pSupport = false){
this.children = children;
this.parent = parent;
this.tips = tips;
this.pSupport = pSupport;
- this.img = null;
- this.desc = null;
+ this.imgName = null;
}
}