{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.CompositionEvent
       (newCompositionEvent, initCompositionEvent, getData,
        CompositionEvent(..), gTypeCompositionEvent)
       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/CompositionEvent Mozilla CompositionEvent documentation> 
newCompositionEvent ::
                    (MonadDOM m, ToJSString type') =>
                      type' -> Maybe CompositionEventInit -> m CompositionEvent
newCompositionEvent :: type' -> Maybe CompositionEventInit -> m CompositionEvent
newCompositionEvent type'
type' Maybe CompositionEventInit
eventInitDict
  = DOM CompositionEvent -> m CompositionEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> CompositionEvent
CompositionEvent (JSVal -> CompositionEvent) -> JSM JSVal -> DOM CompositionEvent
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 ([Char] -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg [Char]
"CompositionEvent")
           [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe CompositionEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe CompositionEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent.initCompositionEvent Mozilla CompositionEvent.initCompositionEvent documentation> 
initCompositionEvent ::
                     (MonadDOM m, ToJSString typeArg, ToJSString dataArg) =>
                       CompositionEvent ->
                         Maybe typeArg ->
                           Bool -> Bool -> Maybe Window -> Maybe dataArg -> m ()
initCompositionEvent :: CompositionEvent
-> Maybe typeArg
-> Bool
-> Bool
-> Maybe Window
-> Maybe dataArg
-> m ()
initCompositionEvent CompositionEvent
self Maybe typeArg
typeArg Bool
canBubbleArg Bool
cancelableArg
  Maybe Window
viewArg Maybe dataArg
dataArg
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         (CompositionEvent
self CompositionEvent
-> Getting (JSM JSVal) CompositionEvent (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]
"initCompositionEvent"
            [Maybe typeArg -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe typeArg
typeArg, Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
canBubbleArg, Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
cancelableArg,
             Maybe Window -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe Window
viewArg, Maybe dataArg -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe dataArg
dataArg]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent.data Mozilla CompositionEvent.data documentation> 
getData ::
        (MonadDOM m, FromJSString result) => CompositionEvent -> m result
getData :: CompositionEvent -> m result
getData CompositionEvent
self = DOM result -> m result
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((CompositionEvent
self CompositionEvent
-> Getting (JSM JSVal) CompositionEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter CompositionEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"data") JSM JSVal -> (JSVal -> DOM result) -> DOM result
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM result
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)