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,
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
(=:) :: 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 prop val = J.setProp e (toJSStr prop) (toJSStr val)
setAttr :: (IsElem e, MonadIO m) => e -> PropID -> String -> m ()
setAttr e prop val = J.setAttr e (toJSStr prop) (toJSStr val)
getProp :: (IsElem e, MonadIO m) => e -> PropID -> m String
getProp e prop = J.getProp e (toJSStr prop) >>= return . fromJSStr
getAttr :: (IsElem e, MonadIO m) => e -> PropID -> m String
getAttr e prop = J.getAttr e (toJSStr prop) >>= return . fromJSStr
getStyle :: (IsElem e, MonadIO m) => e -> PropID -> m String
getStyle e prop = J.getStyle e (toJSStr prop) >>= return . fromJSStr
setStyle :: (IsElem e, MonadIO m) => e -> PropID -> String -> m ()
setStyle e prop val = J.setStyle e (toJSStr prop) (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