@@ -118,11 +118,15 @@ copyField :: String -- ^ Key to copy
118 -> Page a -- ^ Resulting page
118 -> Page a -- ^ Resulting page
119copyField src dst = renderField src dst id
119copyField src dst = renderField src dst id
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.
125+-- Alternatively, when the metadata has a field called @path@ in a
122-- @folder/yyyy-mm-dd-title.extension@ format (the convention for pages),
126-- @folder/yyyy-mm-dd-title.extension@ format (the convention for pages),
123-- this function can render the date.
127-- this function can render the date.
125−-- > renderDate "date" "%B %e, %Y" "Date unknown"
129+-- > renderDateField "date" "%B %e, %Y" "Date unknown"
127-- Will render something like @January 32, 2010@.
131-- Will render something like @January 32, 2010@.
@@ -143,19 +147,25 @@ renderDateFieldWith :: TimeLocale -- ^ Output time locale
143 -> String -- ^ Default value
147 -> String -- ^ Default value
144 -> Page a -- ^ Target page
148 -> Page a -- ^ Target page
145 -> Page a -- ^ Resulting page
149 -> Page a -- ^ Resulting page
146−renderDateFieldWith locale key format defaultValue =
150+renderDateFieldWith locale key format defaultValue page =
147− renderField "path" key renderDate'
151+ setField key renderTimeString page
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
150 let dateString = intercalate "-" $ take 3
163 let dateString = intercalate "-" $ take 3
151 $ splitAll "-" $ takeFileName filePath
164 $ splitAll "-" $ takeFileName filePath
152− time <- parseTime defaultTimeLocale
154− dateString :: Maybe UTCTime
165+ time <- parseTime locale "%Y-%m-%d" dateString :: Maybe UTCTime
155 return $ formatTime locale format time
166 return $ formatTime locale format time
157-- | Set the modification time as a field in the page
168-- | Set the modification time as a field in the page
159renderModificationTime :: String
169renderModificationTime :: String
160 -- ^ Destination key
170 -- ^ Destination key
161 -> String
171 -> String