From 839343a3108734a15e331b542a20ed9c77ef582b Mon Sep 17 00:00:00 2001 From: grm Date: Wed, 16 Sep 2026 00:00:57 +0300 Subject: Add a search box module and a search page MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Readers had no way to find a post. The new "search" module goes in the header (a bar under the nav) or a side column (a box with a heading) and is a plain GET form to /search, so it works without JavaScript. The results page lists the published posts of every page whose title or Markdown body matches the query — case-insensitive, each word literal, spaces meaning "anything in between", in order — as title, date and a short snippet with the match marked, 20 per page. modules.kind is a CHECK constraint, so a migration widens it; "search" becomes a reserved page slug so the literal route keeps winning over /{page}. moduleHasSettings now takes the module: a header search box has no heading, hence nothing to edit. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Sd8UPWrvyYCLj97JexNw3A --- internal/db/migrations/blog/00005_search.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 internal/db/migrations/blog/00005_search.sql (limited to 'internal/db') diff --git a/internal/db/migrations/blog/00005_search.sql b/internal/db/migrations/blog/00005_search.sql new file mode 100644 index 0000000..59bb4bd --- /dev/null +++ b/internal/db/migrations/blog/00005_search.sql @@ -0,0 +1,11 @@ +-- +goose Up +-- One more layout module: the search box. +ALTER TABLE modules DROP CONSTRAINT modules_kind_check; +ALTER TABLE modules ADD CONSTRAINT modules_kind_check + CHECK (kind IN ('title', 'logo', 'menu', 'archive', 'recent', 'html', 'rss', 'text', 'sitemap', 'tags', 'tagcloud', 'search')); + +-- +goose Down +DELETE FROM modules WHERE kind = 'search'; +ALTER TABLE modules DROP CONSTRAINT modules_kind_check; +ALTER TABLE modules ADD CONSTRAINT modules_kind_check + CHECK (kind IN ('title', 'logo', 'menu', 'archive', 'recent', 'html', 'rss', 'text', 'sitemap', 'tags', 'tagcloud')); -- cgit v1.2.3