module Data.DOM.EventTarget
       (addEventListener, removeEventListener, dispatchEvent) where
import Data.DOM.Events
import Control.Monad
import BrownPLT.JavaScript
import Data.DOM.WBTypes
import Data.DOM.Views
import Data.DOM.Dom
import Data.DOM.Document (createElement)
 
addEventListener ::
                 (Monad mn, CEventTarget this, CEventListener listener) =>
                   Expression String ->
                     Expression listener ->
                       Expression Bool -> Expression this -> mn (Expression ())
addEventListener a b c thisp
  = do let et = undefined :: ()
       let r = DotRef et (thisp /\ et) (Id et "addEventListener")
       return (CallExpr et r [a /\ et, b /\ et, c /\ et])
 
removeEventListener ::
                    (Monad mn, CEventTarget this, CEventListener listener) =>
                      Expression String ->
                        Expression listener ->
                          Expression Bool -> Expression this -> mn (Expression ())
removeEventListener a b c thisp
  = do let et = undefined :: ()
       let r = DotRef et (thisp /\ et) (Id et "removeEventListener")
       return (CallExpr et r [a /\ et, b /\ et, c /\ et])
 
dispatchEvent ::
              (Monad mn, CEventTarget this, CEvent evt) =>
                Expression evt -> Expression this -> mn (Expression Bool)
dispatchEvent a thisp
  = do let et = undefined :: Bool
       let r = DotRef et (thisp /\ et) (Id et "dispatchEvent")
       return (CallExpr et r [a /\ et])