Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Removed using PureScript internals in JavaScript
  • Loading branch information
keijokapp committed Jan 7, 2024
commit 53d4709a3e66fcfe20852cbf9237307919d28a60
27 changes: 8 additions & 19 deletions src/Web/CSSOMView/Element.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
function convertScrollToOptions(options) {
return options.value0 && Object.assign({}, options.value0, { behavior: options.value0.constructor.name.toLowerCase() });
}

export function getClientRects(element) {
return function () {
return element.getClientRects();
Expand All @@ -14,41 +10,34 @@ export function getBoundingClientRect(element) {
};
}

export function scrollIntoView(scrollIntoViewOptions) {
export function _scrollIntoView(scrollIntoViewOptions) {
return function (element) {
return function () {
if (scrollIntoViewOptions.value0) {
element.scrollIntoView({
block: scrollIntoViewOptions.value0.block.constructor.name.toLowerCase(),
inline: scrollIntoViewOptions.value0.inline.constructor.name.toLowerCase()
});
} else {
element.scrollIntoView();
}
element.scrollIntoView(scrollIntoViewOptions);
};
};
}

export function scroll(scrollToOptions) {
export function _scroll(scrollToOptions) {
return function (element) {
return function () {
element.scrollIntoView(convertScrollToOptions(scrollToOptions));
element.scrollIntoView(scrollToOptions);
};
};
}

export function scrollTo(scrollToOptions) {
export function _scrollTo(scrollToOptions) {
return function (element) {
return function () {
element.scrollTo(convertScrollToOptions(scrollToOptions));
element.scrollTo(scrollToOptions);
};
};
}

export function scrollBy(scrollToOptions) {
export function _scrollBy(scrollToOptions) {
return function (element) {
return function () {
element.scrollBy(convertScrollToOptions(scrollToOptions));
element.scrollBy(scrollToOptions);
};
};
}
Expand Down
80 changes: 72 additions & 8 deletions src/Web/CSSOMView/Element.purs
Original file line number Diff line number Diff line change
@@ -1,18 +1,34 @@
module Web.CSSOMView.Element where
module Web.CSSOMView.Element
( clientHeight
, clientLeft
, clientTop
, clientWidth
, getBoundingClientRect
, getClientRects
, scroll
, scrollBy
, scrollHeight
, scrollIntoView
, scrollLeft
, scrollTo
, scrollTop
, scrollWidth
)
where

import Prelude (Unit)
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Data.Maybe (Maybe)
import Prelude (Unit)
import Web.CSSOMView (ScrollBehavior(..), ScrollIntoViewOptions, ScrollLogicalPosition(..), ScrollToOptions)
import Web.DOM.Element (Element)
import Web.Geometry (DOMRectList, DOMRect)
import Web.CSSOMView (ScrollIntoViewOptions, ScrollToOptions)

foreign import getClientRects :: Element -> Effect DOMRectList
foreign import getBoundingClientRect :: Element -> Effect DOMRect
foreign import scrollIntoView :: Maybe ScrollIntoViewOptions -> Element -> Effect Unit
foreign import scroll :: Maybe ScrollToOptions -> Element -> Effect Unit
foreign import scrollTo :: Maybe ScrollToOptions -> Element -> Effect Unit
foreign import scrollBy :: Maybe ScrollToOptions -> Element -> Effect Unit
foreign import _scrollIntoView :: PrimitiveScrollIntoViewOptions -> Element -> Effect Unit
foreign import _scroll :: PrimitiveScrollToOptions -> Element -> Effect Unit
foreign import _scrollTo :: PrimitiveScrollToOptions -> Element -> Effect Unit
foreign import _scrollBy :: PrimitiveScrollToOptions -> Element -> Effect Unit
foreign import scrollTop :: Element -> Effect Number
foreign import scrollLeft :: Element -> Effect Number
foreign import scrollWidth :: Element -> Effect Int
Expand All @@ -21,3 +37,51 @@ foreign import clientTop :: Element -> Effect Int
foreign import clientLeft :: Element -> Effect Int
foreign import clientWidth :: Element -> Effect Int
foreign import clientHeight :: Element -> Effect Int

scrollIntoView :: Maybe ScrollIntoViewOptions -> Element -> Effect Unit
scrollIntoView scrollIntoViewOptions = _scrollIntoView (primitiveScrollIntoViewOptions scrollIntoViewOptions)
scroll :: Maybe ScrollToOptions -> Element -> Effect Unit
scroll scrollToOptions = _scroll (primitiveScrollToOptions scrollToOptions)
scrollTo :: Maybe ScrollToOptions -> Element -> Effect Unit
scrollTo scrollToOptions = _scrollTo (primitiveScrollToOptions scrollToOptions)
scrollBy :: Maybe ScrollToOptions -> Element -> Effect Unit
scrollBy scrollToOptions = _scrollBy (primitiveScrollToOptions scrollToOptions)

type PrimitiveScrollToOptions =
{ left :: Number
, top :: Number
, behavior :: String
}

primitiveBehavior :: ScrollBehavior -> String
primitiveBehavior Auto = "auto"
primitiveBehavior Instant = "instant"
primitiveBehavior Smooth = "smooth"

primitiveScrollToOptions :: Maybe ScrollToOptions -> PrimitiveScrollToOptions
primitiveScrollToOptions Nothing = { left: 0.0, top: 0.0, behavior: "auto" }
primitiveScrollToOptions (Just scrollToOptions) =
{ left: scrollToOptions.left
, top: scrollToOptions.top
, behavior: primitiveBehavior scrollToOptions.behavior
}

type PrimitiveScrollIntoViewOptions =
{ block :: String
, inline :: String
, behavior :: String
}

primitiveScrollLogicalPosition :: ScrollLogicalPosition -> String
primitiveScrollLogicalPosition Start = "start"
primitiveScrollLogicalPosition Center = "center"
primitiveScrollLogicalPosition End = "end"
primitiveScrollLogicalPosition Nearest = "nearest"

primitiveScrollIntoViewOptions :: Maybe ScrollIntoViewOptions -> PrimitiveScrollIntoViewOptions
primitiveScrollIntoViewOptions Nothing = { block: "start", inline: "nearest", behavior: "auto" }
primitiveScrollIntoViewOptions (Just scrollIntoViewOptions) =
{ block: primitiveScrollLogicalPosition scrollIntoViewOptions.block
, inline: primitiveScrollLogicalPosition scrollIntoViewOptions.inline
, behavior: primitiveBehavior scrollIntoViewOptions.behavior
}
32 changes: 7 additions & 25 deletions src/Web/CSSOMView/Window.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,44 +65,26 @@ export const pageXOffset = getter("pageXOffset");
export const scrollY = getter("scrollY");
export const pageYOffset = getter("pageYOffset");

export function scroll(window) {
return function (options) {
export function _scroll(scrollToOptions) {
return function (window) {
return function () {
if (typeof options.value0 === "object") {
var newObject = Object.assign({}, options.value0);
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
window.scroll(newObject);
} else {
window.scroll();
}
window.scrollBy(scrollToOptions);
};
};
}

export function scrollTo(options) {
export function _scrollTo(scrollToOptions) {
return function (window) {
return function () {
if (typeof options.value0 === "object") {
var newObject = Object.assign({}, options.value0);
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
window.scrollTo(newObject);
} else {
window.scrollTo();
}
window.scrollBy(scrollToOptions);
};
};
}

export function scrollBy(options) {
export function _scrollBy(scrollToOptions) {
return function (window) {
return function () {
if (typeof options.value0 === "object") {
var newObject = Object.assign({}, options.value0);
newObject.behavior = newObject.behavior.value0.constructor.name.toLowerCase();
window.scrollBy(newObject);
} else {
window.scrollBy();
}
window.scrollBy(scrollToOptions);
};
};
}
Expand Down
68 changes: 59 additions & 9 deletions src/Web/CSSOMView/Window.purs
Original file line number Diff line number Diff line change
@@ -1,12 +1,35 @@
module Web.CSSOMView.Window where
module Web.CSSOMView.Window
( devicePixelRatio
, innerHeight
, innerWidth
, matchMedia
, moveBy
, moveTo
, outerHeight
, outerWidth
, pageXOffset
, pageYOffset
, resizeBy
, resizeTo
, screen
, screenTop
, screenX
, screenY
, scroll
, scrollBy
, scrollTo
, scrollX
, scrollY
)
where

import Prelude (Unit)
import Data.Maybe (Maybe)
import Data.Maybe (Maybe(..))
import Effect (Effect)
import Web.HTML.Window (Window)
import Web.CSSOMView (ScrollToOptions)
import Web.CSSOMView.Screen (Screen)
import Prelude (Unit)
import Web.CSSOMView (ScrollBehavior(..), ScrollToOptions)
import Web.CSSOMView.MediaQueryList (MediaQueryList)
import Web.CSSOMView.Screen (Screen)
import Web.HTML.Window (Window)

foreign import matchMedia :: String -> Window -> Effect MediaQueryList
foreign import screen :: Window -> Screen
Expand All @@ -23,9 +46,9 @@ foreign import pageXOffset :: Window -> Effect Number
foreign import scrollY :: Window -> Effect Number
foreign import pageYOffset :: Window -> Effect Number

foreign import scroll :: Maybe ScrollToOptions -> Window -> Effect Unit
foreign import scrollTo :: Maybe ScrollToOptions -> Window -> Effect Unit
foreign import scrollBy :: Maybe ScrollToOptions -> Window -> Effect Unit
foreign import _scroll :: PrimitiveScrollToOptions -> Window -> Effect Unit
foreign import _scrollTo :: PrimitiveScrollToOptions -> Window -> Effect Unit
foreign import _scrollBy :: PrimitiveScrollToOptions -> Window -> Effect Unit

foreign import screenX :: Window -> Effect Int
foreign import screenLeft :: Window -> Effect Int
Expand All @@ -34,3 +57,30 @@ foreign import screenTop :: Window -> Effect Int
foreign import outerWidth :: Window -> Effect Int
foreign import outerHeight :: Window -> Effect Int
foreign import devicePixelRatio :: Window -> Effect Number


scroll :: Maybe ScrollToOptions -> Window -> Effect Unit
scroll scrollToOptions = _scroll (primitiveScrollToOptions scrollToOptions)
scrollTo :: Maybe ScrollToOptions -> Window -> Effect Unit
scrollTo scrollToOptions = _scrollTo (primitiveScrollToOptions scrollToOptions)
scrollBy :: Maybe ScrollToOptions -> Window -> Effect Unit
scrollBy scrollToOptions = _scrollBy (primitiveScrollToOptions scrollToOptions)

type PrimitiveScrollToOptions =
{ left :: Number
, top :: Number
, behavior :: String
}

primitiveBehavior :: ScrollBehavior -> String
primitiveBehavior Auto = "auto"
primitiveBehavior Instant = "instant"
primitiveBehavior Smooth = "smooth"

primitiveScrollToOptions :: Maybe ScrollToOptions -> PrimitiveScrollToOptions
primitiveScrollToOptions Nothing = { left: 0.0, top: 0.0, behavior: "auto" }
primitiveScrollToOptions (Just scrollToOptions) =
{ left: scrollToOptions.left
, top: scrollToOptions.top
, behavior: primitiveBehavior scrollToOptions.behavior
}