nova-ui/utilities/copyToClipboard.ts
2022-12-04 07:02:30 +01:00

49 lines
1.4 KiB
TypeScript

export const copyToClipboard = (value: string) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let textArea: any, oldContentEditable: any, oldReadOnly: any
function isOS() {
return navigator.userAgent.match(/ipad|iphone/i)
}
function createTextArea(text: string) {
textArea = document.createElement('textArea')
oldContentEditable = textArea.contentEditable
oldReadOnly = textArea.readOnly
textArea.contentEditable = true
textArea.readOnly = false
textArea.value = text
textArea.style.position = 'absolute'
textArea.style.left = '-9999px'
document.body.appendChild(textArea)
}
function selectText() {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
let range: any, selection: any
if (isOS() != null) {
range = document.createRange()
range.selectNodeContents(textArea)
selection = window.getSelection()
selection.removeAllRanges()
selection.addRange(range)
// eslint-disable-next-line @typescript-eslint/no-magic-numbers
textArea.setSelectionRange(0, 999999)
textArea.contentEditable = oldContentEditable
textArea.readOnly = oldReadOnly
} else {
textArea.select()
}
}
function copyClipboard() {
document.execCommand('copy')
document.body.removeChild(textArea)
}
createTextArea(value)
selectText()
copyClipboard()
}