Confirm.vue 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <template>
  2. <tippy
  3. interactive="true"
  4. :placement="placement"
  5. theme="confirm"
  6. ref="confirm"
  7. trigger="click"
  8. >
  9. <template #trigger>
  10. <div @click.shift.stop="confirm(true)" @click.exact="confirm()">
  11. <slot />
  12. </div>
  13. </template>
  14. <a @click="confirm(null, $event)">
  15. Click to Confirm
  16. </a>
  17. </tippy>
  18. </template>
  19. <script>
  20. export default {
  21. props: {
  22. placement: {
  23. type: String,
  24. default: "top"
  25. }
  26. },
  27. data() {
  28. return {
  29. clickedOnce: false
  30. };
  31. },
  32. methods: {
  33. confirm(confirm, event) {
  34. if (confirm === null) {
  35. /* eslint-disable no-param-reassign */
  36. if (
  37. event &&
  38. event.type === "click" &&
  39. !event.altKey &&
  40. !event.ctrlKey &&
  41. !event.metaKey &&
  42. !event.shiftKey
  43. )
  44. confirm = true;
  45. else confirm = false;
  46. }
  47. if (confirm === false) {
  48. this.clickedOnce = false;
  49. this.$refs.confirm.tip.hide();
  50. } else if (confirm === true || this.clickedOnce === true) {
  51. this.clickedOnce = false;
  52. this.$emit("confirm");
  53. } else this.clickedOnce = true;
  54. }
  55. }
  56. };
  57. </script>