on ec85de4 help sign in
hakyll/src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs
44 lines 1.5 kB history raw
1-- | A concrete 'ResourceProvider' that gets it's resources from the filesystem
2--
3module Hakyll.Core.ResourceProvider.FileResourceProvider
4 ( fileResourceProvider
5 ) where
7import Control.Applicative ((<$>))
8import Control.Monad (forM)
10import System.Directory (doesDirectoryExist, getDirectoryContents)
11import System.FilePath ((</>), normalise)
13import Hakyll.Core.ResourceProvider
14import Hakyll.Core.Identifier
16-- | Create a filesystem-based 'ResourceProvider'
17--
18fileResourceProvider :: IO ResourceProvider
19fileResourceProvider = do
20 list <- map parseIdentifier <$> getRecursiveContents "."
21 return $ ResourceProvider
22 { resourceList = list
23 , resourceString = readFile . toFilePath
24 }
26-- | Get all contents of a directory. Note that files starting with a dot (.)
27-- will be ignored.
28--
29getRecursiveContents :: FilePath -> IO [FilePath]
30getRecursiveContents topdir = do
31 topdirExists <- doesDirectoryExist topdir
32 if topdirExists
33 then do names <- getDirectoryContents topdir
34 let properNames = filter isProper names
35 paths <- forM properNames $ \name -> do
36 let path = topdir </> name
37 isDirectory <- doesDirectoryExist path
38 if isDirectory
39 then getRecursiveContents path
40 else return [normalise path]
41 return (concat paths)
42 else return []
43 where
44 isProper = not . (== '.') . head