on develop help sign in
add hasFocus to TextArea
1392582ali abrar
src/Reflex/Dom/Widget/Input.hs+11−1
@@ -110,14 +110,24 @@ textInputGetEnter i = fmapMaybe (\n -> if n == keycodeEnter then Just () else No
110data TextArea t
110data TextArea t
111 = TextArea { _textArea_value :: Dynamic t String
111 = TextArea { _textArea_value :: Dynamic t String
112 , _textArea_element :: HTMLTextAreaElement
112 , _textArea_element :: HTMLTextAreaElement
113+ , _textArea_hasFocus :: Dynamic t Bool
113 }
114 }
114
115
115textArea :: MonadWidget t m => String -> Event t String -> Dynamic t (Map String String) -> m (TextArea t)
116textArea :: MonadWidget t m => String -> Event t String -> Dynamic t (Map String String) -> m (TextArea t)
116textArea initial eSet attrs = do
117textArea initial eSet attrs = do
117 e <- liftM castToHTMLTextAreaElement $ buildEmptyElement "textarea" attrs
118 e <- liftM castToHTMLTextAreaElement $ buildEmptyElement "textarea" attrs
119+ postGui <- askPostGui
120+ runWithActions <- askRunWithActions
121+ eChangeFocus <- newEventWithTrigger $ \eChangeFocusTrigger -> do
122+ unsubscribeOnblur <- liftIO $ elementOnblur e $ liftIO $ do
123+ postGui $ runWithActions [eChangeFocusTrigger :=> False]
124+ unsubscribeOnfocus <- liftIO $ elementOnfocus e $ liftIO $ do
125+ postGui $ runWithActions [eChangeFocusTrigger :=> True]
126+ return $ liftIO $ unsubscribeOnblur >> unsubscribeOnfocus
127+ f <- holdDyn False eChangeFocus
118 ev <- wrapDomEvent e elementOninput $ liftIO $ htmlTextAreaElementGetValue e
128 ev <- wrapDomEvent e elementOninput $ liftIO $ htmlTextAreaElementGetValue e
119 v <- holdDyn "" ev
129 v <- holdDyn "" ev
120− return $ TextArea v e
130+ return $ TextArea v e f
121
131
122{-
132{-
123type family Controller sm t a where
133type family Controller sm t a where