{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.NonDocumentTypeChildNode
       (getPreviousElementSibling, getPreviousElementSiblingUnsafe,
        getPreviousElementSiblingUnchecked, getNextElementSibling,
        getNextElementSiblingUnsafe, getNextElementSiblingUnchecked,
        NonDocumentTypeChildNode(..), gTypeNonDocumentTypeChildNode,
        IsNonDocumentTypeChildNode, toNonDocumentTypeChildNode)
       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/NonDocumentTypeChildNode.previousElementSibling Mozilla NonDocumentTypeChildNode.previousElementSibling documentation> 
getPreviousElementSibling ::
                          (MonadDOM m, IsNonDocumentTypeChildNode self) =>
                            self -> m (Maybe Element)
getPreviousElementSibling :: forall (m :: * -> *) self.
(MonadDOM m, IsNonDocumentTypeChildNode self) =>
self -> m (Maybe Element)
getPreviousElementSibling self
self
  = DOM (Maybe Element) -> m (Maybe Element)
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (((self -> NonDocumentTypeChildNode
forall o.
IsNonDocumentTypeChildNode o =>
o -> NonDocumentTypeChildNode
toNonDocumentTypeChildNode self
self) NonDocumentTypeChildNode
-> Getting (JSM JSVal) NonDocumentTypeChildNode (JSM JSVal)
-> JSM JSVal
forall s a. s -> Getting a s a -> a
^. String
-> IndexPreservingGetter NonDocumentTypeChildNode (JSM JSVal)
forall s name.
(MakeObject s, ToJSString name) =>
name -> IndexPreservingGetter s (JSM JSVal)
js String
"previousElementSibling")
         JSM JSVal -> (JSVal -> DOM (Maybe Element)) -> DOM (Maybe Element)
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 Element)
forall a. FromJSVal a => JSVal -> JSM (Maybe a)
fromJSVal)

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

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

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

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

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