Change folder hierarchy
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
// glossary — hover tooltip for .gls-sym usages (prose links and MathJax \class nodes)
|
||||
(function () {
|
||||
var tip = null;
|
||||
|
||||
function ensureTip() {
|
||||
if (tip === null) {
|
||||
tip = document.createElement("div");
|
||||
tip.className = "gls-float";
|
||||
tip.style.display = "none";
|
||||
document.body.appendChild(tip);
|
||||
}
|
||||
return tip;
|
||||
}
|
||||
|
||||
function keyOf(el) {
|
||||
if (el.dataset && el.dataset.glsKey) return el.dataset.glsKey;
|
||||
for (var i = 0; i < el.classList.length; i++) {
|
||||
var c = el.classList[i];
|
||||
if (c.indexOf("gls-key-") === 0) return c.slice(8);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function show(target) {
|
||||
var key = keyOf(target);
|
||||
if (!key) return;
|
||||
var entry = document.getElementById("gls-" + key);
|
||||
var t = ensureTip();
|
||||
if (entry) {
|
||||
// for a main entry, don't drag every property into the popup
|
||||
var node = entry.cloneNode(true);
|
||||
node.querySelectorAll(".gls-prop-entry").forEach(function (n) { n.remove(); });
|
||||
t.innerHTML = node.innerHTML;
|
||||
} else if (window.__glsData && window.__glsData[key]) {
|
||||
// entry lives on another page (book chapters render separately)
|
||||
t.innerHTML = window.__glsData[key];
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
t.style.display = "block";
|
||||
if (window.MathJax && window.MathJax.typesetPromise) {
|
||||
window.MathJax.typesetPromise([t]).catch(function () {});
|
||||
}
|
||||
var r = target.getBoundingClientRect();
|
||||
var x = r.left + window.scrollX;
|
||||
var y = r.bottom + window.scrollY + 6;
|
||||
// keep it on screen horizontally
|
||||
var w = t.offsetWidth;
|
||||
var maxX = window.scrollX + document.documentElement.clientWidth - w - 12;
|
||||
t.style.left = Math.max(window.scrollX + 8, Math.min(x, maxX)) + "px";
|
||||
t.style.top = y + "px";
|
||||
}
|
||||
|
||||
function hide() {
|
||||
if (tip !== null) tip.style.display = "none";
|
||||
}
|
||||
|
||||
document.addEventListener("mouseover", function (e) {
|
||||
var el = e.target.closest ? e.target.closest(".gls-sym") : null;
|
||||
if (el) show(el);
|
||||
});
|
||||
document.addEventListener("mouseout", function (e) {
|
||||
var el = e.target.closest ? e.target.closest(".gls-sym") : null;
|
||||
if (el) hide();
|
||||
});
|
||||
document.addEventListener("click", hide);
|
||||
window.addEventListener("scroll", hide, { passive: true });
|
||||
})();
|
||||
Reference in New Issue
Block a user