| // Inspired by https://github.com/Inndy/vue-clipboard2 |
| const Clipboard = require('clipboard') |
| if (!Clipboard) { |
| throw new Error('you shold 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 |
| } |
| } |
| } |