app/tooltips.mjs (41 lines of code) (raw):
import { __ } from "util";
/* global tippy */
export function set($el, content) {
if ($el._tippy) {
$el._tippy.destroy();
}
if (content.length === 0) return;
tippy($el, {
delay: 0,
duration: 0,
offset: [0, 4],
arrow: false,
theme: "light",
}).setContent(content);
}
export function setFromTitle($el) {
set($el, $el.title);
$el.title = "";
}
export function initUI() {
for (const $el of __("*[title]")) {
setFromTitle($el);
}
const observer = new MutationObserver((mutationList) => {
for (const mutation of mutationList) {
// set tooltips on elements as they are added to dom
for (const $rootEl of mutation.addedNodes) {
if ($rootEl.nodeType === Node.ELEMENT_NODE) {
for (const $el of __($rootEl, "*[title]")) {
setFromTitle($el);
}
}
}
}
});
observer.observe(document.documentElement, {
attributes: false,
childList: true,
subtree: true,
});
}