-render :: String -> ActionM (Html ())
-render post = do
- let name = "posts" </> post <.> ".md"
- markdown <- T.toStrict <$> liftIO (T.readFile name)
- case M.parse name markdown of
- Left e -> return "shit"
- Right doc -> return $ M.render (M.useExtensions extensions doc)
+load :: FilePath -> IO (Maybe Post)
+load file = do
+ liftIO $ guard (takeExtension file == ".md")
+ md <- liftIO (T.readFile file)
+ modTime <- getModificationTime file
+ let title = T.pack $ takeBaseName file
+ return $ Just (Post md title modTime)
+
+render :: Post -> Maybe (Html ())
+render p@(Post markdown title date) =
+ case M.parse (pathToPost p) (T.toStrict markdown) of
+ Left e -> Nothing
+ Right doc -> Just $
+ with div_ [id_ (T.toStrict title)] $ do
+ with a_ [href_ (T.toStrict $ linkToPost p)] $
+ i_ $ toHtml $ formatTime defaultTimeLocale "%a %e %B %Y" date
+ br_ []
+ M.render (M.useExtensions extensions doc)