From 96e378fd77d776530fbf49338225cafcefe5dc6d Mon Sep 17 00:00:00 2001 From: red Date: Mon, 2 Oct 2023 15:14:27 +0100 Subject: [PATCH] ough yaaeaaa --- image/script/generate_annotations.py | 42 +++++++--------------------- script/annotations.js | 41 +++++++++++++++++++++++++++ script/image_load.js | 21 ++++---------- style.css | 21 ++++++++++++++ 4 files changed, 77 insertions(+), 48 deletions(-) diff --git a/image/script/generate_annotations.py b/image/script/generate_annotations.py index 5e50348..072be85 100644 --- a/image/script/generate_annotations.py +++ b/image/script/generate_annotations.py @@ -1,33 +1,17 @@ import json import uuid -import aiohttp -import asyncio -async def get_post_data(session, folder_name): - url = f"https://sketchersunited.org/posts/{folder_name.split('by')[0]}" - headers = {"Accept": "text/json"} - async with session.get(url, headers=headers) as response: - if response.status == 200: - return await response.json() - return None - -async def process_line(session, line): +def process_line(line): folder_name, x, y, _, _, _ = line.strip().split() annotation_id = str(uuid.uuid4()) - post_data = await get_post_data(session, folder_name) - if post_data: - annotation_text = f'🖼️ {post_data["post"]["title"]}
👤 @{post_data["post"]["profile"]["username"]}' - else: - annotation_text = "Data not available" - annotation = { "@context": "http://www.w3.org/ns/anno.jsonld", "id": f"#{annotation_id}", "type": "Annotation", "body": [{ "type": "TextualBody", - "value": annotation_text, + "value": folder_name, "format": "text/html", "language": "en" }], @@ -43,19 +27,13 @@ async def process_line(session, line): print(f"Appended annotation for {folder_name}") return annotation -async def main(): - annotations = [] - async with aiohttp.ClientSession() as session: - with open('image.txt', 'r') as file: - lines = file.readlines() +annotations = [] +with open('../image.txt', 'r') as file: + lines = file.readlines() + for line in lines: + annotations.append(process_line(line)) - tasks = [process_line(session, line) for line in lines] - annotations = await asyncio.gather(*tasks) +with open('../../annotations/annotations.w3c.json', 'w') as output_file: + json.dump(annotations, output_file, indent=2) - with open('../annotations/annotations.w3c.json', 'w') as output_file: - json.dump(annotations, output_file, indent=2) - - print("Annotations JSON file created.") - -# Run the asynchronous code -asyncio.run(main()) +print("Annotations JSON file created.") diff --git a/script/annotations.js b/script/annotations.js index cab4f46..24f99f6 100644 --- a/script/annotations.js +++ b/script/annotations.js @@ -2,5 +2,46 @@ const anno = OpenSeadragon.Annotorious(viewer); anno.readOnly = true; anno.loadAnnotations('annotations/annotations.w3c.json'); +function sendMessageToServer(message) { + return new Promise((resolve, reject) => { + socket.addEventListener('message', (event) => { + if (event.data.toString().length > 5) { + let card = JSON.parse(event.data); + resolve(card); + } else { + reject('Invalid response from server'); + } + }); + socket.send(message); + }); +} +anno.on('clickAnnotation', async function(annotation) { + let annotationText = annotation.body[0].value; + + if (!annotationText.includes("sketchersunited.org/")) { + try { + let newAnnotation = annotation; + newAnnotation.body[0].value = "🔁 Downloading label..."; + anno.updateSelected(newAnnotation); + + let response = await sendMessageToServer(annotationText); + + let trueValueAnnotation = newAnnotation; + + let site = "https://sketchersunited.org" + let post_id = response.post.id + let post_name = response.post.title + let poster_id = response.post.profile.id + let poster_name = response.post.profile.username + let poster_avatar = response.post.profile.profile_image_url_thumb + + trueValueAnnotation.body[0].value = `
`; + + anno.updateSelected(trueValueAnnotation); + } catch (error) { + console.error('Error:', error); + } + } +}); diff --git a/script/image_load.js b/script/image_load.js index ea98055..0d3f4ad 100644 --- a/script/image_load.js +++ b/script/image_load.js @@ -1,21 +1,11 @@ let dictionaries = [] -const imagePromises = []; let image_count = 0 function load_image(image) { - return new Promise((resolve, reject) => { - viewer.addTiledImage({ - tileSource: image.tileSource, - x: image.x, - y: image.y, - opacity: 1, - success: () => { - resolve(); - }, - error: (err) => { - reject(err); - }, - }); + viewer.addTiledImage({ + tileSource: image.tileSource, + x: image.x, + y: image.y, }); } @@ -42,10 +32,9 @@ fetch('image/image.txt') blue: parseInt(parts[5]), }; - const promise = load_image(dictionary); + load_image(dictionary); dictionaries.push(dictionary); - imagePromises.push(promise); image_count++; } }); diff --git a/style.css b/style.css index 7da822f..cdd5961 100644 --- a/style.css +++ b/style.css @@ -151,6 +151,27 @@ a { color: transparent; } +.profile-container { + display:flex; + align-items: center; +} + +.profileimg { + flex: 0 0 20%; /* 10% of the container's width, not flexible, not growing, not shrinking */ + max-height: 100%; +} + +.profileimg img { + width: 100%; /* Make sure the image fills its container */ + height: auto; /* Maintain aspect ratio */ + border-radius: 50%; +} + +.profile { + flex: 1; /* Take up remaining space */ + padding-left: 1rem; /* Add some space between image and text */ +} + #close-button { position: absolute; font-size: 3rem;