diff options
-rw-r--r-- | examples/categoryblog/css/default.css | 17 | ||||
-rw-r--r-- | examples/categoryblog/hakyll.hs | 64 | ||||
-rw-r--r-- | examples/categoryblog/index.html | 18 | ||||
-rw-r--r-- | examples/categoryblog/posts.html | 4 | ||||
-rw-r--r-- | examples/categoryblog/posts/coding/2009-11-05-a-first-post.markdown | 20 | ||||
-rw-r--r-- | examples/categoryblog/posts/coding/2009-11-28-a-third-post.markdown | 18 | ||||
-rw-r--r-- | examples/categoryblog/posts/coding/2009-12-04-this-blog-aint-dead.markdown | 11 | ||||
-rw-r--r-- | examples/categoryblog/posts/random/2009-11-10-another-post.markdown | 14 | ||||
-rw-r--r-- | examples/categoryblog/posts/random/2009-12-23-almost-christmas.markdown | 12 | ||||
-rw-r--r-- | examples/categoryblog/templates/default.html | 23 | ||||
-rw-r--r-- | examples/categoryblog/templates/post.html | 5 | ||||
-rw-r--r-- | examples/categoryblog/templates/postitem.html | 4 | ||||
-rw-r--r-- | examples/categoryblog/templates/rss.xml | 9 | ||||
-rw-r--r-- | examples/categoryblog/templates/rssitem.xml | 5 | ||||
-rw-r--r-- | examples/tagblog/hakyll.hs | 12 | ||||
-rw-r--r-- | examples/tagblog/templates/rss.xml | 2 |
16 files changed, 228 insertions, 10 deletions
diff --git a/examples/categoryblog/css/default.css b/examples/categoryblog/css/default.css new file mode 100644 index 0000000..9ed2b01 --- /dev/null +++ b/examples/categoryblog/css/default.css @@ -0,0 +1,17 @@ +body { + width: 600px; + margin: 0px auto 0px auto; +} + +div#navigation { + text-align: center; + border-bottom: 4px solid black; +} + +div#navigation a { + color: white; + text-decoration: none; + background-color: black; + padding: 3px 10px 3px 10px; + margin: 0px 10px 0px 10px; +} diff --git a/examples/categoryblog/hakyll.hs b/examples/categoryblog/hakyll.hs new file mode 100644 index 0000000..2fef98e --- /dev/null +++ b/examples/categoryblog/hakyll.hs @@ -0,0 +1,64 @@ +module Main where + +import Text.Hakyll (hakyll) +import Text.Hakyll.Render +import Text.Hakyll.Tags (readCategoryMap) +import Text.Hakyll.File (getRecursiveContents, directory, removeSpaces) +import Text.Hakyll.Renderables (createPagePath, createCustomPage, createListingWith, createListing) +import Text.Hakyll.Context (ContextManipulation, renderDate) +import Text.Hakyll.Util (link) +import Data.List (sort) +import Data.Map (toList) +import Control.Monad (mapM_, liftM, (<=<)) +import Data.Either (Either(..)) + +main = hakyll $ do + -- Static directory. + directory css "css" + + -- Find all post paths. + postPaths <- liftM (reverse . sort) $ getRecursiveContents "posts" + let renderablePosts = map createPagePath postPaths + + -- Read category map. + categoryMap <- readCategoryMap "categoryMap" renderablePosts + + -- Render all posts list. + renderPostList "posts.html" "All posts" renderablePosts + + -- Render post list per category + mapM_ (\(category, posts) -> renderPostList (categoryToURL category) ("Posts about " ++ category) posts) + (toList categoryMap) + + -- Render index, including recent posts. + let index = createListingWith postManipulation "index.html" + "templates/postitem.html" + (take 3 renderablePosts) + [ ("title", "Home") + , ("categories", categoryList categoryMap) + ] + renderChain ["index.html", "templates/default.html"] index + + -- Render all posts. + mapM_ (renderChainWith postManipulation + ["templates/post.html" + ,"templates/default.html" + ]) renderablePosts + + -- Render rss feed + let rss = createListing "rss.xml" "templates/rssitem.xml" (take 3 renderablePosts) [] + renderChain ["templates/rss.xml"] rss + + where postManipulation :: ContextManipulation + postManipulation = renderDate "date" "%B %e, %Y" "Date unknown" + + categoryToURL category = "$root/categories/" ++ removeSpaces category ++ ".html" + + categoryList = uncurry categoryListItem <=< toList + + categoryListItem category posts = "<li>" ++ link category (categoryToURL category) + ++ " - " ++ show (length posts) ++ " items.</li>" + + renderPostList url title posts = do + let list = createListingWith postManipulation url "templates/postitem.html" posts [("title", title)] + renderChain ["posts.html", "templates/default.html"] list diff --git a/examples/categoryblog/index.html b/examples/categoryblog/index.html new file mode 100644 index 0000000..4d5ca8a --- /dev/null +++ b/examples/categoryblog/index.html @@ -0,0 +1,18 @@ +<div id="posts"> + <h1>Recent posts</h1> + <ul> + $body + </ul> + <a href="$root/posts.html">All posts...</a> + <h1>Categories</h1> + <ul> + $categories + </ul> +</div> + +<div class="about"> + <h1>About</h1> + <p> + This is a sample blog for educational purposes. + </p> +</div> diff --git a/examples/categoryblog/posts.html b/examples/categoryblog/posts.html new file mode 100644 index 0000000..ee2ed78 --- /dev/null +++ b/examples/categoryblog/posts.html @@ -0,0 +1,4 @@ +<h1>$title</h1> +<ul> + $body +</ul> diff --git a/examples/categoryblog/posts/coding/2009-11-05-a-first-post.markdown b/examples/categoryblog/posts/coding/2009-11-05-a-first-post.markdown new file mode 100644 index 0000000..aa7de69 --- /dev/null +++ b/examples/categoryblog/posts/coding/2009-11-05-a-first-post.markdown @@ -0,0 +1,20 @@ +--- +title: A first post +author: Julius Caesar +--- +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pretium leo +adipiscing lectus iaculis lobortis. Vivamus scelerisque velit dignissim metus +gravida sit amet dapibus ligula tempor. Quisque sit amet viverra nunc. +Suspendisse cursus elementum ante, ut venenatis nisi dictum eu. Nulla diam +ligula, eleifend in varius quis, malesuada a nibh. Vivamus consequat +pellentesque erat non blandit. Nunc sit amet eros vel massa semper ullamcorper +quis iaculis magna. Vestibulum ullamcorper urna sit amet est elementum +pulvinar. Vestibulum consequat lacus ac quam hendrerit tincidunt. Praesent +bibendum vehicula diam, nec sagittis risus tempus a. Nulla quis odio sit amet +odio vehicula cursus ut id odio. Curabitur semper magna euismod magna mollis +venenatis. Nunc eget eleifend velit. Mauris sed posuere sem. Fusce id nunc +nisi, a aliquam orci. Suspendisse laoreet justo non enim laoreet eget consequat +velit porttitor. Aenean faucibus sodales metus at tincidunt. Donec vestibulum +leo pulvinar erat auctor ac ultrices massa euismod. Phasellus blandit cursus +magna, eget lacinia mi lobortis sed. Suspendisse ultricies enim ligula, vel +scelerisque mauris. diff --git a/examples/categoryblog/posts/coding/2009-11-28-a-third-post.markdown b/examples/categoryblog/posts/coding/2009-11-28-a-third-post.markdown new file mode 100644 index 0000000..71b911e --- /dev/null +++ b/examples/categoryblog/posts/coding/2009-11-28-a-third-post.markdown @@ -0,0 +1,18 @@ +--- +title: A third post +author: Publius Ovidius Naso +--- +Pellentesque tempor blandit elit, vel ultricies arcu congue egestas. Fusce +vitae rutrum nisl. Fusce id mauris libero, a venenatis tellus. Fusce iaculis, +lorem et ornare molestie, mauris risus mollis nisi, non fermentum lacus lacus +sit amet ipsum. Praesent lobortis ullamcorper dolor, eget convallis ligula +dignissim a. Suspendisse nulla nisi, congue et pharetra vel, convallis non +libero. Ut a nulla ipsum. Phasellus cursus velit id neque viverra ut +pellentesque justo posuere. Curabitur laoreet enim et velit tempor consectetur. +Donec eu pretium urna. Suspendisse vitae nisi at metus vestibulum aliquam in +sit amet nisl. Donec convallis lacinia odio, vestibulum molestie nunc feugiat +a. Suspendisse vehicula, sapien id aliquet consectetur, sem sapien ullamcorper +arcu, scelerisque porttitor elit ipsum posuere ligula. Nulla at velit eu metus +tincidunt auctor ut sit amet enim. Donec placerat dapibus nisi id facilisis. +Maecenas pellentesque pulvinar auctor. Curabitur gravida quam sit amet purus +consectetur blandit. diff --git a/examples/categoryblog/posts/coding/2009-12-04-this-blog-aint-dead.markdown b/examples/categoryblog/posts/coding/2009-12-04-this-blog-aint-dead.markdown new file mode 100644 index 0000000..3b5edb6 --- /dev/null +++ b/examples/categoryblog/posts/coding/2009-12-04-this-blog-aint-dead.markdown @@ -0,0 +1,11 @@ +--- +title: This blog ain't dead +author: Marcus Antonius +--- +Etiam non felis aliquet tellus dictum vestibulum. Aliquam accumsan mauris non +lacus ultricies nec lacinia enim rhoncus. Curabitur vel tortor massa, elementum +tincidunt elit. Maecenas venenatis luctus arcu ut ullamcorper. Donec interdum +dolor eu enim tristique vel vehicula risus mollis. Nunc nec tortor quam. Nulla +a mauris arcu. Phasellus venenatis tortor vel odio tincidunt consequat. Integer +venenatis nibh vitae lectus laoreet eu feugiat nunc pretium. Integer nec turpis +metus, in fermentum lorem. diff --git a/examples/categoryblog/posts/random/2009-11-10-another-post.markdown b/examples/categoryblog/posts/random/2009-11-10-another-post.markdown new file mode 100644 index 0000000..0e00876 --- /dev/null +++ b/examples/categoryblog/posts/random/2009-11-10-another-post.markdown @@ -0,0 +1,14 @@ +--- +title: Another post +author: Marcus Tullius Cicero +--- +Vestibulum in ultrices urna. Etiam tempor enim dui, nec malesuada elit. Donec +tempor ligula et quam volutpat quis fermentum eros congue. Sed ut pulvinar sem. +Sed aliquam ipsum id purus sollicitudin vulputate. Cras et mauris dui, vel +hendrerit leo. Ut metus ipsum, fermentum ac malesuada id, tempus pharetra quam. +Donec diam felis, consequat ac scelerisque cursus, gravida non lectus. Sed +faucibus elit dapibus diam elementum id varius nisi tristique. Proin consequat +faucibus neque in aliquam. Vestibulum ligula odio, pulvinar vel hendrerit +vitae, egestas ut nibh. Praesent ut velit elit, in consequat dolor. Praesent +sem enim, commodo in gravida sed, adipiscing vel eros. Lorem ipsum dolor sit +amet, consectetur adipiscing elit. Proin non aliquam nunc. diff --git a/examples/categoryblog/posts/random/2009-12-23-almost-christmas.markdown b/examples/categoryblog/posts/random/2009-12-23-almost-christmas.markdown new file mode 100644 index 0000000..6f2e179 --- /dev/null +++ b/examples/categoryblog/posts/random/2009-12-23-almost-christmas.markdown @@ -0,0 +1,12 @@ +--- +title: Almost Christmas! +author: Publius Vergilius Maro +--- +Morbi tincidunt eleifend ante, eu gravida ante rutrum vel. Nunc bibendum nulla +tellus, eget egestas sapien. Nam rhoncus interdum libero, eget congue orci +imperdiet eu. Quisque pellentesque fringilla urna, ac venenatis ante ultricies +et. Pellentesque habitant morbi tristique senectus et netus et malesuada fames +ac turpis egestas. Mauris eleifend sagittis ultrices. Quisque ultrices accumsan +nisl, sed pellentesque metus porta vitae. Nulla facilisi. In et nibh tincidunt +mi volutpat pellentesque vitae nec sapien. Integer massa ipsum, pellentesque in +elementum at, cursus sit amet diam. diff --git a/examples/categoryblog/templates/default.html b/examples/categoryblog/templates/default.html new file mode 100644 index 0000000..049a37a --- /dev/null +++ b/examples/categoryblog/templates/default.html @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> + <head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>SimpleBlog - $title</title> + <link rel="stylesheet" type="text/css" href="$root/css/default.css" /> + <link rel="alternate" + type="application/rss+xml" + title="SimpleBlog" + href="http://example.com/rss.xml" /> + </head> + <body> + <h1>SimpleBlog - $title</h1> + <div id="navigation"> + <a href="$root/index.html">Home</a> + <a href="$root/posts.html">All posts</a> + </div> + + $body + </body> +</html> diff --git a/examples/categoryblog/templates/post.html b/examples/categoryblog/templates/post.html new file mode 100644 index 0000000..8ecb87d --- /dev/null +++ b/examples/categoryblog/templates/post.html @@ -0,0 +1,5 @@ +<h1>$title</h1> +by <em>$author</em> on <strong>$date</strong> +<div>Tagged as: $tags.</div> + +$body diff --git a/examples/categoryblog/templates/postitem.html b/examples/categoryblog/templates/postitem.html new file mode 100644 index 0000000..0e62418 --- /dev/null +++ b/examples/categoryblog/templates/postitem.html @@ -0,0 +1,4 @@ +<li> + <a href="$root/$url">$title</a> + - <em>$date</em> - by <em>$author</em> +</li> diff --git a/examples/categoryblog/templates/rss.xml b/examples/categoryblog/templates/rss.xml new file mode 100644 index 0000000..be918af --- /dev/null +++ b/examples/categoryblog/templates/rss.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" ?> +<rss version="2.0"> + <channel> + <title>The SimpleBlog</title> + <link>http://example.com</link> + <description>Simple blog in hakyll</description> + $items + </channel> +</rss> diff --git a/examples/categoryblog/templates/rssitem.xml b/examples/categoryblog/templates/rssitem.xml new file mode 100644 index 0000000..48573d2 --- /dev/null +++ b/examples/categoryblog/templates/rssitem.xml @@ -0,0 +1,5 @@ +<item> + <title>$title</title> + <link>http://example.com/$url</link> + <description>$title by $author</description> +</item> diff --git a/examples/tagblog/hakyll.hs b/examples/tagblog/hakyll.hs index 03dd488..c51007f 100644 --- a/examples/tagblog/hakyll.hs +++ b/examples/tagblog/hakyll.hs @@ -4,7 +4,7 @@ import Text.Hakyll (hakyll) import Text.Hakyll.Render import Text.Hakyll.Tags (readTagMap, renderTagCloud, renderTagLinks) import Text.Hakyll.File (getRecursiveContents, directory, removeSpaces) -import Text.Hakyll.Renderables (createPagePath, createCustomPage, createListingWith) +import Text.Hakyll.Renderables (createPagePath, createCustomPage, createListingWith, createListing) import Text.Hakyll.Context (ContextManipulation, renderDate) import Data.List (sort) import Data.Map (toList) @@ -46,14 +46,8 @@ main = hakyll $ do ]) renderablePosts -- Render rss feed - let recentRSSItems = renderAndConcat ["templates/rssitem.xml"] $ take 3 renderablePosts - let rssPage = createCustomPage "rss.xml" - ("templates/postitem.html" : take 3 postPaths) - [("items", Right recentRSSItems)] - renderChain ["templates/rss.xml"] rssPage - - -- Render index. - renderChain ["templates/default.html"] $ createPagePath "index.html" + let rss = createListing "rss.xml" "templates/rssitem.xml" (take 3 renderablePosts) [] + renderChain ["templates/rss.xml"] rss where postManipulation :: ContextManipulation postManipulation = renderDate "date" "%B %e, %Y" "Date unknown" diff --git a/examples/tagblog/templates/rss.xml b/examples/tagblog/templates/rss.xml index be918af..1217b4e 100644 --- a/examples/tagblog/templates/rss.xml +++ b/examples/tagblog/templates/rss.xml @@ -4,6 +4,6 @@ <title>The SimpleBlog</title> <link>http://example.com</link> <description>Simple blog in hakyll</description> - $items + $body </channel> </rss> |