summaryrefslogtreecommitdiff
path: root/examples/simpleblog
diff options
context:
space:
mode:
Diffstat (limited to 'examples/simpleblog')
-rwxr-xr-xexamples/simpleblog/hackbin0 -> 39309764 bytes
-rw-r--r--examples/simpleblog/hakyll.hs90
-rw-r--r--examples/simpleblog/templates/default.html12
-rw-r--r--examples/simpleblog/templates/index.html (renamed from examples/simpleblog/index.html)4
-rw-r--r--examples/simpleblog/templates/post.html6
-rw-r--r--examples/simpleblog/templates/postitem.html4
-rw-r--r--examples/simpleblog/templates/posts.html (renamed from examples/simpleblog/posts.html)2
7 files changed, 71 insertions, 47 deletions
diff --git a/examples/simpleblog/hack b/examples/simpleblog/hack
new file mode 100755
index 0000000..42e295e
--- /dev/null
+++ b/examples/simpleblog/hack
Binary files differ
diff --git a/examples/simpleblog/hakyll.hs b/examples/simpleblog/hakyll.hs
index 38472d5..db4230f 100644
--- a/examples/simpleblog/hakyll.hs
+++ b/examples/simpleblog/hakyll.hs
@@ -1,35 +1,59 @@
+{-# LANGUAGE OverloadedStrings #-}
module Main where
-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 Data.List (sort)
-import Control.Monad (forM_, liftM)
-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")]
- renderChain ["index.html", "templates/default.html"] index
-
- -- Render all posts list.
- let posts = createListing "posts.html" ["templates/postitem.html"]
- postPages [("title", Left "All posts")]
- renderChain ["posts.html", "templates/default.html"] posts
-
- -- Render all posts.
- liftIO $ putStrLn "Generating posts..."
- forM_ postPages $ renderChain [ "templates/post.html"
- , "templates/default.html"
- ]
+import Prelude hiding (id)
+import Control.Category (id)
+import Control.Arrow ((>>>), (***), arr)
+import Data.Monoid (mempty, mconcat)
+
+import Hakyll
+
+main :: IO ()
+main = hakyll $ do
+ -- Compress CSS
+ route "css/*" idRoute
+ compile "css/*" compressCssCompiler
+
+ -- Render posts
+ route "posts/*" $ setExtension ".html"
+ compile "posts/*" $
+ pageCompiler
+ >>> applyTemplateCompiler "templates/post.html"
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+ -- Render posts list
+ route "posts.html" $ idRoute
+ create "posts.html" $
+ constA mempty
+ >>> arr (setField "title" "All posts")
+ >>> requireAllA "posts/*" addPostList
+ >>> applyTemplateCompiler "templates/posts.html"
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+ -- Index
+ route "index.html" idRoute
+ create "index.html" $
+ constA mempty
+ >>> arr (setField "title" "Home")
+ >>> requireAllA "posts/*" (id *** arr (take 3 . reverse . sortByBaseName) >>> addPostList)
+ >>> applyTemplateCompiler "templates/index.html"
+ >>> applyTemplateCompiler "templates/default.html"
+ >>> relativizeUrlsCompiler
+
+ -- Read templates
+ compile "templates/*" templateCompiler
+
+ -- End
+ return ()
+
+-- | Auxiliary compiler: generate a post list from a list of given posts, and
+-- add it to the current page under @$posts@
+--
+addPostList :: Compiler (Page String, [Page String]) (Page String)
+addPostList = setFieldA "posts" $
+ arr (reverse . sortByBaseName)
+ >>> require "templates/postitem.html" (\p t -> map (applyTemplate t) p)
+ >>> arr mconcat
+ >>> arr pageBody
diff --git a/examples/simpleblog/templates/default.html b/examples/simpleblog/templates/default.html
index c411976..01ed20e 100644
--- a/examples/simpleblog/templates/default.html
+++ b/examples/simpleblog/templates/default.html
@@ -4,16 +4,16 @@
<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" />
+ <title>SimpleBlog - $title$</title>
+ <link rel="stylesheet" type="text/css" href="/css/default.css" />
</head>
<body>
- <h1>SimpleBlog - $title</h1>
+ <h1>SimpleBlog - $title$</h1>
<div id="navigation">
- <a href="$root/index.html">Home</a>
- <a href="$root/posts.html">All posts</a>
+ <a href="/index.html">Home</a>
+ <a href="/posts.html">All posts</a>
</div>
- $body
+ $body$
</body>
</html>
diff --git a/examples/simpleblog/index.html b/examples/simpleblog/templates/index.html
index 88cc0a2..4978949 100644
--- a/examples/simpleblog/index.html
+++ b/examples/simpleblog/templates/index.html
@@ -1,9 +1,9 @@
<div id="posts">
<h1>Recent posts</h1>
<ul>
- $body
+ $posts$
</ul>
- <a href="$root/posts.html">All posts...</a>
+ <a href="/posts.html">All posts...</a>
</div>
<div class="about">
diff --git a/examples/simpleblog/templates/post.html b/examples/simpleblog/templates/post.html
index 46797a4..e2864ba 100644
--- a/examples/simpleblog/templates/post.html
+++ b/examples/simpleblog/templates/post.html
@@ -1,4 +1,4 @@
-<h1>$title</h1>
-by <em>$author</em> on <strong>$date</strong>
+<h1>$title$</h1>
+by <em>$author$</em> on <strong>$date$</strong>
-$body
+$body$
diff --git a/examples/simpleblog/templates/postitem.html b/examples/simpleblog/templates/postitem.html
index 0e62418..19c954b 100644
--- a/examples/simpleblog/templates/postitem.html
+++ b/examples/simpleblog/templates/postitem.html
@@ -1,4 +1,4 @@
<li>
- <a href="$root/$url">$title</a>
- - <em>$date</em> - by <em>$author</em>
+ <a href="/$url$">$title$</a>
+ - <em>$date$</em> - by <em>$author$</em>
</li>
diff --git a/examples/simpleblog/posts.html b/examples/simpleblog/templates/posts.html
index 7db1a59..2bec161 100644
--- a/examples/simpleblog/posts.html
+++ b/examples/simpleblog/templates/posts.html
@@ -1,4 +1,4 @@
<h1>All posts</h1>
<ul>
- $body
+ $posts$
</ul>