summaryrefslogtreecommitdiff
path: root/templates/blocks/gallery.html
diff options
context:
space:
mode:
authorDennis Fink2026-08-08 19:32:47 +0200
committerDennis Fink2026-08-08 19:32:47 +0200
commit1af817249d115ff7013d3ab1a30ea145e30924c7 (patch)
treeabaccd3582453e702754da0f111bf0a75002f14a /templates/blocks/gallery.html
parent0d0b6cf226c5a06c265de540ca0c2997e7ed2b06 (diff)
downloaddennisfink.me-1af817249d115ff7013d3ab1a30ea145e30924c7.tar.gz
dennisfink.me-1af817249d115ff7013d3ab1a30ea145e30924c7.zip
Add aspect-ratio-aware image galleries
This adds a project-local gallery plugin that builds deterministic rectangular image layouts from attachment aspect ratios, with both in-process and disk-backed layout caching. It also adds gallery flow blocks, templates, and CSS so posts can include responsive galleries with lazy-loaded images, configurable gaps, target ratios, and the existing breakout/centering utilities.
Diffstat (limited to 'templates/blocks/gallery.html')
-rw-r--r--templates/blocks/gallery.html32
1 files changed, 32 insertions, 0 deletions
diff --git a/templates/blocks/gallery.html b/templates/blocks/gallery.html
new file mode 100644
index 0000000..414eaa0
--- /dev/null
+++ b/templates/blocks/gallery.html
@@ -0,0 +1,32 @@
+{% macro render_node(node, gap) %}
+ {% if node.__class__.__name__ == "ImageNode" %}
+ {% with this=node.block %}
+ {% include "blocks/gallery-image.html" %}
+ {% endwith %}
+ {% elif node.direction == "row" %}
+ <div data-direction="row">
+ <div style="--width: calc({{ node.first_width_share * 100 }}% + {{ node.first_gap_coefficient * gap }}rem)">
+ {{ render_node(node.first, gap) }}
+ </div>
+ <div style="--width: calc({{ node.second_width_share * 100 }}% + {{ node.second_gap_coefficient * gap }}rem)">
+ {{ render_node(node.second, gap) }}
+ </div>
+ </div>
+ {% else %}
+ <div data-direction="column">
+ <div>{{ render_node(node.first, gap) }}</div>
+ <div>{{ render_node(node.second, gap) }}</div>
+ </div>
+ {% endif %}
+{% endmacro %}
+
+{% set layout = this["images"].blocks
+ | gallery_layout(
+ record,
+ target_ratio=this["target_ratio"]
+ ) %}
+
+{% if layout %}
+ <div class="gallery{% if this["breakout"] != "none" %} breakout-{{ this["breakout"] }}{% endif %}"
+ style="--gap: {{ this["gap"] }}rem">{{ render_node(layout, this["gap"]) }}</div>
+{% endif %}