{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.CustomEvent
       (newCustomEvent, initCustomEvent, getDetail, CustomEvent(..),
        gTypeCustomEvent)
       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.EventTargetClosures (EventName, unsafeEventName, unsafeEventNameAsync)
import JSDOM.Enums

-- | <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent Mozilla CustomEvent documentation> 
newCustomEvent ::
               (MonadDOM m, ToJSString type') =>
                 type' -> Maybe CustomEventInit -> m CustomEvent
newCustomEvent :: forall (m :: * -> *) type'.
(MonadDOM m, ToJSString type') =>
type' -> Maybe CustomEventInit -> m CustomEvent
newCustomEvent type'
type' Maybe CustomEventInit
eventInitDict
  = DOM CustomEvent -> m CustomEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> CustomEvent
CustomEvent (JSVal -> CustomEvent) -> JSM JSVal -> DOM CustomEvent
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSM JSVal -> [JSM JSVal] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
new (String -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg String
"CustomEvent") [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe CustomEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe CustomEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.initCustomEvent Mozilla CustomEvent.initCustomEvent documentation> 
initCustomEvent ::
                (MonadDOM m, ToJSString type', ToJSVal detail) =>
                  CustomEvent -> type' -> Bool -> Bool -> Maybe detail -> m ()
initCustomEvent :: forall (m :: * -> *) type' detail.
(MonadDOM m, ToJSString type', ToJSVal detail) =>
CustomEvent -> type' -> Bool -> Bool -> Maybe detail -> m ()
initCustomEvent CustomEvent
self type'
type' Bool
bubbles Bool
cancelable Maybe detail
detail
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         (CustomEvent
self CustomEvent
-> Getting (JSM JSVal) CustomEvent (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
"initCustomEvent"
            [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
bubbles, Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
cancelable,
             Maybe detail -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe detail
detail]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent.detail Mozilla CustomEvent.detail documentation> 
getDetail :: (MonadDOM m) => CustomEvent -> m JSVal
getDetail :: forall (m :: * -> *). MonadDOM m => CustomEvent -> m JSVal
getDetail CustomEvent
self = JSM JSVal -> m JSVal
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((CustomEvent
self CustomEvent
-> Getting (JSM JSVal) CustomEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter CustomEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"detail") JSM JSVal -> (JSVal -> JSM JSVal) -> JSM JSVal
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal)