-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Media
-- Copyright   :  (C) 2016-2025 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
----------------------------------------------------------------------------
module Miso.Media
  ( -- *** Types
    Media        (..)
  , NetworkState (..)
  , ReadyState   (..)
  -- *** Constructors
  , newAudio
  -- *** Methods
  , canPlayType
  , load
  , play
  , pause
  -- *** Properties
  , autoplay
  , controls
  , currentSrc
  , currentTime
  , defaultMuted
  , defaultPlaybackRate
  , duration
  , ended
  , loop
  , mediaGroup
  , muted
  , networkState
  , paused
  , playbackRate
  , poster
  , preload
  , readyState
  , seeking
  , videoHeight
  , videoWidth
  , volume
  -- *** Event Map
  , mediaEvents
  ) where
-----------------------------------------------------------------------------
import           Control.Monad
import           Language.Javascript.JSaddle hiding (new)
import qualified Language.Javascript.JSaddle as JS 
-----------------------------------------------------------------------------
import           Miso.FFI
import           Miso.Event
import           Miso.String
-----------------------------------------------------------------------------
newtype Media = Media JSVal
  deriving ([Media] -> JSM JSVal
Media -> JSM JSVal
(Media -> JSM JSVal) -> ([Media] -> JSM JSVal) -> ToJSVal Media
forall a. (a -> JSM JSVal) -> ([a] -> JSM JSVal) -> ToJSVal a
$ctoJSVal :: Media -> JSM JSVal
toJSVal :: Media -> JSM JSVal
$ctoJSValListOf :: [Media] -> JSM JSVal
toJSValListOf :: [Media] -> JSM JSVal
ToJSVal)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_networkstate.asp
data NetworkState
  = NETWORK_EMPTY
  | NETWORK_IDLE
  | NETWORK_LOADING
  | NETWORK_NO_SOURCE
  deriving (Int -> NetworkState -> ShowS
[NetworkState] -> ShowS
NetworkState -> String
(Int -> NetworkState -> ShowS)
-> (NetworkState -> String)
-> ([NetworkState] -> ShowS)
-> Show NetworkState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> NetworkState -> ShowS
showsPrec :: Int -> NetworkState -> ShowS
$cshow :: NetworkState -> String
show :: NetworkState -> String
$cshowList :: [NetworkState] -> ShowS
showList :: [NetworkState] -> ShowS
Show, NetworkState -> NetworkState -> Bool
(NetworkState -> NetworkState -> Bool)
-> (NetworkState -> NetworkState -> Bool) -> Eq NetworkState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: NetworkState -> NetworkState -> Bool
== :: NetworkState -> NetworkState -> Bool
$c/= :: NetworkState -> NetworkState -> Bool
/= :: NetworkState -> NetworkState -> Bool
Eq, Int -> NetworkState
NetworkState -> Int
NetworkState -> [NetworkState]
NetworkState -> NetworkState
NetworkState -> NetworkState -> [NetworkState]
NetworkState -> NetworkState -> NetworkState -> [NetworkState]
(NetworkState -> NetworkState)
-> (NetworkState -> NetworkState)
-> (Int -> NetworkState)
-> (NetworkState -> Int)
-> (NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> [NetworkState])
-> (NetworkState -> NetworkState -> NetworkState -> [NetworkState])
-> Enum NetworkState
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: NetworkState -> NetworkState
succ :: NetworkState -> NetworkState
$cpred :: NetworkState -> NetworkState
pred :: NetworkState -> NetworkState
$ctoEnum :: Int -> NetworkState
toEnum :: Int -> NetworkState
$cfromEnum :: NetworkState -> Int
fromEnum :: NetworkState -> Int
$cenumFrom :: NetworkState -> [NetworkState]
enumFrom :: NetworkState -> [NetworkState]
$cenumFromThen :: NetworkState -> NetworkState -> [NetworkState]
enumFromThen :: NetworkState -> NetworkState -> [NetworkState]
$cenumFromTo :: NetworkState -> NetworkState -> [NetworkState]
enumFromTo :: NetworkState -> NetworkState -> [NetworkState]
$cenumFromThenTo :: NetworkState -> NetworkState -> NetworkState -> [NetworkState]
enumFromThenTo :: NetworkState -> NetworkState -> NetworkState -> [NetworkState]
Enum)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_readystate.asp
data ReadyState
  = HAVE_NOTHING
  | HAVE_METADATA
  | HAVE_CURRENT_DATA
  | HAVE_FUTURE_DATA
  | HAVE_ENOUGH_DATA
  deriving (Int -> ReadyState -> ShowS
[ReadyState] -> ShowS
ReadyState -> String
(Int -> ReadyState -> ShowS)
-> (ReadyState -> String)
-> ([ReadyState] -> ShowS)
-> Show ReadyState
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ReadyState -> ShowS
showsPrec :: Int -> ReadyState -> ShowS
$cshow :: ReadyState -> String
show :: ReadyState -> String
$cshowList :: [ReadyState] -> ShowS
showList :: [ReadyState] -> ShowS
Show, ReadyState -> ReadyState -> Bool
(ReadyState -> ReadyState -> Bool)
-> (ReadyState -> ReadyState -> Bool) -> Eq ReadyState
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ReadyState -> ReadyState -> Bool
== :: ReadyState -> ReadyState -> Bool
$c/= :: ReadyState -> ReadyState -> Bool
/= :: ReadyState -> ReadyState -> Bool
Eq, Int -> ReadyState
ReadyState -> Int
ReadyState -> [ReadyState]
ReadyState -> ReadyState
ReadyState -> ReadyState -> [ReadyState]
ReadyState -> ReadyState -> ReadyState -> [ReadyState]
(ReadyState -> ReadyState)
-> (ReadyState -> ReadyState)
-> (Int -> ReadyState)
-> (ReadyState -> Int)
-> (ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> [ReadyState])
-> (ReadyState -> ReadyState -> ReadyState -> [ReadyState])
-> Enum ReadyState
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: ReadyState -> ReadyState
succ :: ReadyState -> ReadyState
$cpred :: ReadyState -> ReadyState
pred :: ReadyState -> ReadyState
$ctoEnum :: Int -> ReadyState
toEnum :: Int -> ReadyState
$cfromEnum :: ReadyState -> Int
fromEnum :: ReadyState -> Int
$cenumFrom :: ReadyState -> [ReadyState]
enumFrom :: ReadyState -> [ReadyState]
$cenumFromThen :: ReadyState -> ReadyState -> [ReadyState]
enumFromThen :: ReadyState -> ReadyState -> [ReadyState]
$cenumFromTo :: ReadyState -> ReadyState -> [ReadyState]
enumFromTo :: ReadyState -> ReadyState -> [ReadyState]
$cenumFromThenTo :: ReadyState -> ReadyState -> ReadyState -> [ReadyState]
enumFromThenTo :: ReadyState -> ReadyState -> ReadyState -> [ReadyState]
Enum)
-----------------------------------------------------------------------------
-- | Smart constructor for an audio @Media@ with 'src' element
newAudio :: MisoString -> JSM Media
newAudio :: MisoString -> JSM Media
newAudio MisoString
url = do
  a <- JSM JSVal -> [MisoString] -> JSM JSVal
forall constructor args.
(MakeObject constructor, MakeArgs args) =>
constructor -> args -> JSM JSVal
JS.new (MisoString -> JSM JSVal
forall a. ToJSString a => a -> JSM JSVal
jsg (MisoString
"Audio" :: MisoString)) ([] :: [MisoString])
  o <- makeObject a
  set ("src" :: MisoString) url o
  pure (Media a)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_met_load.asp
load :: Media -> JSM ()
load :: Media -> JSM ()
load (Media JSVal
m) = JSM JSVal -> JSM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSM JSVal -> JSM ()) -> JSM JSVal -> JSM ()
forall a b. (a -> b) -> a -> b
$ JSVal
m JSVal -> MisoString -> () -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# (MisoString
"load" :: MisoString) (() -> JSM JSVal) -> () -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ ()
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_met_play.asp
play :: Media -> JSM ()
play :: Media -> JSM ()
play (Media JSVal
m) = JSM JSVal -> JSM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSM JSVal -> JSM ()) -> JSM JSVal -> JSM ()
forall a b. (a -> b) -> a -> b
$ JSVal
m JSVal -> MisoString -> () -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# (MisoString
"play" :: MisoString) (() -> JSM JSVal) -> () -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ ()
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_met_pause.asp
pause :: Media -> JSM ()
pause :: Media -> JSM ()
pause (Media JSVal
a) = JSM JSVal -> JSM ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (JSM JSVal -> JSM ()) -> JSM JSVal -> JSM ()
forall a b. (a -> b) -> a -> b
$ JSVal
a JSVal -> MisoString -> () -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# (MisoString
"pause" :: MisoString) (() -> JSM JSVal) -> () -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ ()
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_met_canplaytype.asp
canPlayType :: Media -> JSM MisoString
canPlayType :: Media -> JSM MisoString
canPlayType (Media JSVal
m) = do
  JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM MisoString) -> JSM JSVal -> JSM MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< do
    JSVal
m JSVal -> MisoString -> () -> JSM JSVal
forall this name args.
(MakeObject this, ToJSString name, MakeArgs args) =>
this -> name -> args -> JSM JSVal
# (MisoString
"canPlayType" :: MisoString) (() -> JSM JSVal) -> () -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ ()
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_autoplay.asp
autoplay :: Media -> JSM Bool
autoplay :: Media -> JSM Bool
autoplay (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"autoplay" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_controls.asp
controls :: Media -> JSM Bool
controls :: Media -> JSM Bool
controls (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"controls" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_currentsrc.asp
currentSrc :: Media -> JSM MisoString
currentSrc :: Media -> JSM MisoString
currentSrc (Media JSVal
m) = JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM MisoString) -> JSM JSVal -> JSM MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"currentSrc" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_currenttime.asp
currentTime :: Media -> JSM Double
currentTime :: Media -> JSM Double
currentTime (Media JSVal
m) = JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"currentTime" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_defaultmuted.asp
defaultMuted :: Media -> JSM Bool
defaultMuted :: Media -> JSM Bool
defaultMuted (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"defaultMuted" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_defaultplaybackrate.asp
defaultPlaybackRate :: Media -> JSM Double
defaultPlaybackRate :: Media -> JSM Double
defaultPlaybackRate (Media JSVal
m) = JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"defaultPlaybackRate" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_duration.asp
duration :: Media -> JSM Double
duration :: Media -> JSM Double
duration (Media JSVal
m) = JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"duration" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_ended.asp
ended :: Media -> JSM Bool
ended :: Media -> JSM Bool
ended (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"ended" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_loop.asp
loop :: Media -> JSM Bool
loop :: Media -> JSM Bool
loop (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"loop" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_mediagroup.asp
mediaGroup :: Media -> JSM MisoString
mediaGroup :: Media -> JSM MisoString
mediaGroup (Media JSVal
m) = JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM MisoString) -> JSM JSVal -> JSM MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"mediaGroup" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_muted.asp
muted :: Media -> JSM Bool
muted :: Media -> JSM Bool
muted (Media JSVal
m) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"muted" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_networkstate.asp
networkState :: Media -> JSM NetworkState
networkState :: Media -> JSM NetworkState
networkState (Media JSVal
m) = do
  number <- JSVal -> JSM Int
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Int) -> JSM JSVal -> JSM Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"networkState" :: MisoString)
  pure (toEnum number)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_paused.asp
paused :: Media -> JSM Bool
paused :: Media -> JSM Bool
paused (Media JSVal
a) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"paused" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_playbackRate.asp
playbackRate :: Media -> JSM Double
playbackRate :: Media -> JSM Double
playbackRate (Media JSVal
a) = JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"playbackRate" :: MisoString)
-----------------------------------------------------------------------------
-- | https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/poster
--
-- Specific to videos.
poster :: Media -> JSM MisoString
poster :: Media -> JSM MisoString
poster (Media JSVal
a) = JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM MisoString) -> JSM JSVal -> JSM MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"poster" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_preload.asp
preload :: Media -> JSM MisoString
preload :: Media -> JSM MisoString
preload (Media JSVal
a) = JSVal -> JSM MisoString
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM MisoString) -> JSM JSVal -> JSM MisoString
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"preload" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_readyState.asp
readyState :: Media -> JSM ReadyState
readyState :: Media -> JSM ReadyState
readyState (Media JSVal
a) = do
  number <- JSVal -> JSM Int
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Int) -> JSM JSVal -> JSM Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"readyState" :: MisoString)
  pure (toEnum number)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_seeking.asp
seeking :: Media -> JSM Bool
seeking :: Media -> JSM Bool
seeking (Media JSVal
a) = JSVal -> JSM Bool
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Bool) -> JSM JSVal -> JSM Bool
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
a JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"seeking" :: MisoString)
-----------------------------------------------------------------------------
-- | https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoHeight
--
-- Specific to videos.
videoHeight :: Media -> JSM Int
videoHeight :: Media -> JSM Int
videoHeight (Media JSVal
m) = JSVal -> JSM Int
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Int) -> JSM JSVal -> JSM Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"videoHeight" :: MisoString)
-----------------------------------------------------------------------------
-- | https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement/videoWidth
--
-- Specific to videos.
videoWidth :: Media -> JSM Int
videoWidth :: Media -> JSM Int
videoWidth (Media JSVal
m) = JSVal -> JSM Int
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Int) -> JSM JSVal -> JSM Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"videoWidth" :: MisoString)
-----------------------------------------------------------------------------
-- | https://www.w3schools.com/tags/av_prop_volume.asp
volume :: Media -> JSM Double
volume :: Media -> JSM Double
volume (Media JSVal
m) = JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
m JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"volume" :: MisoString)
-----------------------------------------------------------------------------