Client - improve calendar display on desktop and mobile (wip)

This commit is contained in:
Sam
2021-09-30 21:09:15 +02:00
parent d9790e0465
commit ba0b94de45
10 changed files with 500 additions and 62 deletions

View File

@ -0,0 +1,27 @@
import { Directive, DirectiveBinding } from 'vue'
interface ClickOutsideHTMLElement extends HTMLElement {
clickOutsideEvent?: (event: MouseEvent | TouchEvent) => void
}
export const clickOutsideDirective: Directive = {
mounted: (
element: ClickOutsideHTMLElement,
binding: DirectiveBinding
): void => {
element.clickOutsideEvent = function (event) {
if (!(element === event.target || element.contains(<Node>event.target))) {
binding.value(event)
}
}
document.body.addEventListener('click', element.clickOutsideEvent)
document.body.addEventListener('touchstart', element.clickOutsideEvent)
},
unmounted: function (element: ClickOutsideHTMLElement): void {
if (element.clickOutsideEvent) {
document.body.removeEventListener('click', element.clickOutsideEvent)
document.body.removeEventListener('touchstart', element.clickOutsideEvent)
element.clickOutsideEvent = undefined
}
},
}