{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.Animation
       (newAnimation, getEffect, getEffectUnsafe, getEffectUnchecked,
        getTimeline, getTimelineUnsafe, getTimelineUnchecked,
        Animation(..), gTypeAnimation)
       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/Animation Mozilla Animation documentation> 
newAnimation ::
             (MonadDOM m, IsAnimationEffect effect,
              IsAnimationTimeline timeline) =>
               Maybe effect -> Maybe timeline -> m Animation
newAnimation :: Maybe effect -> Maybe timeline -> m Animation
newAnimation Maybe effect
effect Maybe timeline
timeline
  = DOM Animation -> m Animation
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSVal -> Animation
Animation (JSVal -> Animation) -> JSM JSVal -> DOM Animation
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]
"Animation") [Maybe effect -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe effect
effect, Maybe timeline -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe timeline
timeline])

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Animation.effect Mozilla Animation.effect documentation> 
getEffect :: (MonadDOM m) => Animation -> m (Maybe AnimationEffect)
getEffect :: Animation -> m (Maybe AnimationEffect)
getEffect Animation
self = DOM (Maybe AnimationEffect) -> m (Maybe AnimationEffect)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((Animation
self Animation -> Getting (JSM JSVal) Animation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter Animation (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"effect") JSM JSVal
-> (JSVal -> DOM (Maybe AnimationEffect))
-> DOM (Maybe AnimationEffect)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe AnimationEffect)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Animation.effect Mozilla Animation.effect documentation> 
getEffectUnsafe ::
                (MonadDOM m, HasCallStack) => Animation -> m AnimationEffect
getEffectUnsafe :: Animation -> m AnimationEffect
getEffectUnsafe Animation
self
  = DOM AnimationEffect -> m AnimationEffect
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((Animation
self Animation -> Getting (JSM JSVal) Animation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter Animation (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"effect") JSM JSVal
-> (JSVal -> DOM (Maybe AnimationEffect))
-> DOM (Maybe AnimationEffect)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe AnimationEffect)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal) DOM (Maybe AnimationEffect)
-> (Maybe AnimationEffect -> DOM AnimationEffect)
-> DOM AnimationEffect
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM AnimationEffect
-> (AnimationEffect -> DOM AnimationEffect)
-> Maybe AnimationEffect
-> DOM AnimationEffect
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> DOM AnimationEffect
forall a. HasCallStack => [Char] -> a
Prelude.error [Char]
"Nothing to return") AnimationEffect -> DOM AnimationEffect
forall (m :: * -> *) a. Monad m => a -> m a
return)

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

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Animation.timeline Mozilla Animation.timeline documentation> 
getTimeline ::
            (MonadDOM m) => Animation -> m (Maybe AnimationTimeline)
getTimeline :: Animation -> m (Maybe AnimationTimeline)
getTimeline Animation
self = DOM (Maybe AnimationTimeline) -> m (Maybe AnimationTimeline)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM ((Animation
self Animation -> Getting (JSM JSVal) Animation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter Animation (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"timeline") JSM JSVal
-> (JSVal -> DOM (Maybe AnimationTimeline))
-> DOM (Maybe AnimationTimeline)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe AnimationTimeline)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Animation.timeline Mozilla Animation.timeline documentation> 
getTimelineUnsafe ::
                  (MonadDOM m, HasCallStack) => Animation -> m AnimationTimeline
getTimelineUnsafe :: Animation -> m AnimationTimeline
getTimelineUnsafe Animation
self
  = DOM AnimationTimeline -> m AnimationTimeline
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((Animation
self Animation -> Getting (JSM JSVal) Animation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> IndexPreservingGetter Animation (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js [Char]
"timeline") JSM JSVal
-> (JSVal -> DOM (Maybe AnimationTimeline))
-> DOM (Maybe AnimationTimeline)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> DOM (Maybe AnimationTimeline)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal) DOM (Maybe AnimationTimeline)
-> (Maybe AnimationTimeline -> DOM AnimationTimeline)
-> DOM AnimationTimeline
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=
         DOM AnimationTimeline
-> (AnimationTimeline -> DOM AnimationTimeline)
-> Maybe AnimationTimeline
-> DOM AnimationTimeline
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ([Char] -> DOM AnimationTimeline
forall a. HasCallStack => [Char] -> a
Prelude.error [Char]
"Nothing to return") AnimationTimeline -> DOM AnimationTimeline
forall (m :: * -> *) a. Monad m => a -> m a
return)

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