{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.EventTarget
       (addEventListener, removeEventListener, dispatchEvent,
        dispatchEvent_, EventTarget(..), gTypeEventTarget, IsEventTarget,
        toEventTarget)
       where
import Prelude ((.), (==), (>>=), return, IO, Int, Float, Double, Bool(..), Maybe, maybe, fromIntegral, round, realToFrac, fmap, Show, Read, Eq, Ord, Maybe(..))
import qualified Prelude (error)
import Data.Typeable (Typeable)
import Data.Traversable (mapM)
import Language.Javascript.JSaddle (JSM(..), JSVal(..), JSString, strictEqual, toJSVal, valToStr, valToNumber, valToBool, js, jss, jsf, jsg, function, asyncFunction, new, array, jsUndefined, (!), (!!))
import Data.Int (Int64)
import Data.Word (Word, Word64)
import JSDOM.Types
import Control.Applicative ((<$>))
import Control.Monad (void)
import Control.Lens.Operators ((^.))
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.addEventListener Mozilla EventTarget.addEventListener documentation> 
addEventListener ::
                 (MonadDOM m, IsEventTarget self, ToJSString type',
                  IsAddEventListenerOptionsOrBool options) =>
                   self -> type' -> Maybe EventListener -> options -> m ()
addEventListener :: forall (m :: * -> *) self type' options.
(MonadDOM m, IsEventTarget self, ToJSString type',
 IsAddEventListenerOptionsOrBool options) =>
self -> type' -> Maybe EventListener -> options -> m ()
addEventListener self
self type'
type' Maybe EventListener
callback options
options
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         ((self -> EventTarget
forall o. IsEventTarget o => o -> EventTarget
toEventTarget self
self) EventTarget
-> Getting (JSM JSVal) EventTarget (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"addEventListener"
            [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe EventListener -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe EventListener
callback, options -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal options
options]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.removeEventListener Mozilla EventTarget.removeEventListener documentation> 
removeEventListener ::
                    (MonadDOM m, IsEventTarget self, ToJSString type',
                     IsEventListenerOptionsOrBool options) =>
                      self -> type' -> Maybe EventListener -> options -> m ()
removeEventListener :: forall (m :: * -> *) self type' options.
(MonadDOM m, IsEventTarget self, ToJSString type',
 IsEventListenerOptionsOrBool options) =>
self -> type' -> Maybe EventListener -> options -> m ()
removeEventListener self
self type'
type' Maybe EventListener
callback options
options
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         ((self -> EventTarget
forall o. IsEventTarget o => o -> EventTarget
toEventTarget self
self) EventTarget
-> Getting (JSM JSVal) EventTarget (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"removeEventListener"
            [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe EventListener -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe EventListener
callback, options -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal options
options]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent Mozilla EventTarget.dispatchEvent documentation> 
dispatchEvent ::
              (MonadDOM m, IsEventTarget self, IsEvent event) =>
                self -> event -> m Bool
dispatchEvent :: forall (m :: * -> *) self event.
(MonadDOM m, IsEventTarget self, IsEvent event) =>
self -> event -> m Bool
dispatchEvent self
self event
event
  = DOM Bool -> m Bool
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((self -> EventTarget
forall o. IsEventTarget o => o -> EventTarget
toEventTarget self
self) EventTarget
-> Getting (JSM JSVal) EventTarget (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"dispatchEvent" [event -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal event
event]) JSM JSVal -> (JSVal -> DOM Bool) -> DOM Bool
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         JSVal -> DOM Bool
forall value. ToJSVal value => value -> DOM Bool
valToBool)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/EventTarget.dispatchEvent Mozilla EventTarget.dispatchEvent documentation> 
dispatchEvent_ ::
               (MonadDOM m, IsEventTarget self, IsEvent event) =>
                 self -> event -> m ()
dispatchEvent_ :: forall (m :: * -> *) self event.
(MonadDOM m, IsEventTarget self, IsEvent event) =>
self -> event -> m ()
dispatchEvent_ self
self event
event
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         ((self -> EventTarget
forall o. IsEventTarget o => o -> EventTarget
toEventTarget self
self) EventTarget
-> Getting (JSM JSVal) EventTarget (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf String
"dispatchEvent" [event -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal event
event]))