packages feed

bamboo-theme-mini-html5-2009.11.3: src/Bamboo/Theme/MiniHTML5/Widget/Template.hs

{-# LANGUAGE NoMonomorphismRestriction#-}
{-# LANGUAGE NoImplicitPrelude #-}
module Bamboo.Theme.MiniHTML5.Widget.Template (page) where

import Bamboo.Theme.MiniHTML5.Env hiding (navigation, sidebar)
import Bamboo.Helper.StateHelper hiding (uri)
import Bamboo.Type.State
import Web.HCheat
import Text.HTML.Moe.DSL.Kawaii
import Data.ByteString.Lazy.Char8 (fromChunks)
import Bamboo.Theme.MiniHTML5.Widget.Navigation
import Bamboo.Theme.MiniHTML5.Widget.Sidebar
import qualified Bamboo.Type.Config as C
import qualified Bamboo.Type.State as S
import qualified Bamboo.Type.Theme as T
import Hack
import Text.HTML.Moe.Type (Attribute)

charset :: String -> Attribute
charset = attr "charset"

role :: String -> Attribute
role = _class

template, page :: State -> MoeUnit -> Response
template s x = html_response - fromChunks - return - render' - do
  raw doc_type
  html' - do
    head' - do

      let apply_if f g y = if f y then g y else y
          root = (s.env.slashed_script_name /) 
          page_title = s.config.blog_title ++ s.S.resource_title.apply_if (null > not) (" / " ++)

      meta [charset "utf-8"]

      title' - str - page_title
      link [rel "icon", _type "image/png", href - root - s.config.favicon]
      -- link [rel "alternate", _type "application/rss+xml", href - rss_url_link_pair s .fst, title' "RSS 2.0"]

      s.config.theme_config.T.css.mapM_ (root > css)
      s.config.theme_config.T.js.mapM_(root > js)

    body' - do
      header [role "banner"] - do
        div [_class "title"] -
          str - s.config.blog_title

        div [_class "sub-title"] -
          str - s.config.blog_subtitle

      when (has_extension Search) - 
        form [action "/search", method "get", role "search"] -
          input [name "s", id "s", _type "text", value ""]

      navigation s

      div [id "page"] - do
        section [role "posts"] - x
        sidebar s
  
      footer' - do
        case s.config.C.footer of 
          Just y -> raw - y.markup.show_html
          Nothing -> do
            str - "©2009 " ++ s.config.blog_title
            br'
            str - "Powered by "
            a [href - s.config.bamboo_url] - str "Bamboo"
            str - " using "
            a [href "http://www.haskell.org/"] - str "Haskell"

      when (has_extension Analytics) -
        raw - analytics - s.config.analytics_account_id

page = template