{-# OPTIONS -fno-warn-orphans #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE OverloadedStrings #-} {-# OPTIONS -fno-warn-name-shadowing -fno-warn-unused-do-bind #-} module Text.Blaze.Extra where import Control.Monad import Data.Monoid import Data.Monoid.Operator import Prelude hiding ((++),head,div) import Text.Blaze.Html5 as H hiding (map) import Text.Blaze.Html5.Attributes as A import Text.Blaze.Internal (Attributable) import Network.URI.Params import Network.URI import Text.Printf import Data.List (intercalate) (!.) :: (Attributable h) => h -> AttributeValue -> h elem !. className = elem ! class_ className (!#) :: (Attributable h) => h -> AttributeValue -> h elem !# idName = elem ! A.id idName linesToHtml :: String -> Html linesToHtml str = forM_ (lines str) $ \line -> do toHtml line; br htmlIntercalate :: Html -> [Html] -> Html htmlIntercalate _ [x] = x htmlIntercalate sep (x:xs) = do x; sep; htmlIntercalate sep xs htmlIntercalate _ [] = mempty htmlCommasAnd :: [Html] -> Html htmlCommasAnd [x] = x htmlCommasAnd [x,y] = do x; " and "; y htmlCommasAnd (x:xs) = do x; ", "; htmlCommasAnd xs htmlCommasAnd [] = mempty htmlCommas :: [Html] -> Html htmlCommas = htmlIntercalate ", " hrefSet :: URI -> String -> String -> Attribute hrefSet uri key value = hrefURI updated where updated = updateUrlParam key value uri hrefURI :: URI -> Attribute hrefURI uri = href (toValue (showURI uri)) where showURI URI{..} = uriPath ++ uriQuery hrefURIWithHash :: URI -> String -> Attribute hrefURIWithHash uri hash = href (toValue (showURI uri ++ "#" ++ hash)) where showURI URI{..} = uriPath ++ uriQuery hrefAssoc :: String -> [(String,String)] -> Attribute hrefAssoc path qs = href (toValue uri) where uri = "/" ++ path ++ "?" ++ intercalate "&" (map (uncurry (printf "%s=%s")) qs) instance ToValue URI where toValue = toValue . show