diff --git a/photojawn/generate.py b/photojawn/generate.py index 5d721e2..1cd1c9d 100644 --- a/photojawn/generate.py +++ b/photojawn/generate.py @@ -7,6 +7,7 @@ from typing import Iterator, Optional from jinja2 import Environment, FileSystemLoader, select_autoescape from PIL import Image, UnidentifiedImageError from rich.progress import Progress, track +from markdown import markdown from photojawn.config import Config @@ -19,6 +20,7 @@ class ImageDirectory: children: list["ImageDirectory"] images: list["ImagePath"] is_root: bool = False + description: str = "" cover_path: Optional["ImagePath"] = None @@ -105,7 +107,11 @@ def find_images(root_path: Path) -> ImageDirectory: for filename in sorted(filenames): file_path = dirpath / filename - if is_image(file_path): + if filename == "description.txt": + image_dir.description = file_path.read_text() + elif filename == "description.md": + image_dir.description = markdown(file_path.read_text()) + elif is_image(file_path): ip = ImagePath(file_path) # Set a cover image for the album. Use "cover.jpg" if one exists, @@ -154,7 +160,9 @@ def generate_thumbnails(config: Config, root_dir: ImageDirectory) -> None: thumb_img = orig_img.copy() thumb_img.thumbnail(config.thumbnail_size) thumb_img.save(thumb_path) - logger.info(f'Generated thumbnail size "{image_path.path}" -> "{thumb_path}"') + logger.info( + f'Generated thumbnail size "{image_path.path}" -> "{thumb_path}"' + ) screen_path = image_path.display_path() if not screen_path.exists() or not config.quick: diff --git a/photojawn/skel/_templates/album.html b/photojawn/skel/_templates/album.html index 618b23e..5dfcf91 100644 --- a/photojawn/skel/_templates/album.html +++ b/photojawn/skel/_templates/album.html @@ -12,6 +12,11 @@ {% if not album_dir.is_root %}

{{album_dir.path.name}}

{% endif %} + + {% if album_dir.description %} + {{ album_dir.description | safe }} + {% endif %} + {% if album_dir.children %}
{% for child in album_dir.children %} diff --git a/poetry.lock b/poetry.lock index 1881b65..1078622 100644 --- a/poetry.lock +++ b/poetry.lock @@ -103,6 +103,21 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "markdown" +version = "3.6" +description = "Python implementation of John Gruber's Markdown." +optional = false +python-versions = ">=3.8" +files = [ + {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, + {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, +] + +[package.extras] +docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] +testing = ["coverage", "pyyaml"] + [[package]] name = "markdown-it-py" version = "3.0.0" @@ -565,4 +580,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "773580221534dd8152d5385b517f068c9a92fc905eaf7fe0356a97daaa0b7f96" +content-hash = "84f4661f5720da5427ac7bcd4e50674ca6017413fdada09d6bd7ea9b8f650818" diff --git a/pyproject.toml b/pyproject.toml index 035b3e4..76278bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ jinja2 = "^3.1.4" pillow = "^10.4.0" rich = "^13.7.1" pyyaml = "^6.0.1" +markdown = "^3.6" [tool.poetry.group.dev.dependencies] pytest = "*"