{-# LANGUAGE OverloadedStrings #-}
module React.Attrs where

import qualified Data.Aeson as Aeson
import Data.Text (Text)

import React.GHCJS
import React.Types


-- | When importing a foreign class you must specify the props it takes. In the
-- common case where it takes no props, only handles layout, it's convenient to
-- specify the type of props as 'NoProps'.
--
-- Example:
--
--     pageLayout_ :: ReactNode () -> ReactNode ()
--     pageLayout_ = importParentClass pageLayout noProps
newtype NoProps = NoProps ()


-- | Used when importing a foreign class taking no props. See above example.
noProps :: NoProps
noProps = NoProps ()


instance ToJSRef NoProps where
    toJSRef _ = newObj


mkStaticAttr :: Aeson.ToJSON a => Text -> a -> AttrOrHandler sig
mkStaticAttr name = StaticAttr name . Aeson.toJSON


key_ :: Text -> AttrOrHandler sig
key_ = mkStaticAttr "key"

class_ :: Text -> AttrOrHandler sig
class_ = mkStaticAttr "className"

href_ :: Text -> AttrOrHandler sig
href_ = mkStaticAttr "href"

id_ :: Text -> AttrOrHandler sig
id_ = mkStaticAttr "id"

src_ :: Text -> AttrOrHandler sig
src_ = mkStaticAttr "src"

value_ :: Text -> AttrOrHandler sig
value_ = mkStaticAttr "value"

placeholder_ :: Text -> AttrOrHandler sig
placeholder_ = mkStaticAttr "placeholder"

for_ :: Text -> AttrOrHandler sig
for_ = mkStaticAttr "htmlFor"

type_ :: Text -> AttrOrHandler sig
type_ = mkStaticAttr "type"

checked_ :: Bool -> AttrOrHandler sig
checked_ = mkStaticAttr "checked"

autofocus_ :: Bool -> AttrOrHandler sig
autofocus_ = mkStaticAttr "autoFocus"

width_ :: Double -> AttrOrHandler sig
width_ = mkStaticAttr "width"

height_ :: Double -> AttrOrHandler sig
height_ = mkStaticAttr "height"

-- svg!

cx_ :: Double -> AttrOrHandler sig
cx_ = mkStaticAttr "cx"

cy_ :: Double -> AttrOrHandler sig
cy_ = mkStaticAttr "cy"

d_ :: Double -> AttrOrHandler sig
d_ = mkStaticAttr "d"

dx_ :: Double -> AttrOrHandler sig
dx_ = mkStaticAttr "dx"

dy_ :: Double -> AttrOrHandler sig
dy_ = mkStaticAttr "dy"

x_ :: Double -> AttrOrHandler sig
x_ = mkStaticAttr "x"

y_ :: Double -> AttrOrHandler sig
y_ = mkStaticAttr "y"

r_ :: Double -> AttrOrHandler sig
r_ = mkStaticAttr "r"

fill_ :: Text -> AttrOrHandler sig
fill_ = mkStaticAttr "fill"

viewBox_ :: Text -> AttrOrHandler sig
viewBox_ = mkStaticAttr "viewBox"

points_ :: Text -> AttrOrHandler sig
points_ = mkStaticAttr "points"

transform_ :: Text -> AttrOrHandler sig
transform_ = mkStaticAttr "transform"

-- fillOpacity fontFamily fontSize fx fy gradientTransform
-- gradientUnits markerEnd markerMid markerStart offset opacity
-- patternContentUnits patternUnits preserveAspectRatio r rx ry
-- spreadMethod stopColor stopOpacity stroke strokeDasharray strokeLinecap
-- strokeOpacity strokeWidth textAnchor version x1 x2 x y1 y2 y