on master help sign in
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.

commit57b33f6639498e2b1fafba2552936892e1118108 authorEric Suh <contact@ericsuh.com> dateSun 29 Jan 2012, 15:32 (15 years ago) parentd1c0ad7
1 file changed+19−9
src/Hakyll/Web/Page/Metadata.hs+19−9
src/Hakyll/Web/Page/Metadata.hs+19−9
@@ -118,11 +118,15 @@ copyField :: String -- ^ Key to copy
118118 -> Page a -- ^ Resulting page
119119copyField src dst = renderField src dst id
120120
121−-- | When the metadata has a field called @path@ in a
121+-- | When the metadata has a field called @datetime@ in a
122+-- format such as "January 1, 2000 1:00 AM", then
123+-- this function can render the date.
124+--
125+-- Alternatively, when the metadata has a field called @path@ in a
122126-- @folder/yyyy-mm-dd-title.extension@ format (the convention for pages),
123127-- this function can render the date.
124128--
125−-- > renderDate "date" "%B %e, %Y" "Date unknown"
129+-- > renderDateField "date" "%B %e, %Y" "Date unknown"
126130--
127131-- Will render something like @January 32, 2010@.
128132--
@@ -143,19 +147,25 @@ renderDateFieldWith :: TimeLocale -- ^ Output time locale
143147 -> String -- ^ Default value
144148 -> Page a -- ^ Target page
145149 -> Page a -- ^ Resulting page
146−renderDateFieldWith locale key format defaultValue =
147− renderField "path" key renderDate'
150+renderDateFieldWith locale key format defaultValue page =
151+ setField key renderTimeString page
148152 where
149− renderDate' filePath = fromMaybe defaultValue $ do
153+ renderTimeString = fromMaybe renderDateString $ do
154+ dateString <- getFieldMaybe "datetime" page
155+ time <- parseTime locale "%B %e, %Y %l:%M %P" dateString :: Maybe UTCTime
156+ return $ formatTime locale format time
157+ renderDateString = fromMaybe renderFilePathDate $ do
158+ dateString <- getFieldMaybe "datetime" page
159+ time <- parseTime locale "%B %e, %Y" dateString :: Maybe UTCTime
160+ return $ formatTime locale format time
161+ renderFilePathDate = fromMaybe defaultValue $ do
162+ filePath <- getFieldMaybe "path" page
150163 let dateString = intercalate "-" $ take 3
151164 $ splitAll "-" $ takeFileName filePath
152− time <- parseTime defaultTimeLocale
153− "%Y-%m-%d"
154− dateString :: Maybe UTCTime
165+ time <- parseTime locale "%Y-%m-%d" dateString :: Maybe UTCTime
155166 return $ formatTime locale format time
156167
157168-- | Set the modification time as a field in the page
158−--
159169renderModificationTime :: String
160170 -- ^ Destination key
161171 -> String