{-# 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 :: 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
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"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 :: 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
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"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 :: 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
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"dispatchEvent" [event -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal event
event]) JSM JSVal -> (JSVal -> DOM Bool) -> DOM Bool
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_ :: 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
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"dispatchEvent" [event -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal event
event]))