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