aboutsummaryrefslogtreecommitdiff
path: root/site.hs
diff options
context:
space:
mode:
authorMirek Kratochvil <exa.exa@gmail.com>2023-06-17 20:40:11 +0200
committerMirek Kratochvil <exa.exa@gmail.com>2023-06-17 20:40:40 +0200
commit32a49d3179a969604410ff7507af939c77045b4f (patch)
tree70e8a0e3bacad4b7208797b45e1b0805c8d70678 /site.hs
parent0f97b7a64fa3733689b713a2210a4f7b64e069d7 (diff)
downloadreploy-32a49d3179a969604410ff7507af939c77045b4f.tar.gz
reploy-32a49d3179a969604410ff7507af939c77045b4f.tar.bz2
export search data, add indexing script
Diffstat (limited to 'site.hs')
-rw-r--r--site.hs26
1 files changed, 26 insertions, 0 deletions
diff --git a/site.hs b/site.hs
index e634f05..918fdff 100644
--- a/site.hs
+++ b/site.hs
@@ -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