on develop help sign in
Merge pull request #374 from mightybyte/paste-event
666846dRyan Trinkle
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 = Maybe 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+13−2
@@ -144,6 +144,7 @@ import Data.String (IsString)
144import Data.Text (Text)
144import Data.Text (Text)
145import Foreign.JavaScript.Internal.Utils
145import Foreign.JavaScript.Internal.Utils
146import Foreign.JavaScript.TH
146import Foreign.JavaScript.TH
147+import GHCJS.DOM.ClipboardEvent as ClipboardEvent
147import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode, createComment)
148import GHCJS.DOM.Document (Document, createDocumentFragment, createElement, createElementNS, createTextNode, createComment)
148import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS, hasAttribute)
149import GHCJS.DOM.Element (getScrollTop, removeAttribute, removeAttributeNS, setAttribute, setAttributeNS, hasAttribute)
149import GHCJS.DOM.EventM (EventM, event, on)
150import GHCJS.DOM.EventM (EventM, event, on)
@@ -179,6 +180,7 @@ import qualified Data.IntMap.Strict as IntMap
179import qualified Data.Map as Map
180import qualified Data.Map as Map
180import qualified Data.Text as T
181import qualified Data.Text as T
181import qualified GHCJS.DOM as DOM
182import qualified GHCJS.DOM as DOM
183+import qualified GHCJS.DOM.DataTransfer as DataTransfer
182import qualified GHCJS.DOM.DocumentAndElementEventHandlers as Events
184import qualified GHCJS.DOM.DocumentAndElementEventHandlers as Events
183import qualified GHCJS.DOM.DocumentOrShadowRoot as Document
185import qualified GHCJS.DOM.DocumentOrShadowRoot as Document
184import qualified GHCJS.DOM.Element as Element
186import qualified GHCJS.DOM.Element as Element
@@ -2255,7 +2257,7 @@ defaultDomEventHandler e evt = fmap (Just . EventResult) $ case evt of
2255 Beforecopy -> return ()
2257 Beforecopy -> return ()
2256 Copy -> return ()
2258 Copy -> return ()
2257 Beforepaste -> return ()
2259 Beforepaste -> return ()
2258− Paste -> return ()
2260+ Paste -> getPasteData
2259 Reset -> return ()
2261 Reset -> return ()
2260 Search -> return ()
2262 Search -> return ()
2261 Selectstart -> return ()
2263 Selectstart -> return ()
@@ -2305,7 +2307,7 @@ defaultDomWindowEventHandler w evt = fmap (Just . EventResult) $ case evt of
2305 Beforecopy -> return ()
2307 Beforecopy -> return ()
2306 Copy -> return ()
2308 Copy -> return ()
2307 Beforepaste -> return ()
2309 Beforepaste -> return ()
2308− Paste -> return ()
2310+ Paste -> getPasteData
2309 Reset -> return ()
2311 Reset -> return ()
2310 Search -> return ()
2312 Search -> return ()
2311 Selectstart -> return ()
2313 Selectstart -> return ()
@@ -2582,6 +2584,15 @@ getMouseEventCoords = do
2582 e <- event
2584 e <- event
2583 bisequence (getClientX e, getClientY e)
2585 bisequence (getClientX e, getClientY e)
2584
2586
2587+{-# INLINABLE getPasteData #-}
2588+getPasteData :: EventM e ClipboardEvent (Maybe Text)
2589+getPasteData = do
2590+ e <- event
2591+ mdt <- ClipboardEvent.getClipboardData e
2592+ case mdt of
2593+ Nothing -> return Nothing
2594+ Just dt -> Just <$> DataTransfer.getData dt ("text" :: Text)
2595+
2585{-# INLINABLE getTouchEvent #-}
2596{-# INLINABLE getTouchEvent #-}
2586getTouchEvent :: EventM e TouchEvent TouchEventResult
2597getTouchEvent :: EventM e TouchEvent TouchEventResult
2587getTouchEvent = do
2598getTouchEvent = do