Skip to content

Commit c56a64f

Browse files
committed
write text to clipboard
1 parent 73a954c commit c56a64f

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

src/Clipboard.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"use strict";
2+
3+
exports._writeText = function _writeText({ navigator, text }) {
4+
navigator.clipboard.writeText(text);
5+
}

src/Clipboard.purs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,21 @@ module Ocelot.Clipboard
77

88
import Prelude
99

10+
import Data.Maybe (Maybe(..))
11+
import Effect (Effect)
1012
import Effect.Aff as Effect.Aff
1113
import Effect.Aff.Class (class MonadAff)
14+
import Effect.Uncurried as Effect.Uncurried
1215
import Halogen as Halogen
1316
import Halogen.HTML as Halogen.HTML
1417
import Halogen.HTML.Events as Halogen.HTML.Events
1518
import Halogen.HTML.Properties as Halogen.HTML.Propetires
1619
import Ocelot.Block.Button as Ocelot.Block.Button
1720
import Ocelot.Block.Icon as Ocelot.Block.Icon
1821
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
1925

2026
type Slot
2127
= Halogen.Slot Query Output
@@ -85,12 +91,23 @@ copy ::
8591
MonadAff m =>
8692
ComponentM m Unit
8793
copy = do
94+
input <- Halogen.gets _.input
95+
Halogen.liftEffect
96+
$ copyToClipboard input.text
8897
Halogen.modify_ _ { copied = true }
8998
void $ Halogen.fork do
9099
Halogen.liftAff
91100
$ Effect.Aff.delay (Effect.Aff.Milliseconds 1000.0)
92101
Halogen.modify_ _ { copied = false }
93102

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+
94111
receive ::
95112
forall m.
96113
Input ->
@@ -126,3 +143,20 @@ renderDone =
126143
[ Ocelot.HTML.Properties.css "ml-2" ]
127144
[ Halogen.HTML.text "Copied" ]
128145
]
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

Comments
 (0)