{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.TrackEvent
       (newTrackEvent, getTrack, getTrackUnsafe, getTrackUnchecked,
        TrackEvent(..), gTypeTrackEvent)
       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/TrackEvent Mozilla TrackEvent documentation> 
newTrackEvent ::
              (MonadDOM m, ToJSString type') =>
                type' -> Maybe TrackEventInit -> m TrackEvent
newTrackEvent :: forall (m :: * -> *) type'.
(MonadDOM m, ToJSString type') =>
type' -> Maybe TrackEventInit -> m TrackEvent
newTrackEvent type'
type' Maybe TrackEventInit
eventInitDict
  = DOM TrackEvent -> m TrackEvent
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> TrackEvent
TrackEvent (JSVal -> TrackEvent) -> JSM JSVal -> DOM TrackEvent
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
"TrackEvent") [type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal type'
type', Maybe TrackEventInit -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe TrackEventInit
eventInitDict])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent.track Mozilla TrackEvent.track documentation> 
getTrack :: (MonadDOM m) => TrackEvent -> m (Maybe Track)
getTrack :: forall (m :: * -> *). MonadDOM m => TrackEvent -> m (Maybe Track)
getTrack TrackEvent
self = DOM (Maybe Track) -> m (Maybe Track)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((TrackEvent
self TrackEvent
-> Getting (JSM JSVal) TrackEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter TrackEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"track") JSM JSVal -> (JSVal -> DOM (Maybe Track)) -> DOM (Maybe Track)
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 (Maybe Track)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent.track Mozilla TrackEvent.track documentation> 
getTrackUnsafe ::
               (MonadDOM m, HasCallStack) => TrackEvent -> m Track
getTrackUnsafe :: forall (m :: * -> *).
(MonadDOM m, HasCallStack) =>
TrackEvent -> m Track
getTrackUnsafe TrackEvent
self
  = DOM Track -> m Track
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((TrackEvent
self TrackEvent
-> Getting (JSM JSVal) TrackEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter TrackEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"track") JSM JSVal -> (JSVal -> DOM (Maybe Track)) -> DOM (Maybe Track)
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 (Maybe Track)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal) DOM (Maybe Track) -> (Maybe Track -> DOM Track) -> DOM Track
forall a b. JSM a -> (a -> JSM b) -> JSM b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM Track -> (Track -> DOM Track) -> Maybe Track -> DOM Track
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (String -> DOM Track
forall a. HasCallStack => String -> a
Prelude.error String
"Nothing to return") Track -> DOM Track
forall a. a -> JSM a
forall (m :: * -> *) a. Monad m => a -> m a
return)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/TrackEvent.track Mozilla TrackEvent.track documentation> 
getTrackUnchecked :: (MonadDOM m) => TrackEvent -> m Track
getTrackUnchecked :: forall (m :: * -> *). MonadDOM m => TrackEvent -> m Track
getTrackUnchecked TrackEvent
self
  = DOM Track -> m Track
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((TrackEvent
self TrackEvent
-> Getting (JSM JSVal) TrackEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter TrackEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"track") JSM JSVal -> (JSVal -> DOM Track) -> DOM Track
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 Track
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked)