parent
9228ea2965
commit
e44c0d35b4
6
Types.hs
6
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" <>
|
||||
|
|
16
site.hs
16
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`. -}
|
||||
|
|
Loading…
Reference in a new issue