{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.NodeFilter
       (newNodeFilter, newNodeFilterSync, newNodeFilterAsync,
        pattern FILTER_ACCEPT, pattern FILTER_REJECT, pattern FILTER_SKIP,
        pattern SHOW_ALL, pattern SHOW_ELEMENT, pattern SHOW_ATTRIBUTE,
        pattern SHOW_TEXT, pattern SHOW_CDATA_SECTION,
        pattern SHOW_ENTITY_REFERENCE, pattern SHOW_ENTITY,
        pattern SHOW_PROCESSING_INSTRUCTION, pattern SHOW_COMMENT,
        pattern SHOW_DOCUMENT, pattern SHOW_DOCUMENT_TYPE,
        pattern SHOW_DOCUMENT_FRAGMENT, pattern SHOW_NOTATION, NodeFilter)
       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/NodeFilter Mozilla NodeFilter documentation> 
newNodeFilter :: (MonadDOM m) => (Node -> JSM ()) -> m NodeFilter
newNodeFilter :: (Node -> JSM ()) -> m NodeFilter
newNodeFilter Node -> JSM ()
callback
  = DOM NodeFilter -> m NodeFilter
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> IO ()) -> NodeFilter
NodeFilter (Callback (JSVal -> IO ()) -> NodeFilter)
-> (Function -> Callback (JSVal -> IO ()))
-> Function
-> NodeFilter
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> NodeFilter) -> JSM Function -> DOM NodeFilter
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
function
           (\ JSVal
_ JSVal
_ [JSVal
node] ->
              JSVal -> JSM Node
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
node JSM Node -> (Node -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \ Node
node' -> Node -> JSM ()
callback Node
node'))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter Mozilla NodeFilter documentation> 
newNodeFilterSync ::
                  (MonadDOM m) => (Node -> JSM ()) -> m NodeFilter
newNodeFilterSync :: (Node -> JSM ()) -> m NodeFilter
newNodeFilterSync Node -> JSM ()
callback
  = DOM NodeFilter -> m NodeFilter
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> IO ()) -> NodeFilter
NodeFilter (Callback (JSVal -> IO ()) -> NodeFilter)
-> (Function -> Callback (JSVal -> IO ()))
-> Function
-> NodeFilter
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> NodeFilter) -> JSM Function -> DOM NodeFilter
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
function
           (\ JSVal
_ JSVal
_ [JSVal
node] ->
              JSVal -> JSM Node
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
node JSM Node -> (Node -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \ Node
node' -> Node -> JSM ()
callback Node
node'))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter Mozilla NodeFilter documentation> 
newNodeFilterAsync ::
                   (MonadDOM m) => (Node -> JSM ()) -> m NodeFilter
newNodeFilterAsync :: (Node -> JSM ()) -> m NodeFilter
newNodeFilterAsync Node -> JSM ()
callback
  = DOM NodeFilter -> m NodeFilter
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Callback (JSVal -> IO ()) -> NodeFilter
NodeFilter (Callback (JSVal -> IO ()) -> NodeFilter)
-> (Function -> Callback (JSVal -> IO ()))
-> Function
-> NodeFilter
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Function -> Callback (JSVal -> IO ())
forall a. Function -> Callback a
Callback (Function -> NodeFilter) -> JSM Function -> DOM NodeFilter
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         JSCallAsFunction -> JSM Function
asyncFunction
           (\ JSVal
_ JSVal
_ [JSVal
node] ->
              JSVal -> JSM Node
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked JSVal
node JSM Node -> (Node -> JSM ()) -> JSM ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \ Node
node' -> Node -> JSM ()
callback Node
node'))
pattern $bFILTER_ACCEPT :: a
$mFILTER_ACCEPT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
FILTER_ACCEPT = 1
pattern $bFILTER_REJECT :: a
$mFILTER_REJECT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
FILTER_REJECT = 2
pattern $bFILTER_SKIP :: a
$mFILTER_SKIP :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
FILTER_SKIP = 3
pattern $bSHOW_ALL :: a
$mSHOW_ALL :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_ALL = 4294967295
pattern $bSHOW_ELEMENT :: a
$mSHOW_ELEMENT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_ELEMENT = 1
pattern $bSHOW_ATTRIBUTE :: a
$mSHOW_ATTRIBUTE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_ATTRIBUTE = 2
pattern $bSHOW_TEXT :: a
$mSHOW_TEXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_TEXT = 4
pattern $bSHOW_CDATA_SECTION :: a
$mSHOW_CDATA_SECTION :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_CDATA_SECTION = 8
pattern $bSHOW_ENTITY_REFERENCE :: a
$mSHOW_ENTITY_REFERENCE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_ENTITY_REFERENCE = 16
pattern $bSHOW_ENTITY :: a
$mSHOW_ENTITY :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_ENTITY = 32
pattern $bSHOW_PROCESSING_INSTRUCTION :: a
$mSHOW_PROCESSING_INSTRUCTION :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_PROCESSING_INSTRUCTION = 64
pattern $bSHOW_COMMENT :: a
$mSHOW_COMMENT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_COMMENT = 128
pattern $bSHOW_DOCUMENT :: a
$mSHOW_DOCUMENT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_DOCUMENT = 256
pattern $bSHOW_DOCUMENT_TYPE :: a
$mSHOW_DOCUMENT_TYPE :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_DOCUMENT_TYPE = 512
pattern $bSHOW_DOCUMENT_FRAGMENT :: a
$mSHOW_DOCUMENT_FRAGMENT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_DOCUMENT_FRAGMENT = 1024
pattern $bSHOW_NOTATION :: a
$mSHOW_NOTATION :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
SHOW_NOTATION = 2048