/
HTMLMediaElement.purs
204 lines (154 loc) · 6.46 KB
/
HTMLMediaElement.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
module Web.HTML.HTMLMediaElement
( HTMLMediaElement
, fromHTMLElement
, fromElement
, fromNode
, fromChildNode
, fromNonDocumentTypeChildNode
, fromParentNode
, fromEventTarget
, toHTMLElement
, toElement
, toNode
, toChildNode
, toNonDocumentTypeChildNode
, toParentNode
, toEventTarget
, src
, setSrc
, currentSrc
, crossOrigin
, setCrossOrigin
, networkState
, preload
, setPreload
, load
, canPlayType
, readyState
, seeking
, currentTime
, setCurrentTime
, duration
, getStartDate
, paused
, defaultPlaybackRate
, setDefaultPlaybackRate
, playbackRate
, setPlaybackRate
, ended
, autoplay
, setAutoplay
, loop
, setLoop
, play
, pause
, mediaGroup
, setMediaGroup
, controls
, setControls
, volume
, setVolume
, muted
, setMuted
, defaultMuted
, setDefaultMuted
) where
import Prelude
import Data.Enum (toEnum)
import Data.JSDate (JSDate)
import Data.Maybe (Maybe, fromMaybe)
import Effect (Effect)
import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2)
import Unsafe.Coerce (unsafeCoerce)
import Web.DOM (ChildNode, Element, Node, NonDocumentTypeChildNode, ParentNode)
import Web.Event.EventTarget (EventTarget)
import Web.HTML.HTMLElement (HTMLElement)
import Web.HTML.HTMLMediaElement.CanPlayType (CanPlayType)
import Web.HTML.HTMLMediaElement.CanPlayType as CanPlayType
import Web.HTML.HTMLMediaElement.NetworkState (NetworkState)
import Web.HTML.HTMLMediaElement.NetworkState as NetworkState
import Web.HTML.HTMLMediaElement.ReadyState (ReadyState)
import Web.HTML.HTMLMediaElement.ReadyState as ReadyState
import Web.Internal.FFI (unsafeReadProtoTagged)
foreign import data HTMLMediaElement :: Type
fromHTMLElement :: HTMLElement -> Maybe HTMLMediaElement
fromHTMLElement = unsafeReadProtoTagged "HTMLMediaElement"
fromElement :: Element -> Maybe HTMLMediaElement
fromElement = unsafeReadProtoTagged "HTMLMediaElement"
fromNode :: Node -> Maybe HTMLMediaElement
fromNode = unsafeReadProtoTagged "HTMLMediaElement"
fromChildNode :: ChildNode -> Maybe HTMLMediaElement
fromChildNode = unsafeReadProtoTagged "HTMLMediaElement"
fromNonDocumentTypeChildNode :: NonDocumentTypeChildNode -> Maybe HTMLMediaElement
fromNonDocumentTypeChildNode = unsafeReadProtoTagged "HTMLMediaElement"
fromParentNode :: ParentNode -> Maybe HTMLMediaElement
fromParentNode = unsafeReadProtoTagged "HTMLMediaElement"
fromEventTarget :: EventTarget -> Maybe HTMLMediaElement
fromEventTarget = unsafeReadProtoTagged "HTMLMediaElement"
toHTMLElement :: HTMLMediaElement -> HTMLElement
toHTMLElement = unsafeCoerce
toElement :: HTMLMediaElement -> Element
toElement = unsafeCoerce
toNode :: HTMLMediaElement -> Node
toNode = unsafeCoerce
toChildNode :: HTMLMediaElement -> ChildNode
toChildNode = unsafeCoerce
toNonDocumentTypeChildNode :: HTMLMediaElement -> NonDocumentTypeChildNode
toNonDocumentTypeChildNode = unsafeCoerce
toParentNode :: HTMLMediaElement -> ParentNode
toParentNode = unsafeCoerce
toEventTarget :: HTMLMediaElement -> EventTarget
toEventTarget = unsafeCoerce
-- readonly attribute MediaError? error;
foreign import src :: HTMLMediaElement -> Effect String
foreign import setSrc :: String -> HTMLMediaElement -> Effect Unit
foreign import currentSrc :: HTMLMediaElement -> Effect String
foreign import crossOrigin :: HTMLMediaElement -> Effect String
foreign import setCrossOrigin :: String -> HTMLMediaElement -> Effect Unit
networkState :: HTMLMediaElement -> Effect NetworkState
networkState el = map (fromMaybe NetworkState.Empty <<< toEnum) $ runEffectFn1 _networkState el
foreign import _networkState :: EffectFn1 HTMLMediaElement Int
foreign import preload :: HTMLMediaElement -> Effect String
foreign import setPreload :: String -> HTMLMediaElement -> Effect Unit
-- readonly attribute TimeRanges buffered;
foreign import load :: HTMLMediaElement -> Effect Unit
canPlayType :: String -> HTMLMediaElement -> Effect CanPlayType
canPlayType ty el = map (fromMaybe CanPlayType.Unspecified <<< CanPlayType.parse) $ runEffectFn2 _canPlayType ty el
foreign import _canPlayType :: EffectFn2 String HTMLMediaElement String
readyState :: HTMLMediaElement -> Effect ReadyState
readyState el = map (fromMaybe ReadyState.HaveNothing <<< toEnum) $ runEffectFn1 _readyState el
foreign import _readyState :: EffectFn1 HTMLMediaElement Int
foreign import seeking :: HTMLMediaElement -> Effect Boolean
foreign import currentTime :: HTMLMediaElement -> Effect Number
foreign import setCurrentTime :: Number -> HTMLMediaElement -> Effect Unit
foreign import duration :: HTMLMediaElement -> Effect Number
foreign import getStartDate :: HTMLMediaElement -> Effect JSDate
foreign import paused :: HTMLMediaElement -> Effect Boolean
foreign import defaultPlaybackRate :: HTMLMediaElement -> Effect Number
foreign import setDefaultPlaybackRate :: Number -> HTMLMediaElement -> Effect Unit
foreign import playbackRate :: HTMLMediaElement -> Effect Number
foreign import setPlaybackRate :: Number -> HTMLMediaElement -> Effect Unit
-- readonly attribute TimeRanges played;
-- readonly attribute TimeRanges seekable;
foreign import ended :: HTMLMediaElement -> Effect Boolean
foreign import autoplay :: HTMLMediaElement -> Effect Boolean
foreign import setAutoplay :: Boolean -> HTMLMediaElement -> Effect Unit
foreign import loop :: HTMLMediaElement -> Effect Boolean
foreign import setLoop :: Boolean -> HTMLMediaElement -> Effect Unit
foreign import play :: HTMLMediaElement -> Effect Unit
foreign import pause :: HTMLMediaElement -> Effect Unit
foreign import mediaGroup :: HTMLMediaElement -> Effect String
foreign import setMediaGroup :: String -> HTMLMediaElement -> Effect Unit
-- attribute MediaController? controller;
foreign import controls :: HTMLMediaElement -> Effect Boolean
foreign import setControls :: Boolean -> HTMLMediaElement -> Effect Unit
foreign import volume :: HTMLMediaElement -> Effect Number
foreign import setVolume :: Number -> HTMLMediaElement -> Effect Unit
foreign import muted :: HTMLMediaElement -> Effect Boolean
foreign import setMuted :: Boolean -> HTMLMediaElement -> Effect Unit
foreign import defaultMuted :: HTMLMediaElement -> Effect Boolean
foreign import setDefaultMuted :: Boolean -> HTMLMediaElement -> Effect Unit
-- readonly attribute AudioTrackList audioTracks;
-- readonly attribute VideoTrackList videoTracks;
-- readonly attribute TextTrackList textTracks;
-- TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = "");