packages feed

hakyll-series-0.1.0.1: hakyll-series.cabal

name:               hakyll-series
version:            0.1.0.1
synopsis:           Adds series functionality to hakyll
description:
  Module for adding series functionality to hakyll.
  .
  Example <https://oisdk.github.io/hakyll-series/ here>.
  .
  In your posts, provide metadata at the top like so:
  .
  > ---
  > title: something
  > series: things
  > ---
  .
  This will add the following fields to the post:
  .
    [@series@]: The name of the series
    [@seriesLength@]: The total number of posts in the series
    [@seriesCurPos@]: The position of the current post in the series
    [@seriesUrl@]: The URL of the series page
  .
  Using that, in your post template, something like this:
  .
  >
  > $if(series)$
  >     <a href="$seriesUrl$">Part $seriesCurPos$ of a $seriesLength$-part series on $series$</a>
  > $endif$
  .
  Will render like this:
  .
  > Part 1 of a 5-part series on things
  .
  Linked to the aggregate page for the series, which would render something like this:
  .
  > Things
  > Part 1: something
  .
  To add it to your blog, add something like this to your @main@:
  .
  > series <- buildSeries "posts/*" (fromCapture "series/*.html")
  >
  > tagsRules series $ \(s:erie) pattrn -> do
  >     let title = toUpper s : erie
  >     route idRoute
  >     compile $ do
  >         posts <- chronological =<< loadAll pattrn
  >         let ctx = constField "title" title `mappend`
  >                   listField "posts" postCtx (pure posts) `mappend`
  >                   defaultContext
  >
  >         makeItem ""
  >             >>= loadAndApplyTemplate "templates/series.html" ctx
  >             >>= loadAndApplyTemplate "templates/default.html" ctx
  >             >>= relativizeUrls
  .
  To have access to the series context in each post, change the post rule to something like this:
  .
  > match "posts/*" $ do
  >     route $ setExtension "html"
  >     compile $ pandocCompiler
  >         >>= loadAndApplyTemplate "templates/post.html"    (postCtxWithSeries series)
  >         >>= loadAndApplyTemplate "templates/default.html" (postCtxWithSeries series)
  >         >>= relativizeUrls
  .
  Where `postCtxWithSeries` can be something like:
  .
  > postCtxWithSeries :: Tags -> Context String
  > postCtxWithSeries series = seriesField series `mappend` postCtx
  .
  A minimal example is provided in this repo, on top of the default hakyll setup. (it also provides the templates)
build-type:         Simple
cabal-version:      >= 1.10
homepage:           https://github.com/oisdk/hakyll-series
license:            MIT
license-file:       LICENSE
author:             Donnacha Oisín Kidney
copyright:          2016 Donnacha Oisín Kidney
maintainer:         mail@doisinkidney.com
category:           Web

library
  hs-source-dirs:   src
  exposed-modules:  Hakyll.Web.Series
  build-depends:    base == 4.*
                  , hakyll >= 4.8.0
                  , containers >= 0.5
  default-language: Haskell2010

source-repository head
  type:     git
  location: https://github.com/oisdk/hakyll-series