webpage-0.0.3.1: src/Web/Page/Types.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE ExtendedDefaultRules #-}
{-# LANGUAGE TemplateHaskell #-}
module Web.Page.Types where
import Data.Default
import Data.Monoid
-- import Control.Lens
-- | Generic layout for a web page. We keep the data type purely parametric to
-- allow for record-syntax overloading / reassignment, like this:
-- .
--
-- > page :: WebPage (Html ()) T.Text
-- @ page' = page \{pageTitle = "foo!"\}@
--
data WebPage markup attr = WebPage { pageTitle :: attr -- ^ Page title
, favicon :: markup -- ^ Favicon tags
, metaVars :: markup -- ^ @\<meta\>@ tags
, initScripts :: markup -- ^ JavaScript to include at the top of the page
, beforeStylesScripts :: markup -- ^ JavaScript to include before @\<style\>@ tags
, styles :: markup -- ^ Styles
, afterStylesScripts :: markup -- ^ JavaScript to include after @\<style\>@ tags - ie: <http://modernizr.com Modernizr>
, bodyScripts :: markup -- ^ JavaScript to include at the base of @\<body\>@
}
deriving Show
-- makeLenses ''WebPage
instance (Monoid m, Monoid a) => Default (WebPage m a) where
def = WebPage mempty mempty mempty mempty mempty mempty mempty mempty
emptyPage :: (Monoid m, Monoid a) => WebPage m a
emptyPage = WebPage mempty mempty mempty mempty mempty mempty mempty mempty