module Haste.DOM (
module Core,
IsElem (..), Elem, PropID, ElemID, QuerySelector, ElemClass,
AttrName, 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 qualified Haste.DOM.Core as Core
hiding (Elem (..), AttrName (..))
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