feat(recipes): add location open and recipe ID copy to recipe modal

Add a de-emphasized meta footer to the recipe modal, mirroring the model
modal's hash footnote: a clickable file location on the left (opens the
recipe JSON via the generic open-file-location route, with the Docker
clipboard fallback) and a middle-truncated recipe ID with copy button on
the right.

The recipe detail API now exposes recipe_json_path so the frontend does
not have to guess the on-disk storage layout. Translations for the new
recipes.modal.* keys are filled in for all 9 locales, reusing the model
modal's openFileLocation wording per locale.
This commit is contained in:
Will Miao
2026-09-01 21:58:47 +08:00
parent 1fd7cc0123
commit 9584fa85c9
16 changed files with 665 additions and 2 deletions
+11
View File
@@ -353,6 +353,17 @@ class RecipeListingHandler:
if not recipe:
return web.json_response({"error": "Recipe not found"}, status=404)
# Expose the on-disk recipe JSON path so the modal can offer
# "open file location" without guessing the storage layout.
recipe = dict(recipe)
try:
json_path = await recipe_scanner.get_recipe_json_path(recipe_id)
except Exception: # pragma: no cover - details must still load
json_path = None
if json_path:
recipe["recipe_json_path"] = json_path
return web.json_response(recipe)
except Exception as exc:
self._logger.error(