clipboard.js 1.8 KB
// Inspired by https://github.com/Inndy/vue-clipboard2
const Clipboard = require('clipboard')
if (!Clipboard) {
    throw new Error('you should npm install `clipboard` --save at first ')
}

export default {
    bind(el, binding) {
        if (binding.arg === 'success') {
            el._v_clipboard_success = binding.value
        } else if (binding.arg === 'error') {
            el._v_clipboard_error = binding.value
        } else {
            const clipboard = new Clipboard(el, {
                text() {
                    return binding.value
                },
                action() {
                    return binding.arg === 'cut' ? 'cut' : 'copy'
                }
            })
            clipboard.on('success', e => {
                const callback = el._v_clipboard_success
                callback && callback(e) // eslint-disable-line
            })
            clipboard.on('error', e => {
                const callback = el._v_clipboard_error
                callback && callback(e) // eslint-disable-line
            })
            el._v_clipboard = clipboard
        }
    },
    update(el, binding) {
        if (binding.arg === 'success') {
            el._v_clipboard_success = binding.value
        } else if (binding.arg === 'error') {
            el._v_clipboard_error = binding.value
        } else {
            el._v_clipboard.text = function () {
                return binding.value
            }
            el._v_clipboard.action = function () {
                return binding.arg === 'cut' ? 'cut' : 'copy'
            }
        }
    },
    unbind(el, binding) {
        if (binding.arg === 'success') {
            delete el._v_clipboard_success
        } else if (binding.arg === 'error') {
            delete el._v_clipboard_error
        } else {
            el._v_clipboard.destroy()
            delete el._v_clipboard
        }
    }
}