feat: enhance keys page with grouped key display and inline editing functionality

This commit is contained in:
2026-03-29 20:44:33 +00:00
parent b5a5755b6f
commit b003e2f0df
3 changed files with 442 additions and 289 deletions
+37 -2
View File
@@ -123,11 +123,29 @@ def _keys_context():
key_query += f" ORDER BY {order_by} "
keys = conn.execute(key_query, params).fetchall()
conn.close()
key_maps = {k: sorted(v) for k, v in key_maps.items()}
# Build info view data: all keys (unfiltered), grouped by map then unassigned.
all_keys = conn.execute("""
SELECT k.id, k.name, k.grid_image_url, k.wiki_url,
r.priority, r.reason, COALESCE(r.used_in_quest, 0) AS used_in_quest
FROM keys k
LEFT JOIN key_ratings r ON k.id = r.key_id
ORDER BY k.name ASC
""").fetchall()
conn.close()
# keys_by_map: list of (map_row, [key_row, ...]) sorted by map name
keys_by_map = []
for m in sorted(maps, key=lambda r: r["name"]):
bucket = [k for k in all_keys if m["id"] in key_maps.get(k["id"], [])]
keys_by_map.append((m, bucket))
unassigned_keys = [k for k in all_keys if not key_maps.get(k["id"])]
return dict(keys=keys, maps=maps, key_maps=key_maps,
map_filter=map_filter, sort=sort, show=show)
map_filter=map_filter, sort=sort, show=show,
keys_by_map=keys_by_map, unassigned_keys=unassigned_keys)
@app.route("/keys")
@@ -183,6 +201,23 @@ def rate_key():
return redirect(f"{base_url}#key-{key_id}")
@app.route("/rate_json", methods=["POST"])
def rate_json():
data = request.get_json(force=True)
key_id = data.get("key_id")
if not key_id:
return jsonify({"ok": False, "error": "missing key_id"}), 400
priority = data.get("priority") # None or int
reason = data.get("reason", "")
used_in_quest = 1 if data.get("used_in_quest") else 0
map_ids = [int(m) for m in data.get("map_ids", [])]
conn = get_db()
_update_key(conn, key_id, priority, reason, used_in_quest, map_ids)
conn.commit()
conn.close()
return jsonify({"ok": True})
def _update_key(conn, key_id, priority, reason, used_in_quest, map_ids):
conn.execute("""
INSERT INTO key_ratings (key_id, priority, reason, used_in_quest)