@uppy/dashboard
Version:
Universal UI plugin for Uppy.
51 lines (50 loc) • 1.47 kB
JavaScript
/**
* Copies text to clipboard by creating an almost invisible textarea,
* adding text there, then running execCommand('copy').
* Falls back to prompt() when the easy way fails (hello, Safari!)
* From http://stackoverflow.com/a/30810322
*
* @param {string} textToCopy
* @param {string} fallbackString
* @returns {Promise}
*/
export default function copyToClipboard(textToCopy, fallbackString) {
if (fallbackString === void 0) {
fallbackString = 'Copy the URL below';
}
return new Promise(resolve => {
const textArea = document.createElement('textarea');
textArea.setAttribute('style', {
position: 'fixed',
top: 0,
left: 0,
width: '2em',
height: '2em',
padding: 0,
border: 'none',
outline: 'none',
boxShadow: 'none',
background: 'transparent'
});
textArea.value = textToCopy;
document.body.appendChild(textArea);
textArea.select();
const magicCopyFailed = cause => {
document.body.removeChild(textArea);
// eslint-disable-next-line no-alert
window.prompt(fallbackString, textToCopy);
resolve();
};
try {
const successful = document.execCommand('copy');
if (!successful) {
return magicCopyFailed('copy command unavailable');
}
document.body.removeChild(textArea);
return resolve();
} catch (err) {
document.body.removeChild(textArea);
return magicCopyFailed(err);
}
});
}