hakyll/examples/feedblog/hakyll.hs

50 lines
1.8 KiB
Haskell
Raw Normal View History

2010-03-15 18:07:53 +00:00
module Main where
import Control.Arrow ((>>>))
import Text.Hakyll (hakyll)
import Text.Hakyll.Render
import Text.Hakyll.Context
import Text.Hakyll.File (getRecursiveContents, directory)
import Text.Hakyll.CreateContext (createPage, createCustomPage, createListing)
import Text.Hakyll.ContextManipulations (copyValue)
import Text.Hakyll.Feed (FeedConfiguration (..), renderRss)
import Data.List (sort)
import Control.Monad (forM_, liftM)
2010-03-15 18:07:53 +00:00
import Control.Monad.Reader (liftIO)
import Data.Either (Either(..))
main = hakyll "http://example.com" $ do
-- Static directory.
directory css "css"
-- Find all post paths.
postPaths <- liftM (reverse . sort) $ getRecursiveContents "posts"
let postPages = map createPage postPaths
-- Render index, including recent posts.
let index = createListing "index.html" ["templates/postitem.html"]
(take 3 postPages) [("title", Left "Home")]
2010-03-15 18:07:53 +00:00
renderChain ["index.html", "templates/default.html"] index
-- Render all posts list.
let posts = createListing "posts.html" ["templates/postitem.html"]
postPages [("title", Left "All posts")]
2010-03-15 18:07:53 +00:00
renderChain ["posts.html", "templates/default.html"] posts
-- Render all posts.
liftIO $ putStrLn "Generating posts..."
forM_ postPages $ renderChain [ "templates/post.html"
, "templates/default.html"
]
2010-03-15 18:07:53 +00:00
-- Render RSS feed.
renderRss myFeedConfiguration $
map (>>> copyValue "body" "description") (take 3 postPages)
myFeedConfiguration = FeedConfiguration
{ feedUrl = "rss.xml"
, feedTitle = "SimpleBlog RSS feed."
, feedDescription = "A simple demo of an RSS feed created with Hakyll."
, feedAuthorName = "Jasper Van der Jeugt"
}