diff options
| author | Mirek Kratochvil <exa.exa@gmail.com> | 2023-06-17 20:40:11 +0200 |
|---|---|---|
| committer | Mirek Kratochvil <exa.exa@gmail.com> | 2023-06-17 20:40:40 +0200 |
| commit | 32a49d3179a969604410ff7507af939c77045b4f (patch) | |
| tree | 70e8a0e3bacad4b7208797b45e1b0805c8d70678 /site.hs | |
| parent | 0f97b7a64fa3733689b713a2210a4f7b64e069d7 (diff) | |
| download | reploy-32a49d3179a969604410ff7507af939c77045b4f.tar.gz reploy-32a49d3179a969604410ff7507af939c77045b4f.tar.bz2 | |
export search data, add indexing script
Diffstat (limited to 'site.hs')
| -rw-r--r-- | site.hs | 26 |
1 files changed, 26 insertions, 0 deletions
@@ -6,6 +6,7 @@ module Main where import Control.Monad ((>=>), unless, when) import Control.Monad.Extra (whenM) import Control.Monad.Trans.State.Lazy +import qualified Data.Aeson as AE import qualified Data.Aeson.KeyMap as KM import qualified Data.ByteString.Lazy as B import Data.Digest.Pure.SHA (sha256, showDigest) @@ -35,6 +36,7 @@ import System.FilePath import qualified Text.Mustache as Mu import Text.Pandoc.Class (runIOorExplode) import Text.Pandoc.Readers.Markdown (readMarkdown) +import Text.Pandoc.Writers (writePlain) import Text.Pandoc.Writers.HTML (writeHtml5String) import qualified Text.Parsec.Error @@ -343,6 +345,29 @@ renderTag tag = do renderTags :: Site () 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 + text <- io . runIOorExplode $ writePlain plainWriteOpts (pi ^. pageDoc) + let title = pi ^? pageMeta . key "title" . _String + link <- rootUrl mount + pure $ + Y.object + [ ("link", fromString link) + , ("title", maybe (fromString mount) Y.String title) + , ("text", Y.String text) + ] + +-- | Collect all pages' search data to the file +renderSearchData :: Site () +renderSearchData = use searchDataOut >>= traverse_ go + where + go out = do + ps <- use (pages . to M.assocs) >>= traverse (uncurry mkSearchData) + io $ do + putStrLn $ "S -> " ++ out + AE.encodeFile out $ Y.array ps + -- | Build the whole site. main = do init <- Options.Applicative.execParser siteOptions @@ -353,5 +378,6 @@ main = do use templateDir >>= sourceTemplates use pages >>= traverse (uncurry installPage) . M.assocs renderTags + renderSearchData io $ putStrLn "OK" whenM (use dumpFinalState) $ get >>= io . print |
