UNPKG

tdesign-vue-next

Version:
1 lines 8.01 kB
{"version":3,"file":"copy-to-clipboard.mjs","sources":["../../../../components/typography/utils/copy-to-clipboard.ts"],"sourcesContent":["interface Options {\n message?: string;\n format?: string; // MIME type\n onCopy?: (clipboardData: object) => void;\n}\n\nconst defaultMessage = 'Copy to clipboard: #{key}, Enter';\n\nconst format = (message: string) => {\n const copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C';\n return message.replace(/#{\\s*key\\s*}/g, copyKey);\n};\n\n// inspired by https://github.com/sudodoki/toggle-selection, refactor to esm\nconst deselectCurrent = () => {\n const selection = document.getSelection();\n if (!selection.rangeCount) {\n return function () {};\n }\n let active = document.activeElement as any;\n\n const ranges: Range[] = [];\n for (let i = 0; i < selection.rangeCount; i++) {\n ranges.push(selection.getRangeAt(i));\n }\n\n const tagName = active.tagName.toUpperCase(); // toUpperCase handles XHTML\n switch (tagName) {\n case 'INPUT':\n case 'TEXTAREA':\n active.blur();\n break;\n\n default:\n active = null;\n break;\n }\n\n selection.removeAllRanges();\n return function () {\n selection.type === 'Caret' && selection.removeAllRanges();\n\n if (!selection.rangeCount) {\n ranges.forEach(function (range) {\n selection.addRange(range);\n });\n }\n\n active && active.focus();\n };\n};\n\nconst copy = (text: string, options?: Options) => {\n let message,\n reselectPrevious,\n range,\n selection,\n mark,\n success = false;\n if (!options) {\n options = {};\n }\n try {\n reselectPrevious = deselectCurrent();\n\n range = document.createRange();\n selection = document.getSelection();\n\n mark = document.createElement('span');\n mark.textContent = text;\n // reset user styles for span element\n mark.style.all = 'unset';\n // prevents scrolling to the end of the page\n mark.style.position = 'fixed';\n mark.style.top = '0';\n mark.style.clip = 'rect(0, 0, 0, 0)';\n // used to preserve spaces and line breaks\n mark.style.whiteSpace = 'pre';\n // do not inherit user-select (it may be `none`)\n mark.style.webkitUserSelect = 'text';\n mark.style.userSelect = 'text';\n mark.addEventListener('copy', function (e) {\n e.stopPropagation();\n if (options.format) {\n e.preventDefault();\n e.clipboardData.clearData();\n e.clipboardData.setData(options.format, text);\n }\n if (options.onCopy) {\n e.preventDefault();\n options.onCopy(e.clipboardData);\n }\n });\n\n document.body.appendChild(mark);\n\n range.selectNodeContents(mark);\n selection.addRange(range);\n\n const successful = document.execCommand('copy');\n if (!successful) {\n throw new Error('copy command was unsuccessful');\n }\n success = true;\n } catch (err) {\n try {\n (window as any).clipboardData.setData(options.format || 'text', text);\n options.onCopy && options.onCopy((window as any).clipboardData);\n success = true;\n } catch (err) {\n message = format('message' in options ? options.message : defaultMessage);\n window.prompt(message, text);\n }\n } finally {\n if (selection) {\n if (typeof selection.removeRange == 'function') {\n selection.removeRange(range);\n } else {\n selection.removeAllRanges();\n }\n }\n\n if (mark) {\n document.body.removeChild(mark);\n }\n reselectPrevious();\n }\n\n return success;\n};\n\nexport default copy;\n"],"names":["defaultMessage","format","message","copyKey","test","navigator","userAgent","replace","deselectCurrent","selection","document","getSelection","rangeCount","active","activeElement","ranges","i","push","getRangeAt","tagName","toUpperCase","blur","removeAllRanges","type","forEach","range","addRange","focus","copy","text","options","reselectPrevious","mark","success","createRange","createElement","textContent","style","all","position","top","clip","whiteSpace","webkitUserSelect","userSelect","addEventListener","e","stopPropagation","preventDefault","clipboardData","clearData","setData","onCopy","body","appendChild","selectNodeContents","successful","execCommand","Error","err","window","prompt","removeRange","removeChild"],"mappings":"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"}