-----------------------------------------------------------------------------
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
-----------------------------------------------------------------------------
-- |
-- Module      :  Miso.Lynx.Element.ScrollView.Method
-- Copyright   :  (C) 2016-2025 David M. Johnson
-- License     :  BSD3-style (see the file LICENSE)
-- Maintainer  :  David M. Johnson <code@dmj.io>
-- Stability   :  experimental
-- Portability :  non-portable
----------------------------------------------------------------------------
module Miso.Lynx.Element.ScrollView.Method
  ( -- *** Methods
    scrollTo
  , autoScroll
  , scrollIntoView
  , scrollBy
  -- *** Types
  , ScrollTo (..)
  , AutoScroll (..)
  , ScrollIntoView (..)
  , ScrollBy (..)
  -- *** Smart constructors
  , defaultScrollTo
  , defaultAutoScroll
  , defaultScrollIntoView
  , defaultScrollBy
  ) where
-----------------------------------------------------------------------------
import Miso
import Miso.Lynx.FFI
-----------------------------------------------------------------------------
import Language.Javascript.JSaddle
-----------------------------------------------------------------------------
data ScrollTo
  = ScrollTo
  { ScrollTo -> Double
offset :: Double
  , ScrollTo -> Double
index :: Double
  , ScrollTo -> Bool
smooth :: Bool
  } deriving (Int -> ScrollTo -> ShowS
[ScrollTo] -> ShowS
ScrollTo -> String
(Int -> ScrollTo -> ShowS)
-> (ScrollTo -> String) -> ([ScrollTo] -> ShowS) -> Show ScrollTo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScrollTo -> ShowS
showsPrec :: Int -> ScrollTo -> ShowS
$cshow :: ScrollTo -> String
show :: ScrollTo -> String
$cshowList :: [ScrollTo] -> ShowS
showList :: [ScrollTo] -> ShowS
Show, ScrollTo -> ScrollTo -> Bool
(ScrollTo -> ScrollTo -> Bool)
-> (ScrollTo -> ScrollTo -> Bool) -> Eq ScrollTo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScrollTo -> ScrollTo -> Bool
== :: ScrollTo -> ScrollTo -> Bool
$c/= :: ScrollTo -> ScrollTo -> Bool
/= :: ScrollTo -> ScrollTo -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSVal ScrollTo where
  toJSVal :: ScrollTo -> JSM JSVal
toJSVal ScrollTo {Bool
Double
offset :: ScrollTo -> Double
index :: ScrollTo -> Double
smooth :: ScrollTo -> Bool
offset :: Double
index :: Double
smooth :: Bool
..} = do
    object <- JSM Object
create
    set "offset" offset object
    set "index" index object
    set "smooth" smooth object
    toJSVal object 
-----------------------------------------------------------------------------
defaultScrollTo :: ScrollTo
defaultScrollTo :: ScrollTo
defaultScrollTo = Double -> Double -> Bool -> ScrollTo
ScrollTo Double
0 Double
1 Bool
True
-----------------------------------------------------------------------------
scrollTo
  :: MisoString
  -> ScrollTo
  -> (JSVal -> action)
  -> (MisoString -> action)
  -> Effect parent model action
scrollTo :: forall action parent model.
MisoString
-> ScrollTo
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollTo = MisoString
-> MisoString
-> ScrollTo
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
forall params argument action parent model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec MisoString
"scrollTo"
-----------------------------------------------------------------------------
data AutoScroll
  = AutoScroll
  { AutoScroll -> Double
rate :: Double
  , AutoScroll -> Bool
start :: Bool
  } deriving (Int -> AutoScroll -> ShowS
[AutoScroll] -> ShowS
AutoScroll -> String
(Int -> AutoScroll -> ShowS)
-> (AutoScroll -> String)
-> ([AutoScroll] -> ShowS)
-> Show AutoScroll
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AutoScroll -> ShowS
showsPrec :: Int -> AutoScroll -> ShowS
$cshow :: AutoScroll -> String
show :: AutoScroll -> String
$cshowList :: [AutoScroll] -> ShowS
showList :: [AutoScroll] -> ShowS
Show, AutoScroll -> AutoScroll -> Bool
(AutoScroll -> AutoScroll -> Bool)
-> (AutoScroll -> AutoScroll -> Bool) -> Eq AutoScroll
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AutoScroll -> AutoScroll -> Bool
== :: AutoScroll -> AutoScroll -> Bool
$c/= :: AutoScroll -> AutoScroll -> Bool
/= :: AutoScroll -> AutoScroll -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSVal AutoScroll where
  toJSVal :: AutoScroll -> JSM JSVal
toJSVal AutoScroll {Bool
Double
rate :: AutoScroll -> Double
start :: AutoScroll -> Bool
rate :: Double
start :: Bool
..} = do
    object <- JSM Object
create
    set "rate" rate object
    set "start" start object
    toJSVal object 
-----------------------------------------------------------------------------
defaultAutoScroll :: AutoScroll
defaultAutoScroll :: AutoScroll
defaultAutoScroll = Double -> Bool -> AutoScroll
AutoScroll Double
120 Bool
True
-----------------------------------------------------------------------------
autoScroll
  :: MisoString
  -> AutoScroll
  -> (JSVal -> action)
  -> (MisoString -> action)
  -> Effect parent model action
autoScroll :: forall action parent model.
MisoString
-> AutoScroll
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
autoScroll = MisoString
-> MisoString
-> AutoScroll
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
forall params argument action parent model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec MisoString
"autoScroll"
-----------------------------------------------------------------------------
data ScrollIntoView
  = ScrollIntoView
  { ScrollIntoView -> MisoString
block :: MisoString
    -- ^ Vertical alignment options: "start" aligns top | "center" centers | "end" aligns bottom
  , ScrollIntoView -> MisoString
inline :: MisoString
    -- ^ Horizontal alignment options: "start" aligns left | "center" centers | "end" aligns right
  , ScrollIntoView -> MisoString
behavior :: MisoString
    -- ^ "smooth" | "none" whether to animate scrolling
  } deriving (Int -> ScrollIntoView -> ShowS
[ScrollIntoView] -> ShowS
ScrollIntoView -> String
(Int -> ScrollIntoView -> ShowS)
-> (ScrollIntoView -> String)
-> ([ScrollIntoView] -> ShowS)
-> Show ScrollIntoView
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScrollIntoView -> ShowS
showsPrec :: Int -> ScrollIntoView -> ShowS
$cshow :: ScrollIntoView -> String
show :: ScrollIntoView -> String
$cshowList :: [ScrollIntoView] -> ShowS
showList :: [ScrollIntoView] -> ShowS
Show, ScrollIntoView -> ScrollIntoView -> Bool
(ScrollIntoView -> ScrollIntoView -> Bool)
-> (ScrollIntoView -> ScrollIntoView -> Bool) -> Eq ScrollIntoView
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScrollIntoView -> ScrollIntoView -> Bool
== :: ScrollIntoView -> ScrollIntoView -> Bool
$c/= :: ScrollIntoView -> ScrollIntoView -> Bool
/= :: ScrollIntoView -> ScrollIntoView -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSVal ScrollIntoView where
  toJSVal :: ScrollIntoView -> JSM JSVal
toJSVal ScrollIntoView {MisoString
block :: ScrollIntoView -> MisoString
inline :: ScrollIntoView -> MisoString
behavior :: ScrollIntoView -> MisoString
block :: MisoString
inline :: MisoString
behavior :: MisoString
..} = do
    object <- JSM Object
create
    set "block" block object
    set "inline" inline object
    set "behavior" behavior object
    scrollIntoViewOptions <- create
    set "scrollIntoViewOptions" object scrollIntoViewOptions
    toJSVal scrollIntoViewOptions
-----------------------------------------------------------------------------
defaultScrollIntoView :: ScrollIntoView
defaultScrollIntoView :: ScrollIntoView
defaultScrollIntoView
  = ScrollIntoView
  { block :: MisoString
block = MisoString
"center"
  , inline :: MisoString
inline = MisoString
"start"
  , behavior :: MisoString
behavior = MisoString
"smooth"
  }
-----------------------------------------------------------------------------
scrollIntoView
  :: MisoString
  -> ScrollIntoView
  -> (JSVal -> action)
  -> (MisoString -> action)
  -> Effect parent model action
scrollIntoView :: forall action parent model.
MisoString
-> ScrollIntoView
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollIntoView = MisoString
-> MisoString
-> ScrollIntoView
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
forall params argument action parent model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec MisoString
"scrollIntoView"
-----------------------------------------------------------------------------
newtype ScrollBy
  = ScrollBy
  { ScrollBy -> Double
scrollByOffset :: Double
  } deriving (Int -> ScrollBy -> ShowS
[ScrollBy] -> ShowS
ScrollBy -> String
(Int -> ScrollBy -> ShowS)
-> (ScrollBy -> String) -> ([ScrollBy] -> ShowS) -> Show ScrollBy
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScrollBy -> ShowS
showsPrec :: Int -> ScrollBy -> ShowS
$cshow :: ScrollBy -> String
show :: ScrollBy -> String
$cshowList :: [ScrollBy] -> ShowS
showList :: [ScrollBy] -> ShowS
Show, ScrollBy -> ScrollBy -> Bool
(ScrollBy -> ScrollBy -> Bool)
-> (ScrollBy -> ScrollBy -> Bool) -> Eq ScrollBy
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScrollBy -> ScrollBy -> Bool
== :: ScrollBy -> ScrollBy -> Bool
$c/= :: ScrollBy -> ScrollBy -> Bool
/= :: ScrollBy -> ScrollBy -> Bool
Eq)
-----------------------------------------------------------------------------
instance ToJSVal ScrollBy where
  toJSVal :: ScrollBy -> JSM JSVal
toJSVal ScrollBy {Double
scrollByOffset :: ScrollBy -> Double
scrollByOffset :: Double
..} = do
    object <- JSM Object
create
    set "offset" scrollByOffset object
    toJSVal object
-----------------------------------------------------------------------------
defaultScrollBy :: ScrollBy
defaultScrollBy :: ScrollBy
defaultScrollBy = ScrollBy
  { scrollByOffset :: Double
scrollByOffset = Double
0
  }
-----------------------------------------------------------------------------
scrollBy
  :: MisoString
  -> ScrollBy
  -> (JSVal -> action)
  -> (MisoString -> action)
  -> Effect parent model action
scrollBy :: forall action parent model.
MisoString
-> ScrollBy
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollBy = MisoString
-> MisoString
-> ScrollBy
-> (JSVal -> action)
-> (MisoString -> action)
-> Effect parent model action
forall params argument action parent model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect parent model action
invokeExec MisoString
"scrollBy"
-----------------------------------------------------------------------------