{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
module Miso.Lynx.Element.List.Method
(
scrollToPosition
, autoScroll
, getVisibleCells
, scrollBy
, ScrollToPosition (..)
, AutoScroll (..)
, ScrollBy (..)
, defaultScrollToPosition
, defaultAutoScroll
, defaultScrollBy
) where
import Language.Javascript.JSaddle
import Miso
import Miso.Lynx.FFI
data ScrollToPosition
= ScrollToPosition
{ ScrollToPosition -> Double
position :: Double
, ScrollToPosition -> Double
offset :: Double
, ScrollToPosition -> MisoString
alignTo :: MisoString
, ScrollToPosition -> Bool
smooth :: Bool
} deriving (Int -> ScrollToPosition -> ShowS
[ScrollToPosition] -> ShowS
ScrollToPosition -> String
(Int -> ScrollToPosition -> ShowS)
-> (ScrollToPosition -> String)
-> ([ScrollToPosition] -> ShowS)
-> Show ScrollToPosition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ScrollToPosition -> ShowS
showsPrec :: Int -> ScrollToPosition -> ShowS
$cshow :: ScrollToPosition -> String
show :: ScrollToPosition -> String
$cshowList :: [ScrollToPosition] -> ShowS
showList :: [ScrollToPosition] -> ShowS
Show, ScrollToPosition -> ScrollToPosition -> Bool
(ScrollToPosition -> ScrollToPosition -> Bool)
-> (ScrollToPosition -> ScrollToPosition -> Bool)
-> Eq ScrollToPosition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ScrollToPosition -> ScrollToPosition -> Bool
== :: ScrollToPosition -> ScrollToPosition -> Bool
$c/= :: ScrollToPosition -> ScrollToPosition -> Bool
/= :: ScrollToPosition -> ScrollToPosition -> Bool
Eq)
defaultScrollToPosition :: ScrollToPosition
defaultScrollToPosition :: ScrollToPosition
defaultScrollToPosition
= ScrollToPosition
{ position :: Double
position = Double
10
, offset :: Double
offset = Double
100
, alignTo :: MisoString
alignTo = MisoString
"top"
, smooth :: Bool
smooth = Bool
True
}
instance ToJSVal ScrollToPosition where
toJSVal :: ScrollToPosition -> JSM JSVal
toJSVal ScrollToPosition {Bool
Double
MisoString
position :: ScrollToPosition -> Double
offset :: ScrollToPosition -> Double
alignTo :: ScrollToPosition -> MisoString
smooth :: ScrollToPosition -> Bool
position :: Double
offset :: Double
alignTo :: MisoString
smooth :: Bool
..} = do
object <- JSM Object
create
set "position" position object
set "offset" offset object
set "alignTo" alignTo object
set "smooth" smooth object
toJSVal object
scrollToPosition
:: MisoString
-> ScrollToPosition
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollToPosition :: forall action parent model.
MisoString
-> ScrollToPosition
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollToPosition = MisoString
-> MisoString
-> ScrollToPosition
-> (MisoString -> 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
"scrollToPosition"
data AutoScroll
= AutoScroll
{ AutoScroll -> MisoString
rate :: MisoString
, AutoScroll -> Bool
start :: Bool
, AutoScroll -> Bool
autoStop :: Bool
}
instance ToJSVal AutoScroll where
toJSVal :: AutoScroll -> JSM JSVal
toJSVal AutoScroll {Bool
MisoString
rate :: AutoScroll -> MisoString
start :: AutoScroll -> Bool
autoStop :: AutoScroll -> Bool
rate :: MisoString
start :: Bool
autoStop :: Bool
..} = do
o <- JSM Object
create
set "rate" rate o
set "start" start o
set "autoStop" autoStop o
toJSVal o
defaultAutoScroll :: AutoScroll
defaultAutoScroll :: AutoScroll
defaultAutoScroll = AutoScroll
forall a. HasCallStack => a
undefined
autoScroll
:: MisoString
-> AutoScroll
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
autoScroll :: forall action parent model.
MisoString
-> AutoScroll
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
autoScroll = MisoString
-> MisoString
-> AutoScroll
-> (MisoString -> 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
"scrollToPosition"
getVisibleCells
:: MisoString
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
getVisibleCells :: forall action parent model.
MisoString
-> (MisoString -> action)
-> (MisoString -> action)
-> Effect parent model action
getVisibleCells MisoString
name = MisoString
-> MisoString
-> ()
-> (MisoString -> 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
"getVisibleCells" MisoString
name ()
data ScrollBy
= ScrollBy
{ ScrollBy -> Double
scrollByOffset :: Double
}
instance ToJSVal ScrollBy where
toJSVal :: ScrollBy -> JSM JSVal
toJSVal ScrollBy {Double
scrollByOffset :: ScrollBy -> Double
scrollByOffset :: Double
..} = do
o <- JSM Object
create
set "offset" scrollByOffset o
toJSVal o
defaultScrollBy :: ScrollBy
defaultScrollBy :: ScrollBy
defaultScrollBy = Double -> ScrollBy
ScrollBy Double
0
scrollBy
:: MisoString
-> ScrollBy
-> (Consumed -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollBy :: forall action parent model.
MisoString
-> ScrollBy
-> (Consumed -> action)
-> (MisoString -> action)
-> Effect parent model action
scrollBy = MisoString
-> MisoString
-> ScrollBy
-> (Consumed -> 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"
data Consumed
= Consumed
{ Consumed -> Double
consumedX, Consumed -> Double
consumedY :: Double
, Consumed -> Double
unconsumedX, Consumed -> Double
unconsumedY :: Double
} deriving (Consumed -> Consumed -> Bool
(Consumed -> Consumed -> Bool)
-> (Consumed -> Consumed -> Bool) -> Eq Consumed
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Consumed -> Consumed -> Bool
== :: Consumed -> Consumed -> Bool
$c/= :: Consumed -> Consumed -> Bool
/= :: Consumed -> Consumed -> Bool
Eq, Int -> Consumed -> ShowS
[Consumed] -> ShowS
Consumed -> String
(Int -> Consumed -> ShowS)
-> (Consumed -> String) -> ([Consumed] -> ShowS) -> Show Consumed
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Consumed -> ShowS
showsPrec :: Int -> Consumed -> ShowS
$cshow :: Consumed -> String
show :: Consumed -> String
$cshowList :: [Consumed] -> ShowS
showList :: [Consumed] -> ShowS
Show)
instance FromJSVal Consumed where
fromJSVal :: JSVal -> JSM (Maybe Consumed)
fromJSVal JSVal
o = do
consumedX <- JSVal -> JSM Double
forall a. FromJSVal a => JSVal -> JSM a
fromJSValUnchecked (JSVal -> JSM Double) -> JSM JSVal -> JSM Double
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
o JSVal -> MisoString -> JSM JSVal
forall this name.
(MakeObject this, ToJSString name) =>
this -> name -> JSM JSVal
! (MisoString
"consumedX" :: MisoString)
consumedY <- fromJSValUnchecked =<< o ! ("consumedY" :: MisoString)
unconsumedX <- fromJSValUnchecked =<< o ! ("unconsumedX" :: MisoString)
unconsumedY <- fromJSValUnchecked =<< o ! ("unconsumedY" :: MisoString)
pure $ Just Consumed {..}