|
@@ -0,0 +1,47 @@
|
|
|
+import { ref } from 'vue'
|
|
|
+
|
|
|
+const useClipboard = () => {
|
|
|
+ const copied = ref(false)
|
|
|
+ const text = ref('')
|
|
|
+ const isSupported = ref(false)
|
|
|
+
|
|
|
+ if (!navigator.clipboard && !document.execCommand) {
|
|
|
+ isSupported.value = false
|
|
|
+ } else {
|
|
|
+ isSupported.value = true
|
|
|
+ }
|
|
|
+
|
|
|
+ const copy = (str: string) => {
|
|
|
+ if (navigator.clipboard) {
|
|
|
+ navigator.clipboard.writeText(str).then(() => {
|
|
|
+ text.value = str
|
|
|
+ copied.value = true
|
|
|
+ resetCopied()
|
|
|
+ })
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const input = document.createElement('input')
|
|
|
+ input.setAttribute('readonly', 'readonly')
|
|
|
+ input.setAttribute('value', str)
|
|
|
+ document.body.appendChild(input)
|
|
|
+ input.select()
|
|
|
+ input.setSelectionRange(0, 9999)
|
|
|
+ if (document.execCommand('copy')) {
|
|
|
+ text.value = str
|
|
|
+ document.execCommand('copy')
|
|
|
+ copied.value = true
|
|
|
+ resetCopied()
|
|
|
+ }
|
|
|
+ document.body.removeChild(input)
|
|
|
+ }
|
|
|
+
|
|
|
+ const resetCopied = () => {
|
|
|
+ setTimeout(() => {
|
|
|
+ copied.value = false
|
|
|
+ }, 1500)
|
|
|
+ }
|
|
|
+
|
|
|
+ return { copy, text, copied, isSupported }
|
|
|
+}
|
|
|
+
|
|
|
+export { useClipboard }
|