site: Update posts and tags

This commit is contained in:
Tom Hubrecht 2023-06-21 16:21:35 +02:00
parent 56dc9177c4
commit b840e902b9
10 changed files with 107 additions and 33 deletions

View file

@ -3,9 +3,9 @@ title: Liste des publications
---
<div class="panel-tabs">
<a class="is-active" href="#">Récentes</a>
<a class="is-active">Toutes les publications</a>
<a href="/tags.html">Catégories</a>
<a href="/about.html#poles">Pôles</a>
<a href="/poles.html">Pôles</a>
<a href="/authors.html">Auteur·e·s</a>
</div>

View file

@ -23,7 +23,7 @@ index: true
<div class="panel-tabs">
<a class="is-active" href="#">Récents</a>
<a href="/tags.html">Catégories</a>
<a href="/about.html#poles">Pôles</a>
<a href="/poles.html">Pôles</a>
<a href="/authors.html">Auteur·e·s</a>
</div>

View file

@ -1,8 +1,8 @@
<div class="panel-tabs">
<a href="/archives.html">Récentes</a>
<a href="/archives.html">Toutes les publications</a>
<a href="/tags.html">Catégories</a>
<a href="/about.html#poles">Pôles</a>
<a class="is-active" href="#">Auteur·e·s</a>
<a href="/poles.html">Pôles</a>
<a class="is-active">Auteur·e·s</a>
</div>
$authors$

View file

@ -2,7 +2,12 @@ $body$
$if(posts)$
<hr>
<div class="subtitle is-6">Liste des articles rattachés à ce pôle :</div>
<a class="panel-block" href="/poles.html">
<span class="control is-fullwidth has-text-centered">
Retour à la liste des pôles
<span class="icon"><i class="fa-solid fa-rotate-left"></i></span>
</span>
</a>
$partial("templates/posts.html")$
$endif$

View file

@ -1,2 +0,0 @@
Vous pouvez trouver tout les poles <a href="/about.html#pôles">ici</a>.
$partial("templates/posts.html")$

View file

@ -0,0 +1,8 @@
<div class="panel-tabs">
<a href="/archives.html">Toutes les publications</a>
<a href="/tags.html">Catégories</a>
<a class="is-active">Pôles</a>
<a href="/authors.html">Auteur·e·s</a>
</div>
$poles$

View file

@ -1,19 +1,23 @@
<article>
<section class="header">
Posté le $date$
$if(author)$
$author$
$endif$
</section>
<ul class="poles">$if(poles)$
$poles$
$endif$
</ul>
<ul class="tags">$if(tags)$
$tags$
$endif$
</ul>
<section class="content">
$body$
</section>
</article>
<section class="content">
$body$
</section>
<br>
<section class="mt-5 notification is-dark">
Posté le $date$
$if(author)$
$author$
$endif$
<div class="mt-2">
$if(poles)$
<span>Pôles associés :</span>
$poles$
$endif$
<span>Catégories :</span>
$if(tags)$
$tags$
$endif$
</div>
</section>

View file

@ -1,7 +1,7 @@
<div class="panel-tabs">
<a href="/archives.html">Récentes</a>
<a class="is-active" href="#">Catégories</a>
<a href="/about.html#poles">Pôles</a>
<a href="/archives.html">Toutes les publications</a>
<a class="is-active">Catégories</a>
<a href="/poles.html">Pôles</a>
<a href="/authors.html">Auteur·e·s</a>
</div>

View file

@ -14,6 +14,7 @@ executable ssg
build-depends: base ^>=4.16.4.0
, blaze-html
, blaze-markup
, containers
, hakyll
, pandoc
, pandoc-types

View file

@ -8,6 +8,7 @@
import Control.Applicative ((<|>))
import Control.Monad (void, (<=<))
import Data.List (intersperse)
import Data.Map qualified as M
import Data.Monoid (First (..))
import Hakyll
import Text.Blaze.Html.Renderer.String (renderHtml)
@ -26,6 +27,18 @@ import Text.Pandoc.Walk (query, walk)
nbPostsHome :: Int
nbPostsHome = 10
poleName :: M.Map String String
poleName =
M.fromList
[ ("administration-systeme", "Administration Système"),
("communication", "Communication"),
("formation", "Formation"),
("geopolitique", "Géopolitique"),
("juridique", "Juridique"),
("logiciel", "Logiciel"),
("recherche", "Recherche")
]
patternFrom :: [String] -> [String] -> Pattern
patternFrom basenames extensions =
foldl1 (.||.) $ map aux basenames
@ -154,6 +167,10 @@ main = hakyll $ do
>>= loadAndApplyTemplate "templates/default.html" context
>>= relativizeUrls
create ["poles.html"] $ do
route idRoute
compile (polePanelCompiler poles)
-- Authors
tagsRules authors $ \authorStr authorsPattern -> do
let title = "Articles écrits par « " ++ authorStr ++ " »"
@ -229,6 +246,24 @@ authorPanelCompiler authors = do
>>= loadAndApplyTemplate "templates/default.html" ctx
>>= relativizeUrls
makePolePanelLink :: String -> String -> Int -> Int -> Int -> String
makePolePanelLink pole url count _ _ =
renderHtml $ H.a H.! A.href (H.toValue url) H.! A.class_ "panel-block" $ do
H.span H.! A.class_ "tag mr-3" $ H.toHtml (pluralize count "publication")
H.toHtml (poleName M.! pole)
polePanelCompiler :: Tags -> Compiler (Item String)
polePanelCompiler poles = do
let ctx =
field "poles" (\_ -> renderTags makePolePanelLink (mconcat . intersperse "\n") poles)
<> constField "title" "Liste des pôles"
<> context
makeItem ""
>>= loadAndApplyTemplate "templates/poles.html" ctx
>>= loadAndApplyTemplate "templates/default.html" ctx
>>= relativizeUrls
makeTagPanelLink :: String -> String -> Int -> Int -> Int -> String
makeTagPanelLink tag url count _ _ =
renderHtml $ H.a H.! A.href (H.toValue url) H.! A.class_ "panel-block" $ do
@ -247,6 +282,29 @@ tagPanelCompiler tags = do
>>= loadAndApplyTemplate "templates/default.html" ctx
>>= relativizeUrls
renderTagLink :: String -> Maybe FilePath -> Maybe H.Html
renderTagLink _ Nothing = Nothing
renderTagLink tag (Just filePath) =
Just
$ H.a
H.! A.title (H.stringValue $ "Pages relatives à « " ++ tag ++ " »")
H.! A.class_ "tag is-link"
H.! A.href (H.toValue $ toUrl filePath)
$ H.toHtml tag
renderPoleLink :: String -> Maybe FilePath -> Maybe H.Html
renderPoleLink _ Nothing = Nothing
renderPoleLink pole (Just filePath) =
Just
$ H.a
H.! A.title (H.stringValue $ "Page du pôle « " ++ (poleName M.! pole) ++ " »")
H.! A.class_ "tag is-light has-text-dark"
H.! A.href (H.toValue $ toUrl filePath)
$ H.toHtml (poleName M.! pole)
makeTags :: [H.Html] -> H.Html
makeTags tags = H.div H.! A.class_ "tags mt-2" $ (mconcat . intersperse "\n") tags
-- Utility functions
pluralize :: Int -> String -> String
pluralize count str = case count of
@ -304,10 +362,10 @@ postCtx =
postCtxWith :: Tags -> Tags -> Tags -> Context String
postCtxWith tags authors poles =
tagsFieldWith (getTagsByField "poles") simpleRenderLink (mconcat . intersperse ", ") "poles" poles
tagsFieldWith (getTagsByField "poles") renderPoleLink makeTags "poles" poles
<> tagsFieldWith (getTagsByField "authors") simpleRenderLink (mconcat . (\l -> if null l then [] else H.toHtml ("par " :: String) : l) . intersperse ", ") "author" authors
<> tagsFieldWith (getTagsByField "authors") licenseRenderLink (mconcat . intersperse ", " . (\l -> if null l then [] else l ++ [H.toHtml ("and" :: String)])) "authorLicense" authors
<> tagsField "tags" tags
<> tagsFieldWith getTags renderTagLink makeTags "tags" tags
<> postCtx
simpleRenderLink :: String -> Maybe FilePath -> Maybe H.Html