@@ -7,15 +7,21 @@ module Ocelot.Clipboard
7
7
8
8
import Prelude
9
9
10
+ import Data.Maybe (Maybe (..))
11
+ import Effect (Effect )
10
12
import Effect.Aff as Effect.Aff
11
13
import Effect.Aff.Class (class MonadAff )
14
+ import Effect.Uncurried as Effect.Uncurried
12
15
import Halogen as Halogen
13
16
import Halogen.HTML as Halogen.HTML
14
17
import Halogen.HTML.Events as Halogen.HTML.Events
15
18
import Halogen.HTML.Properties as Halogen.HTML.Propetires
16
19
import Ocelot.Block.Button as Ocelot.Block.Button
17
20
import Ocelot.Block.Icon as Ocelot.Block.Icon
18
21
import Ocelot.HTML.Properties as Ocelot.HTML.Properties
22
+ import Web.HTML as Web.HTML
23
+ import Web.HTML.Navigator as Web.HTML.Navigator
24
+ import Web.HTML.Window as Web.HTML.Window
19
25
20
26
type Slot
21
27
= Halogen.Slot Query Output
@@ -85,12 +91,23 @@ copy ::
85
91
MonadAff m =>
86
92
ComponentM m Unit
87
93
copy = do
94
+ input <- Halogen .gets _.input
95
+ Halogen .liftEffect
96
+ $ copyToClipboard input.text
88
97
Halogen .modify_ _ { copied = true }
89
98
void $ Halogen .fork do
90
99
Halogen .liftAff
91
100
$ Effect.Aff .delay (Effect.Aff.Milliseconds 1000.0 )
92
101
Halogen .modify_ _ { copied = false }
93
102
103
+ copyToClipboard ::
104
+ String ->
105
+ Effect Unit
106
+ copyToClipboard text = do
107
+ window <- Web.HTML .window
108
+ navigator <- Web.HTML.Window .navigator window
109
+ writeText navigator text
110
+
94
111
receive ::
95
112
forall m .
96
113
Input ->
@@ -126,3 +143,20 @@ renderDone =
126
143
[ Ocelot.HTML.Properties .css " ml-2" ]
127
144
[ Halogen.HTML .text " Copied" ]
128
145
]
146
+
147
+ foreign import _writeText ::
148
+ Effect.Uncurried.EffectFn1
149
+ { navigator :: Web.HTML.Navigator.Navigator
150
+ , text :: String
151
+ }
152
+ Unit
153
+
154
+ writeText ::
155
+ Web.HTML.Navigator.Navigator ->
156
+ String ->
157
+ Effect Unit
158
+ writeText navigator text =
159
+ Effect.Uncurried .runEffectFn1 _writeText
160
+ { navigator
161
+ , text
162
+ }
0 commit comments