From 9228ea2965a0119207793f4e548be4aa711b4cde Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Thu, 22 Jun 2023 09:01:14 +0200 Subject: [PATCH 1/2] format --- FormatOpts.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FormatOpts.hs b/FormatOpts.hs index 4759f89..dcdb4c2 100644 --- a/FormatOpts.hs +++ b/FormatOpts.hs @@ -28,4 +28,4 @@ plainWriteOpts = def {writerWrapText = WrapNone} -- | Default options for making tables of contents with certain depth. tocWriteOpts :: Int -> WriterOptions -tocWriteOpts n = def { writerTOCDepth = n} +tocWriteOpts n = def {writerTOCDepth = n} From e44c0d35b49d130a9ff8d7f0a244b76bf7d54259 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Thu, 22 Jun 2023 09:01:25 +0200 Subject: [PATCH 2/2] avoid source dirs Fixes #4 --- Types.hs | 6 ++++++ site.hs | 16 +++++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/Types.hs b/Types.hs index f4212d8..58a8197 100644 --- a/Types.hs +++ b/Types.hs @@ -52,6 +52,7 @@ data SiteState = , _searchDataOut :: Maybe FilePath -- ^ File to write the searchable versions of pages to (as JSON) , _assetDir :: FilePath -- ^ Directory for output , _sourceDirs :: [FilePath] -- ^ Path to page source data + , _notSourceDirs :: [FilePath] -- ^ Subdirectories of source dirs where pages should not be sourced , _templateDir :: FilePath -- ^ Path to template directory , _defaultTemplate :: FilePath -- ^ Name of the default template , _redirectTemplate :: FilePath -- ^ Name of the template for redirect pages @@ -93,6 +94,11 @@ siteOptions' = do short 's' <> help "Path to the directory with source data (possibly multiple paths, defaults to a single directory \"cards\")" + _notSourceDirs <- + fmap (maybe ["assets"] toList . nonEmpty) . many . strOption $ + long "exclude-source-directory" <> + help + "Names of subdirectories of the sources that should never be used for sourcing pages (possibly multiple directory names, defaults to a single directory \"assets\")" _templateDir <- strOption $ long "template-directory" <> diff --git a/site.hs b/site.hs index f91c007..d3b7f15 100644 --- a/site.hs +++ b/site.hs @@ -3,7 +3,7 @@ -- | The main deployment script. module Main where -import Control.Monad ((>=>), join, unless, when) +import Control.Monad ((>=>), filterM, join, unless, when) import Control.Monad.Extra (whenM) import Control.Monad.Trans.State.Lazy import qualified Data.Aeson as AE @@ -48,13 +48,19 @@ import FormatOpts import Types import Utils +-- | Check if a given path should be sourced or not +isSourceablePath :: FilePath -> Site Bool +isSourceablePath fp = do + notSource <- use notSourceDirs + pure $ (&&) <$> hasSuffix ".md" . last <*> not . any (`elem` notSource) . init $ + splitPath fp + -- | Load the pages from a directory and add them to `pages`. sourcePages :: FilePath -> Site () sourcePages fp = - io - (map (fp ) . filter (hasSuffix ".md" . last . splitPath) <$> - getRecursiveContents (pure . const False) fp) >>= - traverse_ loadPage + (io $ getRecursiveContents (pure . const False) fp) >>= + filterM isSourceablePath >>= + traverse_ (loadPage . (fp )) {- | Extract `PageInfo` about a single page and save it into `pages` in - `SiteState`. -}