Confirm.vue 1.1 KB

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