@@ -26,6 +26,12 @@ module DOM.HTML.Window
26
26
, url
27
27
, localStorage
28
28
, sessionStorage
29
+ , requestAnimationFrame
30
+ , cancelAnimationFrame
31
+ , RequestAnimationFrameId
32
+ , requestIdleCallback
33
+ , cancelIdleCallback
34
+ , RequestIdleCallbackId
29
35
) where
30
36
31
37
import Control.Monad.Eff (Eff )
@@ -34,7 +40,8 @@ import DOM.HTML.Types (ALERT, CONFIRM, HISTORY, HTMLDocument, History, Location,
34
40
import DOM.WebStorage.Types (Storage )
35
41
import Data.Maybe (Maybe )
36
42
import Data.Nullable (Nullable , toMaybe )
37
- import Prelude (Unit , (<$>))
43
+ import Data.Newtype (class Newtype , unwrap )
44
+ import Prelude (class Eq , class Ord , Unit , (<$>), (<<<), map )
38
45
39
46
foreign import document :: forall eff . Window -> Eff (dom :: DOM | eff ) HTMLDocument
40
47
@@ -102,3 +109,37 @@ foreign import scrollY :: forall eff. Window -> Eff (dom :: DOM | eff) Int
102
109
foreign import localStorage :: forall eff . Window -> Eff (dom :: DOM | eff ) Storage
103
110
104
111
foreign import sessionStorage :: forall eff . Window -> Eff (dom :: DOM | eff ) Storage
112
+
113
+ newtype RequestAnimationFrameId = RequestAnimationFrameId Int
114
+
115
+ derive instance newtypeRequestAnimationFrameId :: Newtype RequestAnimationFrameId _
116
+ derive instance eqRequestAnimationFrameId :: Eq RequestAnimationFrameId
117
+ derive instance ordRequestAnimationFrameId :: Ord RequestAnimationFrameId
118
+
119
+ foreign import _requestAnimationFrame :: forall eff . Eff (dom :: DOM | eff ) Unit -> Window -> Eff (dom :: DOM | eff ) Int
120
+
121
+ requestAnimationFrame :: forall eff . Eff (dom :: DOM | eff ) Unit -> Window -> Eff (dom :: DOM | eff ) RequestAnimationFrameId
122
+ requestAnimationFrame fn = map RequestAnimationFrameId <<< _requestAnimationFrame fn
123
+
124
+ foreign import _cancelAnimationFrame :: forall eff . Int -> Window -> Eff (dom :: DOM | eff ) Unit
125
+
126
+ cancelAnimationFrame :: forall eff . RequestAnimationFrameId -> Window -> Eff (dom :: DOM | eff ) Unit
127
+ cancelAnimationFrame idAF = _cancelAnimationFrame (unwrap idAF)
128
+
129
+ newtype RequestIdleCallbackId = RequestIdleCallbackId Int
130
+
131
+ derive instance newtypeRequestIdleCallbackId :: Newtype RequestIdleCallbackId _
132
+ derive instance eqRequestIdleCallbackId :: Eq RequestIdleCallbackId
133
+ derive instance ordRequestIdleCallbackId :: Ord RequestIdleCallbackId
134
+
135
+ foreign import _requestIdleCallback :: forall eff . { timeout :: Int } -> Eff (dom :: DOM | eff ) Unit -> Window -> Eff (dom :: DOM | eff ) Int
136
+
137
+ -- | Set timeout to `0` to get the same behaviour as when it is `undefined` in
138
+ -- | [JavaScript](https://w3c.github.io/requestidlecallback/#h-the-requestidle-callback-method).
139
+ requestIdleCallback :: forall eff . { timeout :: Int } -> Eff (dom :: DOM | eff ) Unit -> Window -> Eff (dom :: DOM | eff ) RequestIdleCallbackId
140
+ requestIdleCallback opts fn = map RequestIdleCallbackId <<< _requestIdleCallback opts fn
141
+
142
+ foreign import _cancelIdleCallback :: forall eff . Int -> Window -> Eff (dom :: DOM | eff ) Unit
143
+
144
+ cancelIdleCallback :: forall eff . RequestIdleCallbackId -> Window -> Eff (dom :: DOM | eff ) Unit
145
+ cancelIdleCallback idAF = _cancelIdleCallback (unwrap idAF)
0 commit comments