module Text.Xhtml.Xhtml where
import Prelude hiding (head, div, span)
import Text.Xml.Xml hiding (text)
import qualified Text.Xml.Xml
-------[ XHTML shortcuts ]-----------------------------------------------------
-- Document structure elements.
document t b = html $ nodeset [head (title t), body b]
html = doc . element "html"
head = element "head"
title = element "title" . text
body = element "body"
-- Title elements.
h1 = element "h1"
h2 = element "h2"
h3 = element "h3"
h4 = element "h4"
h5 = element "h5"
h6 = element "h5"
header i = element ("h" ++ show i)
-- Block level elements.
div = element "div"
pre = element "pre"
par = element "p"
input = element "input"
ul = element "ul" . nodeset . map (element "li")
ol = element "ol" . nodeset . map (element "li")
dlterm = element "dt"
dldef = element "df"
dl = element "dl" . nodeset . concat . map (\(k, v) -> [element "dt" k, element "dd" v])
-- Inline elements.
text = Text.Xml.Xml.text
span = element "span"
img s a = attribute "src" s $ attribute "alt" a $ element "img" $ text ""
anchor h = attribute "href" h . element "a"
link h = anchor h . text
emph = element "em"
strong = element "strong"
tt = element "tt"
dfn = element "dfn"
code = element "code"
cite = element "cite"
hr = element "hr" $ nodeset []
-- Shortcuts for custom elements using classes.
withClass c e = attribute "class" c . e
classDiv = flip withClass div
classSpan = flip withClass span
withName n e = attribute "name" n . e
nameDiv = flip withName div
nameSpan = flip withName span