on develop help sign in
WIP making paste event return clipboard data
decc0e1Doug Beardsley
reflex-dom-core/src/Reflex/Dom/Builder/Class/Events.hs+2−1
@@ -14,6 +14,7 @@ import Data.GADT.Compare.TH
14import Data.GADT.Compare
14import Data.GADT.Compare
15 (GOrdering(..), (:~:)(..), GEq(..), GCompare(..))
15 (GOrdering(..), (:~:)(..), GEq(..), GCompare(..))
16#endif
16#endif
17+import Data.Text (Text)
17
18
18data EventTag
19data EventTag
19 = AbortTag
20 = AbortTag
@@ -151,7 +152,7 @@ type family EventResultType (en :: EventTag) :: * where
151 EventResultType 'BeforecopyTag = ()
152 EventResultType 'BeforecopyTag = ()
152 EventResultType 'CopyTag = ()
153 EventResultType 'CopyTag = ()
153 EventResultType 'BeforepasteTag = ()
154 EventResultType 'BeforepasteTag = ()
154− EventResultType 'PasteTag = ()
155+ EventResultType 'PasteTag = Text
155 EventResultType 'ResetTag = ()
156 EventResultType 'ResetTag = ()
156 EventResultType 'SearchTag = ()
157 EventResultType 'SearchTag = ()
157 EventResultType 'SelectstartTag = ()
158 EventResultType 'SelectstartTag = ()
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+14−3
@@ -140,6 +140,7 @@ import Data.Some (Some(..))
140import Data.Text (Text)
140import Data.Text (Text)
141import Foreign.JavaScript.Internal.Utils
141import Foreign.JavaScript.Internal.Utils
142import Foreign.JavaScript.TH
142import Foreign.JavaScript.TH
143+import GHCJS.DOM.ClipboardEvent as ClipboardEvent
143import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode, createComment)
144import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode, createComment)
144import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS, hasAttribute, hasAttributeNS)
145import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS, hasAttribute, hasAttributeNS)
145import GHCJS.DOM.EventM (EventM, event, on)
146import GHCJS.DOM.EventM (EventM, event, on)
@@ -175,6 +176,7 @@ import qualified Data.IntMap.Strict as IntMap
175import qualified Data.Map as Map
176import qualified Data.Map as Map
176import qualified Data.Text as T
177import qualified Data.Text as T
177import qualified GHCJS.DOM as DOM
178import qualified GHCJS.DOM as DOM
179+import qualified GHCJS.DOM.DataTransfer as DataTransfer
178import qualified GHCJS.DOM.DocumentAndElementEventHandlers as Events
180import qualified GHCJS.DOM.DocumentAndElementEventHandlers as Events
179import qualified GHCJS.DOM.DocumentOrShadowRoot as Document
181import qualified GHCJS.DOM.DocumentOrShadowRoot as Document
180import qualified GHCJS.DOM.Element as Element
182import qualified GHCJS.DOM.Element as Element
@@ -2239,7 +2241,7 @@ defaultDomEventHandler e evt = fmap (Just . EventResult) $ case evt of
2239 Beforecopy -> return ()
2241 Beforecopy -> return ()
2240 Copy -> return ()
2242 Copy -> return ()
2241 Beforepaste -> return ()
2243 Beforepaste -> return ()
2242− Paste -> return ()
2244+ Paste -> getPasteData
2243 Reset -> return ()
2245 Reset -> return ()
2244 Search -> return ()
2246 Search -> return ()
2245 Selectstart -> return ()
2247 Selectstart -> return ()
@@ -2289,7 +2291,7 @@ defaultDomWindowEventHandler w evt = fmap (Just . EventResult) $ case evt of
2289 Beforecopy -> return ()
2291 Beforecopy -> return ()
2290 Copy -> return ()
2292 Copy -> return ()
2291 Beforepaste -> return ()
2293 Beforepaste -> return ()
2292− Paste -> return ()
2294+ Paste -> getPasteData
2293 Reset -> return ()
2295 Reset -> return ()
2294 Search -> return ()
2296 Search -> return ()
2295 Selectstart -> return ()
2297 Selectstart -> return ()
@@ -2499,7 +2501,7 @@ windowOnEventName en e = case en of
2499 Beforecopy -> const $ return $ return () --TODO
2501 Beforecopy -> const $ return $ return () --TODO
2500 Copy -> const $ return $ return () --TODO
2502 Copy -> const $ return $ return () --TODO
2501 Beforepaste -> const $ return $ return () --TODO
2503 Beforepaste -> const $ return $ return () --TODO
2502− Paste -> const $ return $ return () --TODO
2504+ Paste -> on e Events.paste
2503 Reset -> on e Events.reset
2505 Reset -> on e Events.reset
2504 Search -> on e Events.search
2506 Search -> on e Events.search
2505 Selectstart -> const $ return $ return () --TODO
2507 Selectstart -> const $ return $ return () --TODO
@@ -2566,6 +2568,15 @@ getMouseEventCoords = do
2566 e <- event
2568 e <- event
2567 bisequence (getClientX e, getClientY e)
2569 bisequence (getClientX e, getClientY e)
2568
2570
2571+{-# INLINABLE getPasteData #-}
2572+getPasteData :: EventM e ClipboardEvent Text
2573+getPasteData = do
2574+ e <- event
2575+ mdt <- ClipboardEvent.getClipboardData e
2576+ case mdt of
2577+ Nothing -> return ""
2578+ Just dt -> DataTransfer.getData dt ("text" :: Text)
2579+
2569{-# INLINABLE getTouchEvent #-}
2580{-# INLINABLE getTouchEvent #-}
2570getTouchEvent :: EventM e TouchEvent TouchEventResult
2581getTouchEvent :: EventM e TouchEvent TouchEventResult
2571getTouchEvent = do
2582getTouchEvent = do