discourse/app/assets/javascripts/discourse/lib/copy-text.js.es6

35 lines
834 B
JavaScript

/**
* Copy text to the clipboard. Must be called from within a user gesture (Chrome).
*/
export default function(text, element) {
let supported = false;
try {
// Chrome: This only returns true within a user gesture.
// Chrome: queryCommandEnabled() only returns true if a selection is
// present, so we use queryCommandSupported() instead for the fail-fast.
if (document.queryCommandSupported('copy')) {
supported = true;
}
} catch (e) {
// Ignore
}
if (!supported) {
return;
}
let newRange = document.createRange();
newRange.selectNode(element);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(newRange);
try {
if (document.execCommand("copy")) {
return true;
}
} catch (e) {
// Ignore
}
return false;
}