diff --git a/.gitignore b/.gitignore index 3b1f4ca..f88f74e 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ prompts_log.jsonl publish.sh test.py .vscode/launch.json +favourites.json diff --git a/routes/gallery_routes.py b/routes/gallery_routes.py index 891c1d6..a8673b7 100644 --- a/routes/gallery_routes.py +++ b/routes/gallery_routes.py @@ -1,15 +1,58 @@ -from flask import Blueprint, render_template +from flask import Blueprint, render_template, jsonify, request import os +import json bp = Blueprint("gallery_routes", __name__) image_folder = "./output" +favourites_file = "./favourites.json" + +def get_favourites(): + if not os.path.exists(favourites_file): + return [] + with open(favourites_file, 'r') as f: + return json.load(f) + +def save_favourites(favourites): + with open(favourites_file, 'w') as f: + json.dump(favourites, f) @bp.route("/images", methods=["GET"]) def gallery(): + favourites = get_favourites() images = [ - {"filename": f} + {"filename": f, "favourited": f in favourites} for f in os.listdir(image_folder) if f.lower().endswith(("png", "jpg", "jpeg", "gif")) ] images = sorted(images, key=lambda x: os.path.getmtime(os.path.join(image_folder, x["filename"])), reverse=True) return render_template("gallery.html", images=images) + +@bp.route("/favourites", methods=["GET"]) +def get_favourites_route(): + return jsonify(get_favourites()) + +@bp.route("/favourites/add", methods=["POST"]) +def add_favourite(): + data = request.get_json() + filename = data.get("filename") + if not filename: + return jsonify({"status": "error", "message": "Filename missing"}), 400 + + favourites = get_favourites() + if filename not in favourites: + favourites.append(filename) + save_favourites(favourites) + return jsonify({"status": "success"}) + +@bp.route("/favourites/remove", methods=["POST"]) +def remove_favourite(): + data = request.get_json() + filename = data.get("filename") + if not filename: + return jsonify({"status": "error", "message": "Filename missing"}), 400 + + favourites = get_favourites() + if filename in favourites: + favourites.remove(filename) + save_favourites(favourites) + return jsonify({"status": "success"}) diff --git a/templates/gallery.html b/templates/gallery.html index 680f0e6..145ffe3 100644 --- a/templates/gallery.html +++ b/templates/gallery.html @@ -116,6 +116,22 @@ /* lower than lightbox (999) */ } + .favourites-button { + position: fixed; + top: 20px; + right: 120px; + z-index: 500; + } + + .favourite-heart { + position: absolute; + top: 20px; + left: 30px; + font-size: 30px; + color: white; + cursor: pointer; + } + .button-link { background: #333; color: white; @@ -127,6 +143,7 @@ transition: background 0.3s; display: inline-block; text-align: center; + border: none; } .button-link:hover { @@ -179,6 +196,7 @@ Home +

Image Archive

@@ -188,6 +206,7 @@