{-# LANGUAGE PatternSynonyms #-}
-- For HasCallStack compatibility
{-# LANGUAGE ImplicitParams, ConstraintKinds, KindSignatures #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
module JSDOM.Generated.Geolocation
       (getCurrentPosition, watchPosition, watchPosition_, clearWatch,
        Geolocation(..), gTypeGeolocation)
       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/Geolocation.getCurrentPosition Mozilla Geolocation.getCurrentPosition documentation> 
getCurrentPosition ::
                   (MonadDOM m) =>
                     Geolocation ->
                       PositionCallback ->
                         Maybe PositionErrorCallback -> Maybe PositionOptions -> m ()
getCurrentPosition :: Geolocation
-> PositionCallback
-> Maybe PositionErrorCallback
-> Maybe PositionOptions
-> m ()
getCurrentPosition Geolocation
self PositionCallback
successCallback Maybe PositionErrorCallback
errorCallback Maybe PositionOptions
options
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         (Geolocation
self Geolocation
-> Getting (JSM JSVal) Geolocation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"getCurrentPosition"
            [PositionCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal PositionCallback
successCallback, Maybe PositionErrorCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionErrorCallback
errorCallback, Maybe PositionOptions -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionOptions
options]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.watchPosition Mozilla Geolocation.watchPosition documentation> 
watchPosition ::
              (MonadDOM m) =>
                Geolocation ->
                  PositionCallback ->
                    Maybe PositionErrorCallback -> Maybe PositionOptions -> m Int
watchPosition :: Geolocation
-> PositionCallback
-> Maybe PositionErrorCallback
-> Maybe PositionOptions
-> m Int
watchPosition Geolocation
self PositionCallback
successCallback Maybe PositionErrorCallback
errorCallback Maybe PositionOptions
options
  = DOM Int -> m Int
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (Double -> Int
forall a b. (RealFrac a, Integral b) => a -> b
round (Double -> Int) -> JSM Double -> DOM Int
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>
         ((Geolocation
self Geolocation
-> Getting (JSM JSVal) Geolocation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"watchPosition"
             [PositionCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal PositionCallback
successCallback, Maybe PositionErrorCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionErrorCallback
errorCallback, Maybe PositionOptions -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionOptions
options])
            JSM JSVal -> (JSVal -> JSM Double) -> JSM Double
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= JSVal -> JSM Double
forall value. ToJSVal value => value -> JSM Double
valToNumber))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.watchPosition Mozilla Geolocation.watchPosition documentation> 
watchPosition_ ::
               (MonadDOM m) =>
                 Geolocation ->
                   PositionCallback ->
                     Maybe PositionErrorCallback -> Maybe PositionOptions -> m ()
watchPosition_ :: Geolocation
-> PositionCallback
-> Maybe PositionErrorCallback
-> Maybe PositionOptions
-> m ()
watchPosition_ Geolocation
self PositionCallback
successCallback Maybe PositionErrorCallback
errorCallback Maybe PositionOptions
options
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM
      (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void
         (Geolocation
self Geolocation
-> Getting (JSM JSVal) Geolocation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"watchPosition"
            [PositionCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal PositionCallback
successCallback, Maybe PositionErrorCallback -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionErrorCallback
errorCallback, Maybe PositionOptions -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Maybe PositionOptions
options]))

-- | <https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.clearWatch Mozilla Geolocation.clearWatch documentation> 
clearWatch :: (MonadDOM m) => Geolocation -> Int -> m ()
clearWatch :: Geolocation -> Int -> m ()
clearWatch Geolocation
self Int
watchId
  = DOM () -> m ()
forall (m :: * -> *) a. MonadDOM m => DOM a -> m a
liftDOM (JSM JSVal -> DOM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (Geolocation
self Geolocation
-> Getting (JSM JSVal) Geolocation (JSM JSVal) -> JSM JSVal
forall s a. s -> Getting a s a -> a
^. [Char] -> [JSM JSVal] -> JSF
forall name args.
(ToJSString name, MakeArgs args) =>
name -> args -> JSF
jsf [Char]
"clearWatch" [Int -> JSM JSVal
forall a. ToJSVal a => a -> JSM JSVal
toJSVal Int
watchId]))