Skip to content

Commit 79d50a2

Browse files
committed
Cleanup/consistency for enum-likes
1 parent 6ae5dd4 commit 79d50a2

15 files changed

+211
-169
lines changed

src/Web/HTML.purs

-2
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,6 @@ import Web.HTML.HTMLUListElement (HTMLUListElement) as Exports
7171
import Web.HTML.HTMLVideoElement (HTMLVideoElement) as Exports
7272
import Web.HTML.Location (Location) as Exports
7373
import Web.HTML.Navigator (Navigator) as Exports
74-
import Web.HTML.SelectionMode (SelectionMode) as Exports
75-
import Web.HTML.ValidityState (ValidityState) as Exports
7674
import Web.HTML.Window (Window) as Exports
7775

7876
foreign import window :: Effect Window

src/Web/HTML/Event/DataTransfer.purs

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import Data.Maybe (Maybe)
1515
import Data.MediaType (MediaType(..))
1616
import Data.Nullable (Nullable, toMaybe)
1717
import Effect (Effect)
18-
import Partial.Unsafe (unsafeCrashWith)
1918
import Web.File.FileList (FileList)
2019

2120
foreign import data DataTransfer :: Type
@@ -73,7 +72,7 @@ dropEffect dt =
7372
"link" -> Link
7473
"move" -> Move
7574
"none" -> None
76-
de -> unsafeCrashWith ("Found unexpected 'dropEffect' value: " <> de)
75+
_ -> None
7776

7877
foreign import _setDropEffect :: String -> DataTransfer -> Effect Unit
7978

src/Web/HTML/HTMLDocument.purs

+4-6
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,21 @@ module Web.HTML.HTMLDocument
1313
, body
1414
, readyState
1515
, activeElement
16-
, module Exports
1716
) where
1817

1918
import Prelude
2019

21-
import Data.Maybe (Maybe, fromJust)
20+
import Data.Maybe (Maybe, fromMaybe)
2221
import Data.Nullable (Nullable, toMaybe)
2322
import Effect (Effect)
24-
import Partial.Unsafe (unsafePartial)
2523
import Unsafe.Coerce (unsafeCoerce)
2624
import Web.DOM.Document (Document)
2725
import Web.DOM.Internal.Types (Node)
2826
import Web.DOM.NonElementParentNode (NonElementParentNode)
2927
import Web.DOM.ParentNode (ParentNode)
3028
import Web.Event.EventTarget (EventTarget)
31-
import Web.HTML.HTMLDocument.ReadyState (ReadyState(..)) as Exports
32-
import Web.HTML.HTMLDocument.ReadyState (ReadyState, parseReadyState)
29+
import Web.HTML.HTMLDocument.ReadyState (ReadyState)
30+
import Web.HTML.HTMLDocument.ReadyState as ReadyState
3331
import Web.HTML.HTMLElement (HTMLElement)
3432
import Web.Internal.FFI (unsafeReadProtoTagged)
3533

@@ -73,7 +71,7 @@ body = map toMaybe <<< _body
7371
foreign import _readyState :: HTMLDocument -> Effect String
7472

7573
readyState :: HTMLDocument -> Effect ReadyState
76-
readyState = map (unsafePartial fromJust <<< parseReadyState) <<< _readyState
74+
readyState = map (fromMaybe ReadyState.Loading <<< ReadyState.parse) <<< _readyState
7775

7876
foreign import _activeElement :: HTMLDocument -> Effect (Nullable HTMLElement)
7977

+4-33
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
module Web.HTML.HTMLDocument.ReadyState where
22

33
import Prelude
4-
import Data.Enum (class Enum, class BoundedEnum, Cardinality(..), defaultSucc, defaultPred)
54
import Data.Maybe (Maybe(..))
65

76
data ReadyState
@@ -18,43 +17,15 @@ instance showReadyState :: Show ReadyState where
1817
Interactive -> "Interactive"
1918
Complete -> "Complete"
2019

21-
printReadyState :: ReadyState -> String
22-
printReadyState = case _ of
20+
print :: ReadyState -> String
21+
print = case _ of
2322
Loading -> "loading"
2423
Interactive -> "interactive"
2524
Complete -> "complete"
2625

27-
parseReadyState :: String -> Maybe ReadyState
28-
parseReadyState = case _ of
26+
parse :: String -> Maybe ReadyState
27+
parse = case _ of
2928
"loading" -> Just Loading
3029
"interactive" -> Just Interactive
3130
"complete" -> Just Complete
3231
_ -> Nothing
33-
34-
instance boundedReadyState :: Bounded ReadyState where
35-
bottom = Loading
36-
top = Complete
37-
38-
instance enumReadyState :: Enum ReadyState where
39-
succ = defaultSucc toEnumReadyState fromEnumReadyState
40-
pred = defaultPred toEnumReadyState fromEnumReadyState
41-
42-
instance boundedEnumReadyState :: BoundedEnum ReadyState where
43-
cardinality = Cardinality 3
44-
toEnum = toEnumReadyState
45-
fromEnum = fromEnumReadyState
46-
47-
toEnumReadyState :: Int -> Maybe ReadyState
48-
toEnumReadyState =
49-
case _ of
50-
0 -> Just Loading
51-
1 -> Just Interactive
52-
2 -> Just Complete
53-
_ -> Nothing
54-
55-
fromEnumReadyState :: ReadyState -> Int
56-
fromEnumReadyState =
57-
case _ of
58-
Loading -> 0
59-
Interactive -> 1
60-
Complete -> 2

src/Web/HTML/HTMLInputElement.js

+2-13
Original file line numberDiff line numberDiff line change
@@ -717,19 +717,8 @@ exports.setRangeText = function (replacement) {
717717
};
718718
};
719719
};
720-
721-
exports["setRangeText'"] = function (replacement) {
722-
return function (start) {
723-
return function (end) {
724-
return function (selectionMode) {
725-
return function (input) {
726-
return function () {
727-
input.setRangeText(replacement, start, end, selectionMode, input);
728-
};
729-
};
730-
};
731-
};
732-
};
720+
exports._setRangeText = function (replacement, start, end, selectionMode, textarea) {
721+
textarea.setRangeText(replacement, start, end, selectionMode);
733722
};
734723

735724
// ----------------------------------------------------------------------------

src/Web/HTML/HTMLInputElement.purs

+8-1
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ import Data.JSDate (JSDate)
111111
import Data.Maybe (Maybe)
112112
import Data.Nullable (Nullable, toMaybe)
113113
import Effect (Effect)
114+
import Effect.Uncurried (EffectFn5, runEffectFn5)
114115
import Unsafe.Coerce (unsafeCoerce)
115116
import Web.DOM (ChildNode, Element, Node, NonDocumentTypeChildNode, ParentNode)
116117
import Web.DOM.NodeList (NodeList)
@@ -119,6 +120,7 @@ import Web.File.FileList (FileList)
119120
import Web.HTML.HTMLElement (HTMLElement)
120121
import Web.HTML.HTMLFormElement (HTMLFormElement)
121122
import Web.HTML.SelectionMode (SelectionMode)
123+
import Web.HTML.SelectionMode as SelectionMode
122124
import Web.HTML.ValidityState (ValidityState)
123125
import Web.Internal.FFI (unsafeReadProtoTagged)
124126

@@ -318,6 +320,11 @@ foreign import selectionDirection :: HTMLInputElement -> Effect String
318320
foreign import setSelectionDirection :: String -> HTMLInputElement -> Effect Unit
319321

320322
foreign import setRangeText :: String -> HTMLInputElement -> Effect Unit
321-
foreign import setRangeText' :: String -> Int -> Int -> SelectionMode -> HTMLInputElement -> Effect Unit
323+
324+
setRangeText' :: String -> Int -> Int -> SelectionMode -> HTMLInputElement -> Effect Unit
325+
setRangeText' rpl s e mode area =
326+
runEffectFn5 _setRangeText rpl s e (SelectionMode.print mode) area
327+
328+
foreign import _setRangeText :: EffectFn5 String Int Int String HTMLInputElement Unit
322329

323330
foreign import setSelectionRange :: Int -> Int -> String -> HTMLInputElement -> Effect Unit

src/Web/HTML/HTMLMediaElement.js

+6-14
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,8 @@ exports.setCrossOrigin = function (crossOrigin) {
4040

4141
// ----------------------------------------------------------------------------
4242

43-
exports.networkStateIndex = function (media) {
44-
return function () {
45-
return media.networkState;
46-
};
43+
exports._networkState = function (media) {
44+
return media.networkState;
4745
};
4846

4947
// ----------------------------------------------------------------------------
@@ -72,20 +70,14 @@ exports.load = function (media) {
7270

7371
// ----------------------------------------------------------------------------
7472

75-
exports.canPlayType = function (type) {
76-
return function (media) {
77-
return function () {
78-
return media.canPlayType(type);
79-
};
80-
};
73+
exports._canPlayType = function (type, media) {
74+
return media.canPlayType(type);
8175
};
8276

8377
// ----------------------------------------------------------------------------
8478

85-
exports.readyStateIndex = function (media) {
86-
return function () {
87-
return media.readyState;
88-
};
79+
exports._readyState = function (media) {
80+
return media.readyState;
8981
};
9082

9183
// ----------------------------------------------------------------------------

src/Web/HTML/HTMLMediaElement.purs

+70-9
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,76 @@
1-
module Web.HTML.HTMLMediaElement where
1+
module Web.HTML.HTMLMediaElement
2+
( HTMLMediaElement
3+
, fromHTMLElement
4+
, fromElement
5+
, fromNode
6+
, fromChildNode
7+
, fromNonDocumentTypeChildNode
8+
, fromParentNode
9+
, fromEventTarget
10+
, toHTMLElement
11+
, toElement
12+
, toNode
13+
, toChildNode
14+
, toNonDocumentTypeChildNode
15+
, toParentNode
16+
, toEventTarget
17+
, src
18+
, setSrc
19+
, currentSrc
20+
, crossOrigin
21+
, setCrossOrigin
22+
, networkState
23+
, preload
24+
, setPreload
25+
, load
26+
, canPlayType
27+
, readyState
28+
, seeking
29+
, currentTime
30+
, setCurrentTime
31+
, duration
32+
, getStartDate
33+
, paused
34+
, defaultPlaybackRate
35+
, setDefaultPlaybackRate
36+
, playbackRate
37+
, setPlaybackRate
38+
, ended
39+
, autoplay
40+
, setAutoplay
41+
, loop
42+
, setLoop
43+
, play
44+
, pause
45+
, mediaGroup
46+
, setMediaGroup
47+
, controls
48+
, setControls
49+
, volume
50+
, setVolume
51+
, muted
52+
, setMuted
53+
, defaultMuted
54+
, setDefaultMuted
55+
) where
256

357
import Prelude
458

559
import Data.Enum (toEnum)
660
import Data.JSDate (JSDate)
7-
import Data.Maybe (Maybe, fromJust)
61+
import Data.Maybe (Maybe, fromMaybe)
862
import Effect (Effect)
63+
import Effect.Uncurried (EffectFn1, EffectFn2, runEffectFn1, runEffectFn2)
964
import Unsafe.Coerce (unsafeCoerce)
1065
import Web.DOM (ChildNode, Element, Node, NonDocumentTypeChildNode, ParentNode)
1166
import Web.Event.EventTarget (EventTarget)
1267
import Web.HTML.HTMLElement (HTMLElement)
1368
import Web.HTML.HTMLMediaElement.CanPlayType (CanPlayType)
69+
import Web.HTML.HTMLMediaElement.CanPlayType as CanPlayType
1470
import Web.HTML.HTMLMediaElement.NetworkState (NetworkState)
71+
import Web.HTML.HTMLMediaElement.NetworkState as NetworkState
1572
import Web.HTML.HTMLMediaElement.ReadyState (ReadyState)
73+
import Web.HTML.HTMLMediaElement.ReadyState as ReadyState
1674
import Web.Internal.FFI (unsafeReadProtoTagged)
1775

1876
foreign import data HTMLMediaElement :: Type
@@ -69,10 +127,10 @@ foreign import currentSrc :: HTMLMediaElement -> Effect String
69127
foreign import crossOrigin :: HTMLMediaElement -> Effect String
70128
foreign import setCrossOrigin :: String -> HTMLMediaElement -> Effect Unit
71129

72-
networkState :: Partial => HTMLMediaElement -> Effect NetworkState
73-
networkState = map (fromJust <<< toEnum) <<< readyStateIndex
130+
networkState :: HTMLMediaElement -> Effect NetworkState
131+
networkState el = map (fromMaybe NetworkState.Empty <<< toEnum) $ runEffectFn1 _networkState el
74132

75-
foreign import networkStateIndex :: HTMLMediaElement -> Effect Int
133+
foreign import _networkState :: EffectFn1 HTMLMediaElement Int
76134

77135
foreign import preload :: HTMLMediaElement -> Effect String
78136
foreign import setPreload :: String -> HTMLMediaElement -> Effect Unit
@@ -81,12 +139,15 @@ foreign import setPreload :: String -> HTMLMediaElement -> Effect Unit
81139

82140
foreign import load :: HTMLMediaElement -> Effect Unit
83141

84-
foreign import canPlayType :: String -> HTMLMediaElement -> Effect CanPlayType
142+
canPlayType :: String -> HTMLMediaElement -> Effect CanPlayType
143+
canPlayType ty el = map (fromMaybe CanPlayType.Unspecified <<< CanPlayType.parse) $ runEffectFn2 _canPlayType ty el
85144

86-
readyState :: Partial => HTMLMediaElement -> Effect ReadyState
87-
readyState = map (fromJust <<< toEnum) <<< readyStateIndex
145+
foreign import _canPlayType :: EffectFn2 String HTMLMediaElement String
88146

89-
foreign import readyStateIndex :: HTMLMediaElement -> Effect Int
147+
readyState :: HTMLMediaElement -> Effect ReadyState
148+
readyState el = map (fromMaybe ReadyState.HaveNothing <<< toEnum) $ runEffectFn1 _readyState el
149+
150+
foreign import _readyState :: EffectFn1 HTMLMediaElement Int
90151

91152
foreign import seeking :: HTMLMediaElement -> Effect Boolean
92153

+23-20
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,32 @@
1-
module Web.HTML.HTMLMediaElement.CanPlayType
2-
( CanPlayType
3-
, runCanPlayType
4-
, unspecified
5-
, maybe
6-
, probably
7-
) where
1+
module Web.HTML.HTMLMediaElement.CanPlayType where
82

93
import Prelude
104

11-
newtype CanPlayType = CanPlayType String
5+
import Data.Maybe (Maybe(..))
126

13-
runCanPlayType :: CanPlayType -> String
14-
runCanPlayType (CanPlayType t) = t
7+
data CanPlayType
8+
= Unspecified
9+
| Maybe
10+
| Probably
1511

1612
derive instance eqCanPlayType :: Eq CanPlayType
1713
derive instance ordCanPlayType :: Ord CanPlayType
1814

1915
instance showCanPlayType :: Show CanPlayType where
20-
show (CanPlayType t) = "(CanPlayType " <> show t <> ")"
21-
22-
unspecified :: CanPlayType
23-
unspecified = CanPlayType ""
24-
25-
maybe :: CanPlayType
26-
maybe = CanPlayType "maybe"
27-
28-
probably :: CanPlayType
29-
probably = CanPlayType "probably"
16+
show = case _ of
17+
Unspecified -> "Unspecified"
18+
Maybe -> "Maybe"
19+
Probably -> "Probably"
20+
21+
parse :: String -> Maybe CanPlayType
22+
parse = case _ of
23+
"" -> Just Unspecified
24+
"maybe" -> Just Maybe
25+
"probably" -> Just Probably
26+
_ -> Nothing
27+
28+
print :: CanPlayType -> String
29+
print = case _ of
30+
Unspecified -> ""
31+
Maybe -> "maybe"
32+
Probably -> "probably"

0 commit comments

Comments
 (0)