{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.MutationEvent
       (initMutationEvent, pattern MODIFICATION, pattern ADDITION,
        pattern REMOVAL, getRelatedNode, getRelatedNodeUnsafe,
        getRelatedNodeUnchecked, getPrevValue, getNewValue, getAttrName,
        getAttrChange, MutationEvent(..), gTypeMutationEvent)
       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/MutationEvent.initMutationEvent Mozilla MutationEvent.initMutationEvent documentation> 
initMutationEvent ::
                  (MonadDOM m, ToJSString type', IsNode relatedNode,
                   ToJSString prevValue, ToJSString newValue, ToJSString attrName) =>
                    MutationEvent ->
                      Maybe type' ->
                        Bool ->
                          Bool ->
                            Maybe relatedNode ->
                              Maybe prevValue ->
                                Maybe newValue -> Maybe attrName -> Maybe Word -> m ()
initMutationEvent :: forall (m :: * -> *) type' relatedNode prevValue newValue attrName.
(MonadDOM m, ToJSString type', IsNode relatedNode,
 ToJSString prevValue, ToJSString newValue, ToJSString attrName) =>
MutationEvent
-> Maybe type'
-> Bool
-> Bool
-> Maybe relatedNode
-> Maybe prevValue
-> Maybe newValue
-> Maybe attrName
-> Maybe Word
-> m ()
initMutationEvent MutationEvent
self Maybe type'
type' Bool
canBubble Bool
cancelable Maybe relatedNode
relatedNode
  Maybe prevValue
prevValue Maybe newValue
newValue Maybe attrName
attrName Maybe Word
attrChange
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         (MutationEvent
self MutationEvent
-> Getting (JSM JSVal) MutationEvent (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
"initMutationEvent"
            [Maybe type' -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe type'
type', Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
canBubble, Bool -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Bool
cancelable,
             Maybe relatedNode -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe relatedNode
relatedNode, Maybe prevValue -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe prevValue
prevValue, Maybe newValue -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe newValue
newValue,
             Maybe attrName -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe attrName
attrName, Maybe Word -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe Word
attrChange]))
pattern $mMODIFICATION :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bMODIFICATION :: forall {a}. (Eq a, Num a) => a
MODIFICATION = 1
pattern $mADDITION :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bADDITION :: forall {a}. (Eq a, Num a) => a
ADDITION = 2
pattern $mREMOVAL :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bREMOVAL :: forall {a}. (Eq a, Num a) => a
REMOVAL = 3

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

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

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

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

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

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

-- | <https://developer.mozilla.org/en-US/docs/Web/API/MutationEvent.attrChange Mozilla MutationEvent.attrChange documentation> 
getAttrChange :: (MonadDOM m) => MutationEvent -> m Word
getAttrChange :: forall (m :: * -> *). MonadDOM m => MutationEvent -> m Word
getAttrChange MutationEvent
self
  = DOM Word -> m Word
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (Double -> Word
forall b. Integral b => Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Word) -> JSM Double -> DOM Word
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ((MutationEvent
self MutationEvent
-> Getting (JSM JSVal) MutationEvent (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String -> IndexPreservingGetter MutationEvent (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"attrChange") JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
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 Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))