diff --git a/src/jakecharman/__init__.py b/src/jakecharman/__init__.py index f3f226b..b5829e7 100644 --- a/src/jakecharman/__init__.py +++ b/src/jakecharman/__init__.py @@ -149,30 +149,16 @@ def sitemap(): return Response(ET.tostring(root, encoding='utf-8'), 200, {'content-type': 'application/xml'}) -@app.route('/image/') -def image( image_name: str) -> Response: - ''' Resize and return an image. ''' +def resize_image(image_name: str, size: tuple): + w = size[0] + h = size[1] + md_directory = LocalStorage(md_path) - - w = int(request.args.get('w', 0)) - h = int(request.args.get('h', 0)) - - if w == 0 and h == 0: - return send_from_directory(md_directory.uri, path.join('images', image_name)) - try: - the_image = Image.open(path.join(md_directory.uri, 'images', image_name)) - except FileNotFoundError: - return Response(status=404) - except UnidentifiedImageError: - return send_from_directory(md_directory.uri, path.join('images', image_name)) - + the_image = Image.open(path.join(md_directory.uri, 'images', image_name)) max_width, max_height = the_image.size - if (w >= max_width and h >= max_height): - return send_from_directory(md_directory.uri, path.join('images', image_name)) - - if path.exists(path.join('images', f'{w}-{h}-{image_name}')): - return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) + if path.exists(path.join(md_directory.uri, 'images', f'{w}-{h}-{image_name}')) or (w >= max_width and h >= max_height): + raise FileExistsError() req_size = [max_width, max_height] if w > 0: @@ -185,6 +171,45 @@ def image( image_name: str) -> Response: the_image.save(resized_img, format=the_image.format) the_image.save(path.join(md_directory.uri, 'images', f'{w}-{h}-{image_name}'), the_image.format) - response = make_response(resized_img.getvalue()) - response.headers.set('Content-Type', f'image/{the_image.format}') - return response +@app.route('/image/') +def image( image_name: str) -> Response: + ''' Resize and return an image. ''' + md_directory = LocalStorage(md_path) + + w = int(request.args.get('w', 0)) + h = int(request.args.get('h', 0)) + + if w == 0 and h == 0: + return send_from_directory(md_directory.uri, path.join('images', image_name)) + if path.exists(path.join(md_directory.uri, 'images', f'{w}-{h}-{image_name}')): + return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) + try: + resize_image(image_name, (w, h)) + except FileNotFoundError: + return Response(status=404) + except UnidentifiedImageError: + return send_from_directory(md_directory.uri, path.join('images', image_name)) + except FileExistsError: + return send_from_directory(md_directory.uri, path.join('images', image_name)) + + return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) + +@app.route('/image/thumb/') +def img_thumb(image_name: str): + ''' Flask route to load an image ''' + md_directory = LocalStorage(md_path) + w = 400 + h = 0 + thumb_file = path.join(md_directory.uri, 'images', f'{w}-{h}-{image_name}') + if path.exists(thumb_file): + return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) + try: + resize_image(image_name, (w, h)) + except FileNotFoundError: + return Response(status=404) + except UnidentifiedImageError: + return send_from_directory(md_directory.uri, path.join('images', image_name)) + except FileExistsError: + return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) + + return send_from_directory(md_directory.uri, path.join('images', f'{w}-{h}-{image_name}')) diff --git a/src/jakecharman/templates/article.html b/src/jakecharman/templates/article.html index fd0f5a4..74a9689 100755 --- a/src/jakecharman/templates/article.html +++ b/src/jakecharman/templates/article.html @@ -1,5 +1,18 @@ {% extends 'main.html' %} +{% block head %} +{% if metadata.gallery %} + +{% endif %} +{% endblock %} + {% block content %}
diff --git a/src/jakecharman/templates/main.html b/src/jakecharman/templates/main.html index b90b16d..3757e4c 100644 --- a/src/jakecharman/templates/main.html +++ b/src/jakecharman/templates/main.html @@ -12,10 +12,12 @@ + + + {% block head %}{% endblock %}
diff --git a/src/static/js/gallery.js b/src/static/js/gallery.js new file mode 100644 index 0000000..e69de29 diff --git a/src/static/style/desktop.css b/src/static/style/desktop.css index 03374ff..3a2ac91 100755 --- a/src/static/style/desktop.css +++ b/src/static/style/desktop.css @@ -122,4 +122,10 @@ .link>a>h3 { padding-top: 20px; } + + .photo-gallery>img { + width: 20vw; + padding: 10px; + height: 14vw; + } } diff --git a/src/static/style/mobile.css b/src/static/style/mobile.css index afeb6bf..bf8b704 100755 --- a/src/static/style/mobile.css +++ b/src/static/style/mobile.css @@ -313,4 +313,19 @@ pre{ .category>h3 { margin-bottom: 10px; +} + +.photo-gallery { + display: flex; + flex-direction: row; + justify-content: center; + flex-wrap: wrap; + margin-bottom: 20px; +} + +.photo-gallery>img { + width: 45vw; + padding: 5px; + height: 31vw; + object-fit: cover; } \ No newline at end of file