1--------------------------------------------------------------------------------
2module Hakyll.Core.Metadata
7 , makePatternDependency
12--------------------------------------------------------------------------------
13import Control.Monad (forM)
15import qualified Data.Map as M
16import System.FilePath.Posix ((</>), takeDirectory)
19--------------------------------------------------------------------------------
20import Hakyll.Core.Dependencies
21import Hakyll.Core.Identifier
22import Hakyll.Core.Identifier.Pattern
25--------------------------------------------------------------------------------
26type Metadata = Map String String
29--------------------------------------------------------------------------------
30class Monad m => MonadMetadata m where
31 getMetadata :: Identifier -> m Metadata
32 getMatches :: Pattern -> m [Identifier]
34 getAllMetadata :: Pattern -> m [(Identifier, Metadata)]
35 getAllMetadata pattern = do
36 matches' <- getMatches pattern
37 forM matches' $ \id' -> do
38 metadata <- getMetadata id'
39 return (id', metadata)
42--------------------------------------------------------------------------------
43getMetadataField :: MonadMetadata m => Identifier -> String -> m (Maybe String)
44getMetadataField identifier key = do
45 metadata <- getMetadata identifier
46 return $ M.lookup key metadata
49--------------------------------------------------------------------------------
50-- | Version of 'getMetadataField' which throws an error if the field does not
52getMetadataField' :: MonadMetadata m => Identifier -> String -> m String
53getMetadataField' identifier key = do
54 field <- getMetadataField identifier key
57 Nothing -> fail $ "Hakyll.Core.Metadata.getMetadataField': " ++
58 "Item " ++ show identifier ++ " has no metadata field " ++ show key
61--------------------------------------------------------------------------------
62makePatternDependency :: MonadMetadata m => Pattern -> m Dependency
63makePatternDependency pattern = do
64 matches' <- getMatches pattern
65 return $ PatternDependency pattern matches'
67--------------------------------------------------------------------------------
68-- | Returns a list of all directory-wise metadata files, subdir first, global last
69metadataFiles :: Identifier -> [Identifier]
70metadataFiles = go . takeDirectory . toFilePath where
71 go "." = [fromFilePath "metadata"]
72 go dir = fromFilePath (dir </> "metadata") : go (takeDirectory dir)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list