Skip to content

Commit 53d4709

Browse files
committed
Removed using PureScript internals in JavaScript
1 parent 2442d3e commit 53d4709

File tree

4 files changed

+146
-61
lines changed

4 files changed

+146
-61
lines changed

src/Web/CSSOMView/Element.js

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
1-
function convertScrollToOptions(options) {
2-
return options.value0 && Object.assign({}, options.value0, { behavior: options.value0.constructor.name.toLowerCase() });
3-
}
4-
51
export function getClientRects(element) {
62
return function () {
73
return element.getClientRects();
@@ -14,41 +10,34 @@ export function getBoundingClientRect(element) {
1410
};
1511
}
1612

17-
export function scrollIntoView(scrollIntoViewOptions) {
13+
export function _scrollIntoView(scrollIntoViewOptions) {
1814
return function (element) {
1915
return function () {
20-
if (scrollIntoViewOptions.value0) {
21-
element.scrollIntoView({
22-
block: scrollIntoViewOptions.value0.block.constructor.name.toLowerCase(),
23-
inline: scrollIntoViewOptions.value0.inline.constructor.name.toLowerCase()
24-
});
25-
} else {
26-
element.scrollIntoView();
27-
}
16+
element.scrollIntoView(scrollIntoViewOptions);
2817
};
2918
};
3019
}
3120

32-
export function scroll(scrollToOptions) {
21+
export function _scroll(scrollToOptions) {
3322
return function (element) {
3423
return function () {
35-
element.scrollIntoView(convertScrollToOptions(scrollToOptions));
24+
element.scrollIntoView(scrollToOptions);
3625
};
3726
};
3827
}
3928

40-
export function scrollTo(scrollToOptions) {
29+
export function _scrollTo(scrollToOptions) {
4130
return function (element) {
4231
return function () {
43-
element.scrollTo(convertScrollToOptions(scrollToOptions));
32+
element.scrollTo(scrollToOptions);
4433
};
4534
};
4635
}
4736

48-
export function scrollBy(scrollToOptions) {
37+
export function _scrollBy(scrollToOptions) {
4938
return function (element) {
5039
return function () {
51-
element.scrollBy(convertScrollToOptions(scrollToOptions));
40+
element.scrollBy(scrollToOptions);
5241
};
5342
};
5443
}

src/Web/CSSOMView/Element.purs

Lines changed: 72 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,34 @@
1-
module Web.CSSOMView.Element where
1+
module Web.CSSOMView.Element
2+
( clientHeight
3+
, clientLeft
4+
, clientTop
5+
, clientWidth
6+
, getBoundingClientRect
7+
, getClientRects
8+
, scroll
9+
, scrollBy
10+
, scrollHeight
11+
, scrollIntoView
12+
, scrollLeft
13+
, scrollTo
14+
, scrollTop
15+
, scrollWidth
16+
)
17+
where
218

3-
import Prelude (Unit)
19+
import Data.Maybe (Maybe(..))
420
import Effect (Effect)
5-
import Data.Maybe (Maybe)
21+
import Prelude (Unit)
22+
import Web.CSSOMView (ScrollBehavior(..), ScrollIntoViewOptions, ScrollLogicalPosition(..), ScrollToOptions)
623
import Web.DOM.Element (Element)
724
import Web.Geometry (DOMRectList, DOMRect)
8-
import Web.CSSOMView (ScrollIntoViewOptions, ScrollToOptions)
925

1026
foreign import getClientRects :: Element -> Effect DOMRectList
1127
foreign import getBoundingClientRect :: Element -> Effect DOMRect
12-
foreign import scrollIntoView :: Maybe ScrollIntoViewOptions -> Element -> Effect Unit
13-
foreign import scroll :: Maybe ScrollToOptions -> Element -> Effect Unit
14-
foreign import scrollTo :: Maybe ScrollToOptions -> Element -> Effect Unit
15-
foreign import scrollBy :: Maybe ScrollToOptions -> Element -> Effect Unit
28+
foreign import _scrollIntoView :: PrimitiveScrollIntoViewOptions -> Element -> Effect Unit
29+
foreign import _scroll :: PrimitiveScrollToOptions -> Element -> Effect Unit
30+
foreign import _scrollTo :: PrimitiveScrollToOptions -> Element -> Effect Unit
31+
foreign import _scrollBy :: PrimitiveScrollToOptions -> Element -> Effect Unit
1632
foreign import scrollTop :: Element -> Effect Number
1733
foreign import scrollLeft :: Element -> Effect Number
1834
foreign import scrollWidth :: Element -> Effect Int
@@ -21,3 +37,51 @@ foreign import clientTop :: Element -> Effect Int
2137
foreign import clientLeft :: Element -> Effect Int
2238
foreign import clientWidth :: Element -> Effect Int
2339
foreign import clientHeight :: Element -> Effect Int
40+
41+
scrollIntoView :: Maybe ScrollIntoViewOptions -> Element -> Effect Unit
42+
scrollIntoView scrollIntoViewOptions = _scrollIntoView (primitiveScrollIntoViewOptions scrollIntoViewOptions)
43+
scroll :: Maybe ScrollToOptions -> Element -> Effect Unit
44+
scroll scrollToOptions = _scroll (primitiveScrollToOptions scrollToOptions)
45+
scrollTo :: Maybe ScrollToOptions -> Element -> Effect Unit
46+
scrollTo scrollToOptions = _scrollTo (primitiveScrollToOptions scrollToOptions)
47+
scrollBy :: Maybe ScrollToOptions -> Element -> Effect Unit
48+
scrollBy scrollToOptions = _scrollBy (primitiveScrollToOptions scrollToOptions)
49+
50+
type PrimitiveScrollToOptions =
51+
{ left :: Number
52+
, top :: Number
53+
, behavior :: String
54+
}
55+
56+
primitiveBehavior :: ScrollBehavior -> String
57+
primitiveBehavior Auto = "auto"
58+
primitiveBehavior Instant = "instant"
59+
primitiveBehavior Smooth = "smooth"
60+
61+
primitiveScrollToOptions :: Maybe ScrollToOptions -> PrimitiveScrollToOptions
62+
primitiveScrollToOptions Nothing = { left: 0.0, top: 0.0, behavior: "auto" }
63+
primitiveScrollToOptions (Just scrollToOptions) =
64+
{ left: scrollToOptions.left
65+
, top: scrollToOptions.top
66+
, behavior: primitiveBehavior scrollToOptions.behavior
67+
}
68+
69+
type PrimitiveScrollIntoViewOptions =
70+
{ block :: String
71+
, inline :: String
72+
, behavior :: String
73+
}
74+
75+
primitiveScrollLogicalPosition :: ScrollLogicalPosition -> String
76+
primitiveScrollLogicalPosition Start = "start"
77+
primitiveScrollLogicalPosition Center = "center"
78+
primitiveScrollLogicalPosition End = "end"
79+
primitiveScrollLogicalPosition Nearest = "nearest"
80+
81+
primitiveScrollIntoViewOptions :: Maybe ScrollIntoViewOptions -> PrimitiveScrollIntoViewOptions
82+
primitiveScrollIntoViewOptions Nothing = { block: "start", inline: "nearest", behavior: "auto" }
83+
primitiveScrollIntoViewOptions (Just scrollIntoViewOptions) =
84+
{ block: primitiveScrollLogicalPosition scrollIntoViewOptions.block
85+
, inline: primitiveScrollLogicalPosition scrollIntoViewOptions.inline
86+
, behavior: primitiveBehavior scrollIntoViewOptions.behavior
87+
}

src/Web/CSSOMView/Window.js

Lines changed: 7 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -65,44 +65,26 @@ export const pageXOffset = getter("pageXOffset");
6565
export const scrollY = getter("scrollY");
6666
export const pageYOffset = getter("pageYOffset");
6767

68-
export function scroll(window) {
69-
return function (options) {
68+
export function _scroll(scrollToOptions) {
69+
return function (window) {
7070
return function () {
71-
if (typeof options.value0 === "object") {
72-
var newObject = Object.assign({}, options.value0);
73-
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
74-
window.scroll(newObject);
75-
} else {
76-
window.scroll();
77-
}
71+
window.scrollBy(scrollToOptions);
7872
};
7973
};
8074
}
8175

82-
export function scrollTo(options) {
76+
export function _scrollTo(scrollToOptions) {
8377
return function (window) {
8478
return function () {
85-
if (typeof options.value0 === "object") {
86-
var newObject = Object.assign({}, options.value0);
87-
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
88-
window.scrollTo(newObject);
89-
} else {
90-
window.scrollTo();
91-
}
79+
window.scrollBy(scrollToOptions);
9280
};
9381
};
9482
}
9583

96-
export function scrollBy(options) {
84+
export function _scrollBy(scrollToOptions) {
9785
return function (window) {
9886
return function () {
99-
if (typeof options.value0 === "object") {
100-
var newObject = Object.assign({}, options.value0);
101-
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
102-
window.scrollBy(newObject);
103-
} else {
104-
window.scrollBy();
105-
}
87+
window.scrollBy(scrollToOptions);
10688
};
10789
};
10890
}

src/Web/CSSOMView/Window.purs

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,35 @@
1-
module Web.CSSOMView.Window where
1+
module Web.CSSOMView.Window
2+
( devicePixelRatio
3+
, innerHeight
4+
, innerWidth
5+
, matchMedia
6+
, moveBy
7+
, moveTo
8+
, outerHeight
9+
, outerWidth
10+
, pageXOffset
11+
, pageYOffset
12+
, resizeBy
13+
, resizeTo
14+
, screen
15+
, screenTop
16+
, screenX
17+
, screenY
18+
, scroll
19+
, scrollBy
20+
, scrollTo
21+
, scrollX
22+
, scrollY
23+
)
24+
where
225

3-
import Prelude (Unit)
4-
import Data.Maybe (Maybe)
26+
import Data.Maybe (Maybe(..))
527
import Effect (Effect)
6-
import Web.HTML.Window (Window)
7-
import Web.CSSOMView (ScrollToOptions)
8-
import Web.CSSOMView.Screen (Screen)
28+
import Prelude (Unit)
29+
import Web.CSSOMView (ScrollBehavior(..), ScrollToOptions)
930
import Web.CSSOMView.MediaQueryList (MediaQueryList)
31+
import Web.CSSOMView.Screen (Screen)
32+
import Web.HTML.Window (Window)
1033

1134
foreign import matchMedia :: String -> Window -> Effect MediaQueryList
1235
foreign import screen :: Window -> Screen
@@ -23,9 +46,9 @@ foreign import pageXOffset :: Window -> Effect Number
2346
foreign import scrollY :: Window -> Effect Number
2447
foreign import pageYOffset :: Window -> Effect Number
2548

26-
foreign import scroll :: Maybe ScrollToOptions -> Window -> Effect Unit
27-
foreign import scrollTo :: Maybe ScrollToOptions -> Window -> Effect Unit
28-
foreign import scrollBy :: Maybe ScrollToOptions -> Window -> Effect Unit
49+
foreign import _scroll :: PrimitiveScrollToOptions -> Window -> Effect Unit
50+
foreign import _scrollTo :: PrimitiveScrollToOptions -> Window -> Effect Unit
51+
foreign import _scrollBy :: PrimitiveScrollToOptions -> Window -> Effect Unit
2952

3053
foreign import screenX :: Window -> Effect Int
3154
foreign import screenLeft :: Window -> Effect Int
@@ -34,3 +57,30 @@ foreign import screenTop :: Window -> Effect Int
3457
foreign import outerWidth :: Window -> Effect Int
3558
foreign import outerHeight :: Window -> Effect Int
3659
foreign import devicePixelRatio :: Window -> Effect Number
60+
61+
62+
scroll :: Maybe ScrollToOptions -> Window -> Effect Unit
63+
scroll scrollToOptions = _scroll (primitiveScrollToOptions scrollToOptions)
64+
scrollTo :: Maybe ScrollToOptions -> Window -> Effect Unit
65+
scrollTo scrollToOptions = _scrollTo (primitiveScrollToOptions scrollToOptions)
66+
scrollBy :: Maybe ScrollToOptions -> Window -> Effect Unit
67+
scrollBy scrollToOptions = _scrollBy (primitiveScrollToOptions scrollToOptions)
68+
69+
type PrimitiveScrollToOptions =
70+
{ left :: Number
71+
, top :: Number
72+
, behavior :: String
73+
}
74+
75+
primitiveBehavior :: ScrollBehavior -> String
76+
primitiveBehavior Auto = "auto"
77+
primitiveBehavior Instant = "instant"
78+
primitiveBehavior Smooth = "smooth"
79+
80+
primitiveScrollToOptions :: Maybe ScrollToOptions -> PrimitiveScrollToOptions
81+
primitiveScrollToOptions Nothing = { left: 0.0, top: 0.0, behavior: "auto" }
82+
primitiveScrollToOptions (Just scrollToOptions) =
83+
{ left: scrollToOptions.left
84+
, top: scrollToOptions.top
85+
, behavior: primitiveBehavior scrollToOptions.behavior
86+
}

0 commit comments

Comments
 (0)