Unbind tooltip on change to falsey value

This commit is contained in:
rijkvanzanten
2020-08-06 15:40:34 -04:00
parent 1edc132651
commit 4bd4e4ed1b

View File

@@ -4,20 +4,31 @@ import { nanoid } from 'nanoid';
const handlers: Record<string, () => void> = {};
function bind(element: HTMLElement, binding: DirectiveBinding) {
element.dataset.tooltip = nanoid();
handlers[element.dataset.tooltip] = createEnterHandler(element, binding);
element.addEventListener('mouseenter', handlers[element.dataset.tooltip]);
element.addEventListener('mouseleave', onLeaveTooltip);
}
function unbind(element: HTMLElement) {
element.removeEventListener('mouseenter', handlers[element.dataset.tooltip as string]);
element.removeEventListener('mouseleave', onLeaveTooltip);
clearTimeout(tooltipTimer);
const tooltip = getTooltip();
tooltip.classList.remove('visible');
delete handlers[element.dataset.tooltip as string];
}
const Tooltip: DirectiveOptions = {
bind(element, binding) {
element.dataset.tooltip = nanoid();
handlers[element.dataset.tooltip] = createEnterHandler(element, binding);
element.addEventListener('mouseenter', handlers[element.dataset.tooltip]);
element.addEventListener('mouseleave', onLeaveTooltip);
},
unbind(element) {
element.removeEventListener('mouseenter', handlers[element.dataset.tooltip as string]);
element.removeEventListener('mouseleave', onLeaveTooltip);
clearTimeout(tooltipTimer);
const tooltip = getTooltip();
tooltip.classList.remove('visible');
delete handlers[element.dataset.tooltip as string];
bind, unbind,
update(element, binding) {
if (binding.value && !binding.oldValue) {
bind(element, binding);
} else if (!binding.value && binding.oldValue) {
unbind(element);
}
}
};