summaryrefslogtreecommitdiff
path: root/src/Hakyll
diff options
context:
space:
mode:
authorSimonas Kazlauskas <git@kazlauskas.me>2013-02-23 13:34:54 +0200
committerSimonas Kazlauskas <git@kazlauskas.me>2013-02-23 13:34:54 +0200
commit45c618b413b69d119354e63dafbf96533a7ee849 (patch)
tree692924dca0eb21e6f6b46f1498345163d0848458 /src/Hakyll
parent718388495b41089eddcac9ae55aae4ca68620505 (diff)
downloadhakyll-45c618b413b69d119354e63dafbf96533a7ee849.tar.gz
Generalize getTimeUTC, chronological, recentFirst
Diffstat (limited to 'src/Hakyll')
-rw-r--r--src/Hakyll/Web/Template/Context.hs7
-rw-r--r--src/Hakyll/Web/Template/List.hs7
2 files changed, 8 insertions, 6 deletions
diff --git a/src/Hakyll/Web/Template/Context.hs b/src/Hakyll/Web/Template/Context.hs
index 8aab989..1a9aba3 100644
--- a/src/Hakyll/Web/Template/Context.hs
+++ b/src/Hakyll/Web/Template/Context.hs
@@ -167,9 +167,10 @@ dateFieldWith locale key format = field key $ \i -> do
-- | Parser to try to extract and parse the time from the @published@
-- field or from the filename. See 'renderDateField' for more information.
-- Exported for user convenience.
-getItemUTC :: TimeLocale -- ^ Output time locale
+getItemUTC :: MonadMetadata m
+ => TimeLocale -- ^ Output time locale
-> Identifier -- ^ Input page
- -> Compiler UTCTime -- ^ Parsed UTCTime
+ -> m UTCTime -- ^ Parsed UTCTime
getItemUTC locale id' = do
metadata <- getMetadata id'
let tryField k fmt = M.lookup k metadata >>= parseTime' fmt
@@ -180,7 +181,7 @@ getItemUTC locale id' = do
[tryField "date" fmt | fmt <- formats] ++
[parseTime' "%Y-%m-%d" $ intercalate "-" $ take 3 $ splitAll "-" fn]
where
- empty' = compilerThrow $ "Hakyll.Web.Template.Context.getItemUTC: " ++
+ empty' = fail $ "Hakyll.Web.Template.Context.getItemUTC: " ++
"could not parse time for " ++ show id'
parseTime' = parseTime locale
formats =
diff --git a/src/Hakyll/Web/Template/List.hs b/src/Hakyll/Web/Template/List.hs
index 5f94369..1401119 100644
--- a/src/Hakyll/Web/Template/List.hs
+++ b/src/Hakyll/Web/Template/List.hs
@@ -28,6 +28,7 @@ import System.Locale (defaultTimeLocale)
import Hakyll.Core.Compiler
import Hakyll.Core.Identifier
import Hakyll.Core.Item
+import Hakyll.Core.Metadata
import Hakyll.Web.Template
import Hakyll.Web.Template.Context
@@ -59,7 +60,7 @@ applyJoinTemplateList delimiter tpl context items = do
-- | Sort pages chronologically. This function assumes that the pages have a
-- @year-month-day-title.extension@ naming scheme -- as is the convention in
-- Hakyll.
-chronological :: [Item a] -> Compiler [Item a]
+chronological :: MonadMetadata m => [Item a] -> m [Item a]
chronological = sortByM $ getItemUTC defaultTimeLocale . itemIdentifier
where sortByM :: (Monad m, Ord k) => (a -> m k) -> [a] -> m [a]
sortByM f xs = liftM (map fst . sortBy (comparing snd)) $
@@ -67,5 +68,5 @@ chronological = sortByM $ getItemUTC defaultTimeLocale . itemIdentifier
--------------------------------------------------------------------------------
-- | The reverse of 'chronological'
-recentFirst :: [Item a] -> Compiler [Item a]
-recentFirst i = return . reverse =<< chronological i
+recentFirst :: (MonadMetadata m, Functor m) => [Item a] -> m [Item a]
+recentFirst = fmap reverse . chronological