{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE OverloadedStrings #-}
module Miso.Native.X.Element.Textarea.Method
(
focus
, blur
, setValue
, setSelectionRange
, getValue
, TextareaValue (..)
) where
import Miso hiding (focus, blur, setValue, setSelectionRange)
import Miso.Native.FFI (invokeExec)
data TextareaValue
= TextareaValue
{ TextareaValue -> MisoString
value :: MisoString
, TextareaValue -> Int
selectionStart :: Int
, TextareaValue -> Int
selectionEnd :: Int
, TextareaValue -> Bool
isComposing :: Bool
} deriving (Int -> TextareaValue -> ShowS
[TextareaValue] -> ShowS
TextareaValue -> String
(Int -> TextareaValue -> ShowS)
-> (TextareaValue -> String)
-> ([TextareaValue] -> ShowS)
-> Show TextareaValue
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TextareaValue -> ShowS
showsPrec :: Int -> TextareaValue -> ShowS
$cshow :: TextareaValue -> String
show :: TextareaValue -> String
$cshowList :: [TextareaValue] -> ShowS
showList :: [TextareaValue] -> ShowS
Show, TextareaValue -> TextareaValue -> Bool
(TextareaValue -> TextareaValue -> Bool)
-> (TextareaValue -> TextareaValue -> Bool) -> Eq TextareaValue
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TextareaValue -> TextareaValue -> Bool
== :: TextareaValue -> TextareaValue -> Bool
$c/= :: TextareaValue -> TextareaValue -> Bool
/= :: TextareaValue -> TextareaValue -> Bool
Eq)
instance FromJSVal TextareaValue where
fromJSVal :: JSVal -> IO (Maybe TextareaValue)
fromJSVal JSVal
o = do
let readProp :: MisoString -> IO b
readProp MisoString
name = JSVal -> IO b
forall a. FromJSVal a => JSVal -> IO a
fromJSValUnchecked (JSVal -> IO b) -> IO JSVal -> IO b
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< JSVal
o JSVal -> MisoString -> IO JSVal
forall o. ToObject o => o -> MisoString -> IO JSVal
! (MisoString
name :: MisoString)
value <- MisoString -> IO MisoString
forall {b}. FromJSVal b => MisoString -> IO b
readProp MisoString
"value"
selectionStart <- readProp "selectionStart"
selectionEnd <- readProp "selectionEnd"
isComposing <- readProp "isComposing"
pure $ Just TextareaValue {..}
newtype SetValue = SetValue MisoString
instance ToJSVal SetValue where
toJSVal :: SetValue -> IO JSVal
toJSVal (SetValue MisoString
v) = do
o <- IO Object
create
set "value" v o
toJSVal o
data SetSelectionRange = SetSelectionRange Int Int
instance ToJSVal SetSelectionRange where
toJSVal :: SetSelectionRange -> IO JSVal
toJSVal (SetSelectionRange Int
s Int
e) = do
o <- IO Object
create
set "selectionStart" s o
set "selectionEnd" e o
toJSVal o
focus
:: MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
focus :: forall action context props model.
MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
focus MisoString
selector action
action = MisoString
-> MisoString
-> ()
-> (() -> action)
-> (MisoString -> action)
-> Effect context props model action
forall params argument action context props model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect context props model action
invokeExec MisoString
"focus" MisoString
selector () (\() -> action
action)
blur
:: MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
blur :: forall action context props model.
MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
blur MisoString
selector action
action = MisoString
-> MisoString
-> ()
-> (() -> action)
-> (MisoString -> action)
-> Effect context props model action
forall params argument action context props model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect context props model action
invokeExec MisoString
"blur" MisoString
selector () (\() -> action
action)
setValue
:: MisoString
-> MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
setValue :: forall action context props model.
MisoString
-> MisoString
-> action
-> (MisoString -> action)
-> Effect context props model action
setValue MisoString
selector MisoString
v action
action =
MisoString
-> MisoString
-> SetValue
-> (() -> action)
-> (MisoString -> action)
-> Effect context props model action
forall params argument action context props model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect context props model action
invokeExec MisoString
"setValue" MisoString
selector (MisoString -> SetValue
SetValue MisoString
v) (\() -> action
action)
setSelectionRange
:: MisoString
-> Int
-> Int
-> action
-> (MisoString -> action)
-> Effect context props model action
setSelectionRange :: forall action context props model.
MisoString
-> Int
-> Int
-> action
-> (MisoString -> action)
-> Effect context props model action
setSelectionRange MisoString
selector Int
s Int
e action
action =
MisoString
-> MisoString
-> SetSelectionRange
-> (() -> action)
-> (MisoString -> action)
-> Effect context props model action
forall params argument action context props model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect context props model action
invokeExec MisoString
"setSelectionRange" MisoString
selector (Int -> Int -> SetSelectionRange
SetSelectionRange Int
s Int
e) (\() -> action
action)
getValue
:: MisoString
-> (TextareaValue -> action)
-> (MisoString -> action)
-> Effect context props model action
getValue :: forall action context props model.
MisoString
-> (TextareaValue -> action)
-> (MisoString -> action)
-> Effect context props model action
getValue MisoString
selector = MisoString
-> MisoString
-> ()
-> (TextareaValue -> action)
-> (MisoString -> action)
-> Effect context props model action
forall params argument action context props model.
(ToJSVal params, FromJSVal argument) =>
MisoString
-> MisoString
-> params
-> (argument -> action)
-> (MisoString -> action)
-> Effect context props model action
invokeExec MisoString
"getValue" MisoString
selector ()