-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
12ac6ba
commit b5a0a95
Showing
2 changed files
with
91 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// From: https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript | ||
export function copyTextToClipboard (text) { | ||
const textArea = document.createElement('textarea') | ||
|
||
// | ||
// *** This styling is an extra step which is likely not required. *** | ||
// | ||
// Why is it here? To ensure: | ||
// 1. the element is able to have focus and selection. | ||
// 2. if element was to flash render it has minimal visual impact. | ||
// 3. less flakyness with selection and copying which **might** occur if | ||
// the textarea element is not visible. | ||
// | ||
// The likelihood is the element won't even render, not even a flash, | ||
// so some of these are just precautions. However in IE the element | ||
// is visible whilst the popup box asking the user for permission for | ||
// the web page to copy to the clipboard. | ||
// | ||
|
||
// Place in top-left corner of screen regardless of scroll position. | ||
textArea.style.position = 'fixed' | ||
textArea.style.top = 0 | ||
textArea.style.left = 0 | ||
|
||
// Ensure it has a small width and height. Setting to 1px / 1em | ||
// doesn't work as this gives a negative w/h on some browsers. | ||
textArea.style.width = '2em' | ||
textArea.style.height = '2em' | ||
|
||
// We don't need padding, reducing the size if it does flash render. | ||
textArea.style.padding = 0 | ||
|
||
// Clean up any borders. | ||
textArea.style.border = 'none' | ||
textArea.style.outline = 'none' | ||
textArea.style.boxShadow = 'none' | ||
|
||
// Avoid flash of white box if rendered for any reason. | ||
textArea.style.background = 'transparent' | ||
|
||
textArea.value = text | ||
|
||
document.body.appendChild(textArea) | ||
|
||
textArea.select() | ||
|
||
try { | ||
document.execCommand('copy') | ||
} catch (err) { | ||
console.error('Unable to copy text') | ||
} | ||
|
||
document.body.removeChild(textArea) | ||
} |