32 lines
910 B
TypeScript
32 lines
910 B
TypeScript
|
export function updateTooltips() {
|
||
|
console.debug('Updating tooltips');
|
||
|
const elements = document.querySelectorAll<HTMLElement>('.tip, .dropdown');
|
||
|
|
||
|
// Calculate max potential displacement
|
||
|
let max = 0;
|
||
|
elements.forEach(el => {
|
||
|
const box = el.getBoundingClientRect();
|
||
|
if (max < box.height) max = box.height;
|
||
|
});
|
||
|
|
||
|
// Prevent displacement
|
||
|
elements.forEach(el => {
|
||
|
if (!el.dataset.tooltipSetup) {
|
||
|
el.dataset.tooltipSetup = 'true';
|
||
|
const box = el.getBoundingClientRect();
|
||
|
if (box.bottom >= document.body.clientHeight - (max + 32)) {
|
||
|
el.classList.add('top');
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
document.addEventListener('DOMContentLoaded', () => {
|
||
|
window.addEventListener('popstate', () => {
|
||
|
updateTooltips();
|
||
|
});
|
||
|
window.requestAnimationFrame(() => {
|
||
|
updateTooltips();
|
||
|
});
|
||
|
});
|