iso dates

This commit is contained in:
Pagwin 2024-11-05 14:08:28 -05:00
parent a99f4aee1f
commit 3cb14be999
No known key found for this signature in database
GPG key ID: 81137023740CA260
3 changed files with 12 additions and 16 deletions

View file

@ -138,8 +138,8 @@ home =
take 3 take 3
. sortOn (Ord.Down . postDate) . sortOn (Ord.Down . postDate)
<$> forM postPaths readPost <$> forM postPaths readPost
html <- applyTemplate "home.html" $ HM.singleton "posts" posts let posts' = map fromPost posts
html <- applyTemplate "home.html" $ HM.singleton "posts" posts'
let page = Page (T.pack "Home") html let page = Page (T.pack "Home") html
applyTemplateAndWrite "default.html" page target applyTemplateAndWrite "default.html" page target
Shake.putInfo $ "Built " <> target Shake.putInfo $ "Built " <> target
@ -149,7 +149,8 @@ postList =
outputDir </> "posts/index.html" %> \target -> do outputDir </> "posts/index.html" %> \target -> do
postPaths <- getPublishedPosts postPaths <- getPublishedPosts
posts <- sortOn (Ord.Down . postDate) <$> forM postPaths readPost posts <- sortOn (Ord.Down . postDate) <$> forM postPaths readPost
html <- applyTemplate "posts.html" $ HM.singleton "posts" posts let posts' = map fromPost posts
html <- applyTemplate "posts.html" $ HM.singleton "posts" posts'
let page = Page (T.pack "Blog Posts") html let page = Page (T.pack "Blog Posts") html
applyTemplateAndWrite "default.html" page target applyTemplateAndWrite "default.html" page target
Shake.putInfo $ "Built " <> target Shake.putInfo $ "Built " <> target

View file

@ -11,10 +11,12 @@ import GHC.Stack (HasCallStack)
import qualified Text.Mustache as Mus import qualified Text.Mustache as Mus
import qualified Text.Mustache.Compile as Mus import qualified Text.Mustache.Compile as Mus
import Types (Post (postAuthor, postContent, postDate, postLink, postTags, postTitle), RenderedPost (RenderedPost, rPostAuthor, rPostContent, rPostDate, rPostHasTags, rPostIsoDate, rPostLink, rPostTags, rPostTitle)) import Types (Post (postAuthor, postContent, postDate, postLink, postTags, postTitle), RenderedPost (RenderedPost, rPostAuthor, rPostContent, rPostDate, rPostHasTags, rPostIsoDate, rPostLink, rPostTags, rPostTitle))
import Utilities
applyTemplate :: (HasCallStack, (ToJSON a)) => String -> a -> Action Text applyTemplate :: (HasCallStack, (ToJSON a)) => String -> a -> Action Text
applyTemplate templateName context = do applyTemplate templateName context = do
tmpl <- readTemplate $ "templates" </> templateName tmpl <- readTemplate $ "templates" </> templateName
-- liftIO $ print $ A.toJSON context
case Mus.checkedSubstitute tmpl (A.toJSON context) of case Mus.checkedSubstitute tmpl (A.toJSON context) of
([], text) -> return text ([], text) -> return text
(errs, _) -> (errs, _) ->
@ -51,7 +53,7 @@ fromPost post =
rPostTags = postTags post, rPostTags = postTags post,
rPostHasTags = not . null . postTags $ post, rPostHasTags = not . null . postTags $ post,
rPostDate = postDate post, rPostDate = postDate post,
rPostIsoDate = postDate post, rPostIsoDate = postDate post >>= parseDate,
rPostContent = postContent post, rPostContent = postContent post,
rPostLink = postLink post rPostLink = postLink post
} }

View file

@ -5,7 +5,6 @@ import Control.Monad (filterM)
import Data.Aeson (Result (Error, Success)) import Data.Aeson (Result (Error, Success))
import qualified Data.Aeson as A import qualified Data.Aeson as A
import Data.List (find) import Data.List (find)
import Data.Maybe (fromMaybe)
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text as T import qualified Data.Text as T
import Data.Time import Data.Time
@ -133,17 +132,6 @@ yamlToPost path = do
post <- decodeFileThrow path post <- decodeFileThrow path
-- let post' = dateTransform post -- let post' = dateTransform post
return post return post
where
dateTransform post@(Post {postDate}) = do
postDate' <- postDate
let postDate'' = dateStrTransform $ T.unpack postDate'
Just
post
{ postDate = postDate''
}
dateStrTransform date = do
date' <- parseTimeM False defaultTimeLocale "%Y-%-m-%-d" date
Just $ T.pack $ formatTime @UTCTime defaultTimeLocale "%b %e, %Y" date'
isTypstPost :: FilePath -> Bool isTypstPost :: FilePath -> Bool
isTypstPost path = FP.takeExtension path == ".typ" isTypstPost path = FP.takeExtension path == ".typ"
@ -169,3 +157,8 @@ getPublishedPosts :: Action [FilePath]
getPublishedPosts = do getPublishedPosts = do
postPaths <- Shake.getDirectoryFiles "" postGlobs postPaths <- Shake.getDirectoryFiles "" postGlobs
filterM (fmap not . isDraft) postPaths filterM (fmap not . isDraft) postPaths
parseDate :: Text -> Maybe Text
parseDate str = do
date <- parseTimeM False defaultTimeLocale "%Y-%-m-%-d" $ T.unpack str
return $ T.pack $ formatTime @UTCTime defaultTimeLocale "%Y-%m-%d" date