add tags to the search metadata

This commit is contained in:
Mirek Kratochvil 2023-06-17 20:55:26 +02:00
parent 32a49d3179
commit 33cb84713f
2 changed files with 8 additions and 4 deletions

View file

@ -3,8 +3,8 @@
* make-search-index.js
*
* This converts a "search data" file produced by the haskell site builder into
* a lunr.js index and saves it in JSON. Metadata for search (currently titles)
* are stored separately in an extra file.
* a lunr.js index and saves it in JSON. Metadata for rendering search output
* (currently titles and tags) are stored separately in an extra file.
*
* Installing dependencies:
* yarnpkg add lunr
@ -35,5 +35,5 @@ var idx = lunr(function () {
fs.writeFileSync(process.argv[3], JSON.stringify(idx), {encoding: 'utf8'})
fs.writeFileSync(process.argv[4], JSON.stringify(
Object.fromEntries(documents.map(x => [x.link, x.title]))
Object.fromEntries(documents.map(x => [x.link, {"title": x.title, "tags": x.tags}]))
), {encoding: 'utf8'})

View file

@ -348,13 +348,17 @@ renderTags = use (htags . to M.keys) >>= traverse_ renderTag
-- | Transform one mounted PageInfo to the base search data
mkSearchData :: FilePath -> PageInfo -> Site Y.Value
mkSearchData mount pi = do
link <- rootUrl mount
text <- io . runIOorExplode $ writePlain plainWriteOpts (pi ^. pageDoc)
let title = pi ^? pageMeta . key "title" . _String
link <- rootUrl mount
let tags =
pi ^.. pageMeta . key "tags" . values . _String .
to (Y.array . map fromString . splitDirectories . T.unpack)
pure $
Y.object
[ ("link", fromString link)
, ("title", maybe (fromString mount) Y.String title)
, ("tags", Y.array tags)
, ("text", Y.String text)
]