packages feed

sproxy-web-0.3.1: src/Views/Common.hs

{-# LANGUAGE OverloadedStrings #-}

module Views.Common (pageT, inp, sel) where

import           Data.Text.Lazy (Text)
import           Text.Blaze.Html5 hiding (option)
import qualified Text.Blaze.Html5 as H
import           Text.Blaze.Html5.Attributes hiding (name)
import qualified Text.Blaze.Html5.Attributes as A

inp :: Text -> Text -> Html 
inp name ph =
    H.input ! A.type_ "text"
            ! A.placeholder (toValue ph)
            ! A.id (toValue name) ! A.name (toValue name)

sel :: Text -> [Text] -> Html
sel name options = 
    H.select ! A.name (toValue name) ! A.id (toValue name) $
        mapM_ optToHtml options

    where optToHtml option = 
              H.option ! A.value (toValue option) $ toHtml option

pageT :: Text -> Html -> Html
pageT t cont = do
    docTypeHtml ! lang "en" $ do
        H.head $ do
            H.title (toHtml t)
            meta ! A.name "viewport" ! content "width=device-width, initial-scale=1"
            --  Latest compiled and minified CSS 
            link ! rel "stylesheet" ! href "/static/css/bootstrap.min.css"
            --  Optional theme 
            link ! rel "stylesheet" ! href "/static/css/bootstrap-theme.min.css"
            --  My own CSS file 
            link ! rel "stylesheet" ! href "/static/css/style.css"
            
            -- required js files
            script ! A.type_ "text/javascript" ! src "/static/js/jquery.min.js" $ mempty
            script ! A.type_ "text/javascript" ! src "/static/js/jquery.color.min.js" $ mempty
            script ! A.type_ "text/javascript" ! src "/static/js/bootstrap.min.js" $ mempty
            script ! A.type_ "text/javascript" ! src "/static/js/longtable.js" $ mempty
            script ! A.type_ "text/javascript" ! src "/static/js/jquery.jeditable.min.js" $ mempty
            script ! A.type_ "text/javascript" ! src "/static/js/utils.js" $ mempty

        body $ do

            H.div ! A.class_ "navbar navbar-inverse navbar-fixed-top" $ do
              H.div ! A.class_ "container" $ do

                -- header for the navbar
                H.div ! A.class_ "navbar-header" $ do
                  H.button ! A.type_ "button" ! A.class_  "navbar-toggle" 
                           ! dataAttribute "toggle" "collapse" 
                           ! dataAttribute "target" ".navbar-collapse" $ do
                    H.span ! A.class_ "sr-only" $ "Toggle navigation"
                    H.span ! A.class_ "icon-bar" $ mempty
                    H.span ! A.class_ "icon-bar" $ mempty
                    H.span ! A.class_ "icon-bar" $ mempty
                  H.a ! A.class_ "navbar-brand" ! A.href "/" $ "sproxy-web"

                H.div ! A.class_ "collapse navbar-collapse" $ do
                  H.ul ! A.class_ "nav navbar-nav" $ do
                    H.li ! A.id "animat-gr" $ H.a ! A.href "/groups" $ "Groups and users"
                    H.li ! A.id "animat-do" $ H.a ! A.href "/domains" $ "Domains and privileges"

                  H.form ! A.id "searchform" ! A.class_ "navbar-form navbar-right"
                         ! A.method "POST"   ! A.action "/search" $
                    H.input ! A.type_ "text"
                            ! A.name  "search_query"
                            ! A.class_ "form-control"
                            ! A.placeholder "Search an email"

            H.div ! class_ "container content" $ do
                H.div ! A.class_ "page-header text-center" $ 
                    H.h1 $ toHtml t
                cont
 
            --  Latest compiled and minified JavaScript
            -- script ! A.type_ "text/javascript" ! src "/static/js/jquery-1.10.2.min.js" $ mempty