-- | XHTML attribute constructors.  Where an attribute name conflicts
--   with a haskell keyword the attribute name is written with a prime
--   suffix, ie. @class'@.  Where an attribute name conflicts with an
--   element name the attribute name is written likewise.
module Text.HTML.Light.Attribute where

import Text.XML.Light

mk_attr :: String -> String -> Attr
mk_attr a = Attr (unqual a)

-- | Make an 'Attr' where the /key/ and /value/ are equal.
mk_bool_attr :: String -> Attr
mk_bool_attr a = Attr (unqual a) a

action :: String -> Attr
action = mk_attr "action"

align :: String -> Attr
align = mk_attr "align"

alt :: String -> Attr
alt = mk_attr "alt"

bgcolor :: String -> Attr
bgcolor = mk_attr "bgcolor"

border :: String -> Attr
border = mk_attr "border"

-- | Prime suffixed since /class/ is a reserved word.
class' :: String -> Attr
class' = mk_attr "class"

classid :: String -> Attr
classid = mk_attr "classid"

cols :: String -> Attr
cols = mk_attr "cols"

colspan :: String -> Attr
colspan = mk_attr "colspan"

content :: String -> Attr
content = mk_attr "content"

controls :: Attr
controls = mk_bool_attr "controls"

coords :: String -> Attr
coords = mk_attr "coords"

-- | Prime suffixed since /data/ is a reserved word.
data' :: String -> Attr
data' = mk_attr "data"

datetime :: String -> Attr
datetime = mk_attr "datetime"

enctype :: String -> Attr
enctype = mk_attr "enctype"

frameborder :: String -> Attr
frameborder = mk_attr "frameborder"

height :: String -> Attr
height = mk_attr "height"

href :: String -> Attr
href = mk_attr "href"

id :: String -> Attr
id = mk_attr "id"

http_equiv :: String -> Attr
http_equiv = Attr (unqual "http-equiv")

lang :: String -> Attr
lang = mk_attr "lang"

language :: String -> Attr
language = mk_attr "language"

media :: String -> Attr
media = mk_attr "media"

method :: String -> Attr
method = mk_attr "method"

name :: String -> Attr
name = mk_attr "name"

onblur :: String -> Attr
onblur = mk_attr "onblur"

onfocus :: String -> Attr
onfocus = mk_attr "onfocus"

onkeydown :: String -> Attr
onkeydown = mk_attr "onkeydown"

onkeypress :: String -> Attr
onkeypress = mk_attr "onkeypress"

onkeyup :: String -> Attr
onkeyup = mk_attr "onkeyup"

onmousedown :: String -> Attr
onmousedown = mk_attr "onmousedown"

onmousemove :: String -> Attr
onmousemove = mk_attr "onmousemove"

onmouseout :: String -> Attr
onmouseout = mk_attr "onmouseout"

onmouseover :: String -> Attr
onmouseover = mk_attr "onmouseover"

onmouseup :: String -> Attr
onmouseup = mk_attr "onmouseup"

onmousewheel :: String -> Attr
onmousewheel = mk_attr "onmousewheel"

quality :: String -> Attr
quality = mk_attr "quality"

rel :: String -> Attr
rel = mk_attr "rel"

rows :: String -> Attr
rows = mk_attr "rows"

rowspan :: String -> Attr
rowspan = mk_attr "rowspan"

seamless :: Attr
seamless = mk_bool_attr "seamless"

shape :: String -> Attr
shape = mk_attr "shape"

-- | Prime suffixed since /span/ is the name of both an attribute and
-- element.
span' :: String -> Attr
span' = mk_attr "span"

src :: String -> Attr
src = mk_attr "src"

-- | Prime suffixed since /style/ is the name of both an attribute and
-- element.
style' :: String -> Attr
style' = mk_attr "style"

tabindex :: String -> Attr
tabindex = mk_attr "tabindex"

target :: String -> Attr
target = mk_attr "target"

-- | Prime suffixed since /title/ is the name of both an attribute and
-- element.
title' :: String -> Attr
title' = mk_attr "title"

-- | Prime suffixed since /type/ is a reserved word.
type' :: String -> Attr
type' = mk_attr "type"

usemap :: String -> Attr
usemap = mk_attr "usemap"

user_data :: String -> String -> Attr
user_data k = mk_attr ("data-" ++ k)

valign :: String -> Attr
valign = mk_attr "valign"

value :: String -> Attr
value = mk_attr "value"

width :: String -> Attr
width = mk_attr "width"

xml_lang :: String -> Attr
xml_lang = Attr (unqual "xml:lang")

xmlns :: String -> Attr
xmlns = mk_attr "xmlns"