Repository URL to install this package:
Version:
0.9.7 ▾
|
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @see https://w3c.github.io/clipboard-apis/#clipboard-event-paste
* @see https://stackoverflow.com/questions/34045777/copy-to-clipboard-using-javascript-in-ios
*/
const IS_BROWSER = typeof document === 'object';
function isOS() {
return (navigator.userAgent.match(/ipad|iphone/i) ? true : false);
}
exports.isOS = isOS;
function copyToClipboard(urlToCopy) {
if (IS_BROWSER) {
const listener = event => {
event.clipboardData.setData('text/plain', urlToCopy);
event.preventDefault();
};
document.addEventListener('copy', listener);
document.execCommand('copy');
document.removeEventListener('copy', listener);
}
}
exports.copyToClipboard = copyToClipboard;
function makeEditable(dom) {
if (IS_BROWSER) {
dom.contentEditable = true;
dom.readonly = false;
}
}
exports.makeEditable = makeEditable;
function createElement(text, scoped) {
console.debug('[Copy] creating element');
if (IS_BROWSER) {
scoped.textArea = document.createElement('textArea');
scoped.textArea.value = text;
scoped.textArea.innerHTML = text;
makeEditable(scoped.textArea);
document.body.appendChild(scoped.textArea);
// window.textarea = scoped.textArea
scoped.actions.push('appended textArea');
}
}
exports.createElement = createElement;
function selectText(scoped) {
console.debug('[Copy] selecting text');
if (IS_BROWSER) {
const range = document.createRange();
range.selectNodeContents(scoped.textArea);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
scoped.textArea.setSelectionRange(0, 999999);
scoped.actions.push('set selection range');
}
}
exports.selectText = selectText;
function executeCopyToClipboard(scoped) {
console.debug('[Copy] executing copy');
if (IS_BROWSER) {
document.execCommand('copy');
document.body.removeChild(scoped.textArea);
}
}
exports.executeCopyToClipboard = executeCopyToClipboard;
function copy(text) {
if (IS_BROWSER) {
const scoped = {
textArea: document.createElement('textArea'),
editableDiv: document.createElement('div'),
actions: [],
};
if (isOS()) {
console.debug('[Copy] iOS');
createElement(text, scoped);
selectText(scoped);
executeCopyToClipboard(scoped);
}
else {
console.debug('[Copy] native export functionality');
copyToClipboard(text);
}
}
}
exports.copy = copy;
//# sourceMappingURL=Copy.js.map