module Haste.DOM (
AttrName (..), Attribute, IsElem (..), Elem (..),
attribute, set, with, children,
click, focus, blur, document, documentBody, appendChild, addChild,
addChildBefore, insertChildBefore, getFirstChild, getLastChild, getChildren,
setChildren, clearChildren, deleteChild, removeChild,
PropID, ElemID, QuerySelector, ElemClass, AttrValue,
prop, style, attr, (=:),
newElem, newTextElem,
elemById, elemsByQS, elemsByClass,
setProp, getProp, setAttr, getAttr, J.getValue,
withElem , withElems, withElemsQS, mapQS, mapQS_,
getStyle, setStyle,
J.getFileData, getFileName,
setClass, toggleClass, hasClass
) where
import qualified Haste.DOM.JSString as J
import Haste.DOM.Core
import Haste.Prim (fromJSStr, toJSStr)
import Control.Monad.IO.Class
type PropID = String
type ElemID = String
type QuerySelector = String
type ElemClass = String
type AttrValue = String
style :: String -> AttrName
style = StyleName . toJSStr
attr :: String -> AttrName
attr = AttrName . toJSStr
prop :: String -> AttrName
prop = PropName . toJSStr
(=:) :: AttrName -> AttrValue -> Attribute
name =: val = attribute name (toJSStr val)
newElem :: MonadIO m => String -> m Elem
newElem = J.newElem . toJSStr
newTextElem :: MonadIO m => String -> m Elem
newTextElem = J.newTextElem . toJSStr
setProp :: (IsElem e, MonadIO m) => e -> PropID -> String -> m ()
setProp e property val = J.setProp e (toJSStr property) (toJSStr val)
setAttr :: (IsElem e, MonadIO m) => e -> PropID -> String -> m ()
setAttr e property val = J.setAttr e (toJSStr property) (toJSStr val)
getProp :: (IsElem e, MonadIO m) => e -> PropID -> m String
getProp e property = J.getProp e (toJSStr property) >>= return . fromJSStr
getAttr :: (IsElem e, MonadIO m) => e -> PropID -> m String
getAttr e property = J.getAttr e (toJSStr property) >>= return . fromJSStr
getStyle :: (IsElem e, MonadIO m) => e -> PropID -> m String
getStyle e property = J.getStyle e (toJSStr property) >>= return . fromJSStr
setStyle :: (IsElem e, MonadIO m) => e -> PropID -> String -> m ()
setStyle e property val = J.setStyle e (toJSStr property) (toJSStr val)
elemById :: MonadIO m => ElemID -> m (Maybe Elem)
elemById = J.elemById . toJSStr
elemsByClass :: MonadIO m => ElemClass -> m [Elem]
elemsByClass = J.elemsByClass . toJSStr
elemsByQS :: MonadIO m => Elem -> QuerySelector -> m [Elem]
elemsByQS el = J.elemsByQS el . toJSStr
withElem :: MonadIO m => ElemID -> (Elem -> m a) -> m a
withElem = J.withElem . toJSStr
withElems :: MonadIO m => [ElemID] -> ([Elem] -> m a) -> m a
withElems = J.withElems . map toJSStr
withElemsQS :: (IsElem e, MonadIO m)
=> e
-> QuerySelector
-> ([Elem] -> m a)
-> m a
withElemsQS el = J.withElemsQS el . toJSStr
mapQS :: (IsElem e, MonadIO m)
=> e
-> QuerySelector
-> (Elem -> m a)
-> m [a]
mapQS el = J.mapQS el . toJSStr
mapQS_ :: (IsElem e, MonadIO m)
=> e
-> QuerySelector
-> (Elem -> m a)
-> m ()
mapQS_ el = J.mapQS_ el . toJSStr
getFileName :: (IsElem e, MonadIO m) => e -> m String
getFileName e = J.getFileName e >>= return . fromJSStr
setClass :: (IsElem e, MonadIO m) => e -> String -> Bool -> m ()
setClass e sel = J.setClass e (toJSStr sel)
toggleClass :: (IsElem e, MonadIO m) => e -> String -> m ()
toggleClass e = J.toggleClass e . toJSStr
hasClass :: (IsElem e, MonadIO m) => e -> String -> m Bool
hasClass e = J.hasClass e . toJSStr