Add resource-tiles shortcode

Displays a page's file resources as a responsive grid of cards with a
thumbnail (explicit param, name-matched image, or a generic file icon),
title, size and download link. Meant for a downloads page offering a
handful of PDFs.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-02 21:24:38 +02:00
co-authored by Claude Sonnet 5
parent 071ee344a3
commit 13fb67a0f8
3 changed files with 191 additions and 0 deletions
+55
View File
@@ -33,6 +33,61 @@ first line of a page's content to get a hero flush against the navbar.
Optional params: `title`, `height` (a CSS length such as `60vh`, which
crops the image with `object-fit: cover`) and `class`.
### `resource-tiles`
Displays a page's file resources as a responsive grid of cards
("tiles"), each with a thumbnail, a title, the file size and a download
link. Meant for a downloads page that offers a handful of PDFs,
spreadsheets, archives, …
```
{{< resource-tiles >}}
```
Params:
| Param | Default | Meaning |
|---------|---------|--------------------------------------------------------|
| `match` | `*.pdf` | glob selecting which page resources to show |
| `cols` | `3` | number of columns on large screens |
| `sort` | — | resource field to order by (`title`, `name`, `weight`) |
| `class` | — | extra CSS classes for the wrapping row |
Thumbnails are resolved per resource, in order of preference:
1. a `thumbnail` param on the resource, pointing at an image in the same
page bundle;
2. an image resource whose name matches the file, e.g. `report.png` or
`report.pdf.png` next to `report.pdf`;
3. a generic file icon showing the upper-cased extension.
Hugo cannot rasterise PDFs itself, so first-page previews have to be
produced as a build step. With poppler-utils installed, generating a
`<name>.png` next to every PDF under `content/` is a one-liner:
```sh
find content -name '*.pdf' -exec sh -c \
'pdftocairo -png -singlefile -scale-to-x 600 -scale-to-y -1 "$1" "${1%.pdf}"' _ {} \;
```
Run it before `hugo`; the tiles then use these as thumbnails
automatically. (`pdftoppm` takes the same flags; `mutool draw` is an
alternative.)
Per-resource title, description and thumbnail come from the page's front
matter:
```yaml
resources:
- src: report.pdf
title: Annual report
params:
description: Everything that happened last year.
thumbnail: report-cover.png
```
The whole tile is a click target (Bootstrap `.stretched-link`).
## Navigation