@@ -2,7 +2,7 @@ import React from 'react';
2
2
3
3
import { toType } from './../helpers/util' ;
4
4
5
- //clibboard icon
5
+ //clipboard icon
6
6
import { Clippy } from './icons' ;
7
7
8
8
//theme
@@ -25,21 +25,33 @@ export default class extends React.PureComponent {
25
25
}
26
26
}
27
27
28
+ copyToClipboardFallback = ( textToCopy ) => {
29
+ const textArea = document . createElement ( 'textarea' ) ;
30
+ textArea . value = textToCopy ;
31
+ document . body . appendChild ( textArea ) ;
32
+ textArea . select ( ) ;
33
+ document . execCommand ( 'copy' ) ;
34
+ document . body . removeChild ( textArea ) ;
35
+ }
36
+
28
37
handleCopy = ( ) => {
29
- const container = document . createElement ( 'textarea' ) ;
30
38
const { clickCallback, src, namespace } = this . props ;
31
39
32
- container . innerHTML = JSON . stringify (
40
+ const textToCopy = JSON . stringify (
33
41
this . clipboardValue ( src ) ,
34
42
null ,
35
43
' '
36
44
) ;
37
45
38
- document . body . appendChild ( container ) ;
39
- container . select ( ) ;
40
- document . execCommand ( 'copy' ) ;
41
-
42
- document . body . removeChild ( container ) ;
46
+ if ( navigator . clipboard ) {
47
+ navigator . clipboard . writeText ( textToCopy ) . catch ( ( ) => {
48
+ // Fallback for non-secure contexts (i.e. http)
49
+ this . copyToClipboardFallback ( textToCopy ) ;
50
+ } ) ;
51
+ } else {
52
+ // Fallback for old browsers and test environments
53
+ this . copyToClipboardFallback ( textToCopy ) ;
54
+ } ;
43
55
44
56
this . copiedTimer = setTimeout ( ( ) => {
45
57
this . setState ( {
0 commit comments