on master help sign in
Add external articles
commitbb3f0d3cff573fe20df41b715b787e77d6bc9b40 authorJasper Van der Jeugt <m@jaspervdj.be> dateWed 30 Mar 2016, 21:32 (11 years ago) parent7d4a832
4 files changed+74−26
web/site.hs+34−23 web/templates/tutorial-item.html−1 web/templates/tutorials.html+34−2 web/tutorials/external-clean-urls-with-hakyll.md+6
web/site.hs+34−23
@@ -1,14 +1,13 @@
11--------------------------------------------------------------------------------
22{-# LANGUAGE OverloadedStrings #-}
3−import Control.Applicative ((<$>))
4−import Control.Arrow (second)
5−import Control.Monad (forM_)
6−import Data.Char (isDigit)
7−import Data.List (isPrefixOf, partition, sortBy)
8−import Data.Monoid (mappend)
9−import Data.Ord (comparing)
3+import Control.Arrow (second)
4+import Control.Monad (forM_)
5+import Data.Char (isDigit)
6+import Data.List (isPrefixOf, sortBy)
7+import Data.Monoid ((<>))
8+import Data.Ord (comparing)
109import Hakyll
11−import System.FilePath (dropTrailingPathSeparator, splitPath)
10+import System.FilePath (dropTrailingPathSeparator, splitPath)
1211import Text.Pandoc
1312
1413
@@ -53,18 +52,12 @@ main = hakyllWith config $ do
5352 create ["tutorials.html"] $ do
5453 route idRoute
5554 compile $ do
56− tutorials <- loadAll "tutorials/*"
57− itemTpl <- loadBody "templates/tutorial-item.html"
58− let (series, articles) = partitionTutorials $
59− sortBy (comparing itemIdentifier) tutorials
60−
61− series' <- applyTemplateList itemTpl defaultContext series
62− articles' <- applyTemplateList itemTpl defaultContext articles
55+ tuts <-
56+ sortBy (comparing itemIdentifier) <$> loadAll "tutorials/*"
6357
6458 let tutorialsCtx =
6559 constField "title" "Tutorials" `mappend`
66− constField "series" series' `mappend`
67− constField "articles" articles' `mappend`
60+ listField "tutorials" tutorialCtx (return tuts) `mappend`
6861 defaultContext
6962
7063 makeItem ""
@@ -112,9 +105,27 @@ hackage url
112105
113106
114107--------------------------------------------------------------------------------
115−-- | Partition tutorials into tutorial series & other articles
116−partitionTutorials :: [Item a] -> ([Item a], [Item a])
117−partitionTutorials = partition $ \i ->
118− case splitPath (toFilePath $ itemIdentifier i) of
119− [_, (x : _)] -> isDigit x
120− _ -> False
108+data TutorialType = SeriesTutorial | ArticlesTutorial | ExternalTutorial
109+ deriving (Eq)
110+
111+
112+--------------------------------------------------------------------------------
113+-- | Partition tutorials into tutorial series, other articles, external articles
114+tutorialCtx :: Context String
115+tutorialCtx =
116+ field "isSeries" (isTutorialType SeriesTutorial) <>
117+ field "isArticle" (isTutorialType ArticlesTutorial) <>
118+ field "isExternal" (isTutorialType ExternalTutorial) <>
119+ defaultContext
120+ where
121+ getTutorialType item = do
122+ mbExternal <- getMetadataField (itemIdentifier item) "external"
123+ return $ case mbExternal of
124+ Just _ -> ExternalTutorial
125+ _ -> case splitPath (toFilePath $ itemIdentifier item) of
126+ [_, (x : _)] -> if isDigit x then SeriesTutorial else ArticlesTutorial
127+ _ -> ArticlesTutorial
128+
129+ isTutorialType ty0 item = do
130+ ty1 <- getTutorialType item
131+ if ty0 == ty1 then return "yes" else fail "no"
web/templates/tutorial-item.htmldeleted−1
@@ -1 +0,0 @@
1−<li><a href="$url$">$title$</a> by <em>$author$</em></li>
web/templates/tutorials.html+34−2
@@ -1,9 +1,36 @@
11<h1>Tutorials about Hakyll</h1>
22<h2>Tutorial series</h2>
3−<ul>$series$</ul>
3+<ul>
4+ $for(tutorials)$
5+ $if(isSeries)$
6+ <li>
7+ <a href="$url$">$title$</a>
8+ </li>
9+ $endif$
10+ $endfor$
11+</ul>
412<h2>Other articles</h2>
513<p>In no particular order:</p>
6−<ul>$articles$</ul>
14+<ul>
15+ $for(tutorials)$
16+ $if(isArticle)$
17+ <li>
18+ <a href="$url$">$title$</a> by <em>$author$</em>
19+ </li>
20+ $endif$
21+ $endfor$
22+</ul>
23+<h2>External articles</h2>
24+<p>In no particular order:</p>
25+<ul>
26+ $for(tutorials)$
27+ $if(isExternal)$
28+ <li>
29+ <a href="$url$">$title$</a> by <em>$author$</em>
30+ </li>
31+ $endif$
32+ $endfor$
33+</ul>
734<p>
835 All these tutorials assume you are using the latest stable version of
936 Hakyll. If this is not the case, you might want to update using:
@@ -11,3 +38,8 @@
1138<pre><code>$$ ghc-pkg unregister hakyll
1239$$ cabal update
1340$$ cabal install hakyll</code></pre>
41+
42+<p>
43+ Or using stack:
44+</p>
45+<pre><code>$$ stack install hakyll</code></pre>
web/tutorials/external-clean-urls-with-hakyll.mdnew file+6
@@ -0,0 +1,6 @@
1+---
2+title: Clean URLs with Hakyll
3+author: Rohan Jain
4+url: http://www.rohanjain.in/hakyll-clean-urls/
5+external: true
6+---