-- | Element constructors.  The resulting elements are lifted to the
--   Content data type, with the exception of the 'html' element.
module Text.HTML.Light.Element where

import Text.XML.Light

-- * Content constructors

-- | Ordinary character data, subject to escaping.
cdata :: String -> Content
cdata s = Text (CData CDataText s Nothing)

-- | Raw character data, not subject to escaping.
cdata_raw :: String -> Content
cdata_raw s = Text (CData CDataRaw s Nothing)

-- * Element constructors

-- | Element contructor.
type Element_C = [Attr] -> [Content] -> Content

-- | Empty element contructor.
type Empty_Element_C = [Attr] -> Content

mk_element :: String -> Element_C
mk_element nm z e = Elem (Element (unqual nm) z e Nothing)

mk_empty_element :: String -> Empty_Element_C
mk_empty_element nm z = Elem (Element (unqual nm) z [] Nothing)

a :: Element_C
a = mk_element "a"

address :: Element_C
address = mk_element "address"

area :: Empty_Element_C
area = mk_empty_element "area"

article :: Element_C
article = mk_element "article"

aside :: Element_C
aside = mk_element "aside"

audio :: Element_C
audio = mk_element "audio"

body :: Element_C
body = mk_element "body"

br :: Empty_Element_C
br = mk_empty_element "br"

caption :: Element_C
caption = mk_element "caption"

cite :: Element_C
cite = mk_element "cite"

colgroup :: Element_C
colgroup = mk_element "colgroup"

col :: Empty_Element_C
col = mk_empty_element "col"

div :: Element_C
div = mk_element "div"

embed :: Empty_Element_C
embed = mk_empty_element "embed"

figcaption :: Element_C
figcaption = mk_element "figcaption"

figure :: Element_C
figure = mk_element "figure"

footer :: Element_C
footer = mk_element "footer"

form :: Element_C
form = mk_element "form"

frame :: Empty_Element_C
frame = mk_empty_element "frame"

frameset :: Empty_Element_C
frameset = mk_empty_element "frameset"

h1 :: Element_C
h1 = mk_element "h1"

h2 :: Element_C
h2 = mk_element "h2"

h3 :: Element_C
h3 = mk_element "h3"

h4 :: Element_C
h4 = mk_element "h4"

head :: Element_C
head = mk_element "head"

header :: Element_C
header = mk_element "header"

hgroup :: Element_C
hgroup = mk_element "hgroup"

hr :: Empty_Element_C
hr = mk_empty_element "hr"

html :: [Attr] -> [Content] -> Element
html z e = Element (unqual "html") z e Nothing

iframe :: Element_C
iframe = mk_element "iframe"

img :: Empty_Element_C
img = mk_empty_element "img"

input :: Empty_Element_C
input = mk_empty_element "input"

li :: Element_C
li = mk_element "li"

link :: Empty_Element_C
link = mk_empty_element "link"

map :: Element_C
map = mk_element "map"

meta :: Empty_Element_C
meta = mk_empty_element "meta"

nav :: Element_C
nav = mk_element "nav"

object :: Element_C
object = mk_element "object"

ol :: Element_C
ol = mk_element "ol"

param :: Empty_Element_C
param = mk_empty_element "param"

ul :: Element_C
ul = mk_element "ul"

dl :: Element_C
dl = mk_element "dl"

dt :: Element_C
dt = mk_element "dt"

dd :: Element_C
dd = mk_element "dd"

p :: Element_C
p = mk_element "p"

pre :: Element_C
pre = mk_element "pre"

q :: Element_C
q = mk_element "q"

script :: Element_C
script = mk_element "script"

section :: Element_C
section = mk_element "section"

source :: Empty_Element_C
source = mk_empty_element "source"

span :: Element_C
span = mk_element "span"

style :: Element_C
style = mk_element "style"

table :: Element_C
table = mk_element "table"

td :: Element_C
td = mk_element "td"

textarea :: Element_C
textarea = mk_element "textarea"

th :: Element_C
th = mk_element "th"

thead :: Element_C
thead = mk_element "thead"

time :: Element_C
time = mk_element "time"

title :: Element_C
title = mk_element "title"

tr :: Element_C
tr = mk_element "tr"

wbr :: Empty_Element_C
wbr = mk_empty_element "wbr"