UNPKG

infinity-forge

Version:
122 lines 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.copyToClipboard = copyToClipboard; function deselectCurrent() { var selection = document.getSelection(); if (!selection.rangeCount) { return function () { }; } var active = document.activeElement; var ranges = []; for (var i = 0; i < selection.rangeCount; i++) { ranges.push(selection.getRangeAt(i)); } switch (active.tagName.toUpperCase()) { case 'INPUT': case 'TEXTAREA': active.blur(); break; default: active = null; break; } selection.removeAllRanges(); return function () { selection.type === 'Caret' && selection.removeAllRanges(); if (!selection.rangeCount) { ranges.forEach(function (range) { selection.addRange(range); }); } active && active.focus(); }; } var clipboardToIE11Formatting = { 'text/plain': 'Text', 'text/html': 'Url', default: 'Text', }; var defaultMessage = 'Copy to clipboard: #{key}, Enter'; function format(message) { var copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C'; return message.replace(/#{\s*key\s*}/g, copyKey); } function copyToClipboard(text, options) { if (options === void 0) { options = {}; } var message, reselectPrevious, range, selection, mark, success = false; if (!options) { options = {}; } try { reselectPrevious = deselectCurrent(); range = document.createRange(); selection = document.getSelection(); mark = document.createElement('span'); mark.textContent = text; mark.ariaHidden = 'true'; mark.style.all = 'unset'; mark.style.position = 'fixed'; mark.style.top = 0; mark.style.clip = 'rect(0, 0, 0, 0)'; mark.style.whiteSpace = 'pre'; mark.style.webkitUserSelect = 'text'; mark.style.MozUserSelect = 'text'; mark.style.msUserSelect = 'text'; mark.style.userSelect = 'text'; mark.addEventListener('copy', function (e) { e.stopPropagation(); if (options.format) { e.preventDefault(); if (typeof e.clipboardData === 'undefined') { ; window.clipboardData.clearData(); var format_1 = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting['default']; } else { e.clipboardData.clearData(); e.clipboardData.setData(options.format, text); } } if (options.onCopy) { e.preventDefault(); options.onCopy(e.clipboardData); } }); document.body.appendChild(mark); range.selectNodeContents(mark); selection.addRange(range); var successful = document.execCommand('copy'); if (!successful) { throw new Error('copy command was unsuccessful'); } success = true; } catch (err) { try { ; window.clipboardData.setData(options.format || 'text', text); options.onCopy && options.onCopy(window.clipboardData); success = true; } catch (err) { message = format('message' in options ? options.message : defaultMessage); window.prompt(message, text); } } finally { if (selection) { if (typeof selection.removeRange == 'function') { selection.removeRange(range); } else { selection.removeAllRanges(); } } if (mark) { document.body.removeChild(mark); } reselectPrevious(); } return success; } //# sourceMappingURL=copy-to-clipboard.js.map