Skip to content

OINK 1.3.0 — Expo image albums

Expo brings resource-backed image albums, three layouts and an original-image viewer to OINK, with more reliable navigation, dialogs and focus.

OINK 1.3.0 adds Expo alongside Docs, Blog and Book. An album is one Hugo leaf bundle: an index.md and its images. Resource metadata supplies titles, captions, credits, ordering and stable image links. It does not need one page or one YAML file per image.

OINK 1.3.0 uses Hugo Extended 0.166.0 as its minimum and its single development, CI, and release-test baseline. The module declares Go 1.27.0.

At a glance

  • Expo albums share OINK’s sidebar, navigation and appearance controls.
  • Wall, Cards and Seamless layouts, with saved layout and tile size.
  • An original-image viewer with fit, bounded expansion, zoom, dragging and stable location links.
  • GIF playback and pause controls, with reduced-motion support.
  • Scoped explicit navigation, content-based active paths and more reliable modal focus.
  • Reliable Landing code controls and RSS, and complete aggregate Print output.
  • Consumer upgrade tooling for module, vendored and classic-theme sites.

Create an album

content/photos/
├── _index.md
└── field-notes/
    ├── index.md
    └── images/
        ├── fern.jpg
        └── river.gif

Set type: expo and cascade: {type: expo} on the section entry. Images appear automatically. Add Hugo resources metadata only when a picture needs a title, caption, credit, fixed order or an explicit ID. Originals may live beside the previews in the same bundle.

Read the Expo authoring guide and open the example albums. Use the Gallery component for a small grid inside a text page.

View and navigate

The viewer opens the original image at its natural size, capped to the viewport. Fit, expansion, zoom and dragging support closer inspection. Left/Right or Q/E move through the album; K/J zoom, R resets and F changes expansion. Touch readers can swipe and double-tap. Closing returns focus to the originating tile; opening another surface hands focus to that surface.

Expo keeps images and metadata in Print, Markdown, LLMSFULL and RSS outputs. With JavaScript unavailable, image links still open originals.

Reading and interaction repairs

Explicit Docs and Book navigation selects branches by content identity, including custom URLs and nested roots. It no longer leaks into home-root navigation or other shells. Uncached sidebars identify the current page and expand its content ancestors.

Draw.io opens in a native modal host with a localized Close button, backdrop dismissal, listener cleanup and focus restoration. The host Close control remains reachable after entering a cross-origin editor. Edit participates in Safari’s Tab order. Closed Appearance panels no longer take focus during a coordinated close.

Book heading indentation follows its owning navigation row. Wide outlines grow within bounded widths and follow resizing immediately, while preserving their collapse animation.

The release also fixes unnumbered mathematics with generic attributes, missing-reference and empty-tab fallbacks, Expo metadata and preview transitions, keyboard focus, and configuration schemas. The corrected behavior is specified in the bilingual Design contracts.

Landing and Print repairs

Landing Markdown code blocks have independent IDs and the shared content styles. Copy and expansion controls operate on the selected block, including repeated sections. Configured RSS feeds produce a complete feed document. Stock 404 pages do not advertise a reading drawer inherited from a root cascade.

Aggregate Print keeps encoded heading links within their own chapter, including headings rendered inside Tabs. It namespaces generated tab IDs, resolves relative links from their original pages, renders release section bodies in full, and loads styles for mathematics in included descendants. Wide tables can be scrolled with a keyboard in browser previews and expand for paper output.

Authored HTML IDs remain global by default. Add the boolean data-td-print-local attribute to an authored element when its ID and local links should receive the chapter namespace in aggregate Print. Ordinary pages and single-page Print retain their existing anchors.

Upgrade

Existing Docs, Blog and Book content needs no bulk migration. Expo is opt-in through type: expo. Keep params.ui.preset: paper and the explicit [paper, slate, ink, terminal] reader menu if the site offers all four styles.

Update Hugo and workflow pins to Extended 0.166.0, then select the exact release. Disable local replacements and both workspaces when checking the published module:

env -u HUGO_MODULE_REPLACEMENTS GOWORK=off HUGO_MODULE_WORKSPACE=off \
  hugo mod get github.com/pgsty/[email protected]
env -u HUGO_MODULE_REPLACEMENTS GOWORK=off HUGO_MODULE_WORKSPACE=off \
  hugo --environment production --minify --panicOnWarning

Refresh active vendor snapshots and classic themes/oink copies separately; a go.mod update does not change either. Keep site-specific content and layout overrides, then check navigation, reader menus, Print, and any custom home page. The upgrade guide covers the procedure.

Validation

The release work exercised 36 maintained consumers under ~/www and ~/pgsty in development and production configurations. Strict builds, generated HTML link and ID checks, browser interactions, and the documentation site regression suite passed on the reviewed sources. Final Print fixes have focused tests in Chromium, Firefox, and WebKit. Historical third-party static HTML is tracked separately from OINK output. These checks establish the tested source behavior; each consumer deployment still needs its own acceptance.