summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Suh <contact@ericsuh.com>2012-01-29 15:32:16 -0500
committerEric Suh <contact@ericsuh.com>2012-01-29 16:00:17 -0500
commit57b33f6639498e2b1fafba2552936892e1118108 (patch)
tree0325363f8e913d67dc1f686184569af336ab3e95
parentd1c0ad7c25427980bee482db31678f9ac4958c1c (diff)
downloadhakyll-57b33f6639498e2b1fafba2552936892e1118108.tar.gz
Added parsing of an optional @datetime@ field
If @datetime@ is present in the format "January 1, 2000" or "January 1, 2000 1:00 PM", renderDateField uses that date preferentially over parsing the date from the filename.
-rw-r--r--src/Hakyll/Web/Page/Metadata.hs28
1 files changed, 19 insertions, 9 deletions
diff --git a/src/Hakyll/Web/Page/Metadata.hs b/src/Hakyll/Web/Page/Metadata.hs
index efae390..69c4608 100644
--- a/src/Hakyll/Web/Page/Metadata.hs
+++ b/src/Hakyll/Web/Page/Metadata.hs
@@ -118,11 +118,15 @@ copyField :: String -- ^ Key to copy
-> Page a -- ^ Resulting page
copyField src dst = renderField src dst id
--- | When the metadata has a field called @path@ in a
+-- | When the metadata has a field called @datetime@ in a
+-- format such as "January 1, 2000 1:00 AM", then
+-- this function can render the date.
+--
+-- Alternatively, when the metadata has a field called @path@ in a
-- @folder/yyyy-mm-dd-title.extension@ format (the convention for pages),
-- this function can render the date.
--
--- > renderDate "date" "%B %e, %Y" "Date unknown"
+-- > renderDateField "date" "%B %e, %Y" "Date unknown"
--
-- Will render something like @January 32, 2010@.
--
@@ -143,19 +147,25 @@ renderDateFieldWith :: TimeLocale -- ^ Output time locale
-> String -- ^ Default value
-> Page a -- ^ Target page
-> Page a -- ^ Resulting page
-renderDateFieldWith locale key format defaultValue =
- renderField "path" key renderDate'
+renderDateFieldWith locale key format defaultValue page =
+ setField key renderTimeString page
where
- renderDate' filePath = fromMaybe defaultValue $ do
+ renderTimeString = fromMaybe renderDateString $ do
+ dateString <- getFieldMaybe "datetime" page
+ time <- parseTime locale "%B %e, %Y %l:%M %P" dateString :: Maybe UTCTime
+ return $ formatTime locale format time
+ renderDateString = fromMaybe renderFilePathDate $ do
+ dateString <- getFieldMaybe "datetime" page
+ time <- parseTime locale "%B %e, %Y" dateString :: Maybe UTCTime
+ return $ formatTime locale format time
+ renderFilePathDate = fromMaybe defaultValue $ do
+ filePath <- getFieldMaybe "path" page
let dateString = intercalate "-" $ take 3
$ splitAll "-" $ takeFileName filePath
- time <- parseTime defaultTimeLocale
- "%Y-%m-%d"
- dateString :: Maybe UTCTime
+ time <- parseTime locale "%Y-%m-%d" dateString :: Maybe UTCTime
return $ formatTime locale format time
-- | Set the modification time as a field in the page
---
renderModificationTime :: String
-- ^ Destination key
-> String