summaryrefslogtreecommitdiff
path: root/src/Hakyll/Core/ResourceProvider
diff options
context:
space:
mode:
authorJasper Van der Jeugt <jaspervdj@gmail.com>2010-12-24 08:42:05 +0100
committerJasper Van der Jeugt <jaspervdj@gmail.com>2010-12-24 08:42:05 +0100
commit4b7c42d644a1fb2242ad79a2193edad4ba6b2b7e (patch)
tree1d5a45afd55b7eba093018eef81d9fde10ef3417 /src/Hakyll/Core/ResourceProvider
parent4bdd93b331eec642873262a524b6b3a6132eb1c9 (diff)
downloadhakyll-4b7c42d644a1fb2242ad79a2193edad4ba6b2b7e.tar.gz
Add resource provider modules
Diffstat (limited to 'src/Hakyll/Core/ResourceProvider')
-rw-r--r--src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs b/src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs
new file mode 100644
index 0000000..b682634
--- /dev/null
+++ b/src/Hakyll/Core/ResourceProvider/FileResourceProvider.hs
@@ -0,0 +1,44 @@
+-- | A concrete 'ResourceProvider' that gets it's resources from the filesystem
+--
+module Hakyll.Core.ResourceProvider.FileResourceProvider
+ ( fileResourceProvider
+ ) where
+
+import Control.Applicative ((<$>))
+import Control.Monad (forM)
+
+import System.Directory (doesDirectoryExist, getDirectoryContents)
+import System.FilePath ((</>), normalise)
+
+import Hakyll.Core.ResourceProvider
+import Hakyll.Core.Identifier
+
+-- | Create a filesystem-based 'ResourceProvider'
+--
+fileResourceProvider :: IO ResourceProvider
+fileResourceProvider = do
+ list <- map parseIdentifier <$> getRecursiveContents "."
+ return $ ResourceProvider
+ { resourceList = list
+ , resourceString = readFile . toFilePath
+ }
+
+-- | Get all contents of a directory. Note that files starting with a dot (.)
+-- will be ignored.
+--
+getRecursiveContents :: FilePath -> IO [FilePath]
+getRecursiveContents topdir = do
+ topdirExists <- doesDirectoryExist topdir
+ if topdirExists
+ then do names <- getDirectoryContents topdir
+ let properNames = filter isProper names
+ paths <- forM properNames $ \name -> do
+ let path = topdir </> name
+ isDirectory <- doesDirectoryExist path
+ if isDirectory
+ then getRecursiveContents path
+ else return [normalise path]
+ return (concat paths)
+ else return []
+ where
+ isProper = not . (== '.') . head