@@ -29,6 +29,13 @@ module Web.DOM.Element
29
29
, setScrollTop
30
30
, scrollLeft
31
31
, setScrollLeft
32
+ , ScrollBehavior
33
+ , ScrollAlignment
34
+ , scroll
35
+ , scrollBy
36
+ , ScrollToOptions
37
+ , scrollIntoView
38
+ , ScrollIntoViewOptions
32
39
, scrollWidth
33
40
, scrollHeight
34
41
, clientTop
@@ -121,6 +128,79 @@ foreign import setScrollTop :: Number -> Element -> Effect Unit
121
128
foreign import scrollLeft :: Element -> Effect Number
122
129
foreign import setScrollLeft :: Number -> Element -> Effect Unit
123
130
131
+ data ScrollBehavior = Auto | Smooth
132
+
133
+ stringScrollBehavior :: ScrollBehavior -> String
134
+ stringScrollBehavior Auto = " Auto"
135
+ stringScrollBehavior Smooth = " Smooth"
136
+
137
+ type ScrollToOptions =
138
+ { top :: Number
139
+ , left :: Number
140
+ , behavior :: ScrollBehavior
141
+ }
142
+
143
+ type ScrollToOptions_ =
144
+ { top :: Number
145
+ , left :: Number
146
+ , behavior :: String
147
+ }
148
+
149
+ foreign import _scroll :: Element -> ScrollToOptions_ -> Effect Unit
150
+
151
+ scroll :: Element -> ScrollToOptions -> Effect Unit
152
+ scroll elem _opts = _scroll elem opts
153
+ where
154
+ opts = let { top,left, behavior } = _opts
155
+ in { top, left, behavior: stringScrollBehavior behavior }
156
+
157
+ foreign import _scrollTo :: Element -> ScrollToOptions_ -> Effect Unit
158
+
159
+ scrollTo :: Element -> ScrollToOptions -> Effect Unit
160
+ scrollTo elem _opts = _scrollTo elem opts
161
+ where
162
+ opts = let { top,left, behavior } = _opts
163
+ in { top, left, behavior: stringScrollBehavior behavior }
164
+
165
+ foreign import _scrollBy :: Element -> ScrollToOptions_ -> Effect Unit
166
+
167
+ scrollBy :: Element -> ScrollToOptions -> Effect Unit
168
+ scrollBy elem _opts = _scrollBy elem opts
169
+ where
170
+ opts = let { top,left, behavior } = _opts
171
+ in { top, left, behavior: stringScrollBehavior behavior }
172
+
173
+ data ScrollAlignment = Start | Center | End | Nearest
174
+
175
+ stringScrollAlignment :: ScrollAlignment -> String
176
+ stringScrollAlignment Start = " Start"
177
+ stringScrollAlignment Center = " Center"
178
+ stringScrollAlignment End = " End"
179
+ stringScrollAlignment Nearest = " Nearest"
180
+
181
+ type ScrollIntoViewOptions =
182
+ { behavior :: ScrollBehavior
183
+ , block :: ScrollAlignment
184
+ , inline :: ScrollAlignment
185
+ }
186
+
187
+ type ScrollIntoViewOptions_ =
188
+ { behavior :: String
189
+ , block :: String
190
+ , inline :: String
191
+ }
192
+
193
+ foreign import _scrollIntoView :: Element -> ScrollIntoViewOptions_ -> Effect Unit
194
+
195
+ scrollIntoView :: Element -> ScrollIntoViewOptions -> Effect Unit
196
+ scrollIntoView elem _opts = _scrollIntoView elem opts
197
+ where
198
+ opts = let { behavior, block, inline } = _opts
199
+ in { behavior: stringScrollBehavior behavior
200
+ , block: stringScrollAlignment block
201
+ , inline: stringScrollAlignment inline
202
+ }
203
+
124
204
foreign import scrollWidth :: Element -> Effect Number
125
205
foreign import scrollHeight :: Element -> Effect Number
126
206
foreign import clientTop :: Element -> Effect Number
0 commit comments