MCPcopy
hub / github.com/directus/directus / beforeMount

Function beforeMount

app/src/directives/tooltip.ts:120–157  ·  view source on GitHub ↗
(element: HTMLElement, binding: DirectiveBinding)

Source from the content-addressed store, hash-verified

118const handlerMap = new WeakMap<HTMLElement, TooltipHandlers>();
119
120function beforeMount(element: HTMLElement, binding: DirectiveBinding): void {
121 if (!binding.value) return;
122
123 const virtualRef = { getBoundingClientRect: () => element.getBoundingClientRect() };
124 const { content, kbd } = resolveTooltipValue(binding.value);
125
126 const buildPayload = (delayDuration: number) => ({
127 content,
128 kbd,
129 side: resolveSide(binding),
130 align: resolveAlign(binding),
131 inverted: !!binding.modifiers['inverted'],
132 monospace: !!binding.modifiers['monospace'],
133 delayDuration,
134 virtualRef,
135 });
136
137 const enter = () => {
138 let delay = 500;
139 if (binding.modifiers['instant']) delay = 0;
140 else if (isDisabled(element)) delay = 125;
141 openTooltip(buildPayload(delay));
142 };
143
144 const focus = () => {
145 openTooltip(buildPayload(binding.modifiers['instant'] ? 0 : 500), true);
146 };
147
148 const leave = closeTooltip;
149 const blur = closeTooltip;
150
151 handlerMap.set(element, { enter, leave, focus, blur });
152 element.addEventListener('mouseenter', enter);
153 element.addEventListener('mouseleave', leave);
154 element.addEventListener('focus', focus);
155 element.addEventListener('blur', blur);
156 element.setAttribute('aria-describedby', TOOLTIP_CONTENT_ID);
157}
158
159function unmounted(element: HTMLElement): void {
160 const handlers = handlerMap.get(element);

Callers 1

updatedFunction · 0.70

Calls 2

resolveTooltipValueFunction · 0.85
setMethod · 0.65

Tested by

no test coverage detected