Spaces:
Running
Running
File size: 3,297 Bytes
dc5fa28 0665cbb dc5fa28 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | // Code4Scene page behaviour: chart tooltips, the Pareto view toggle, sortable leaderboards, copying the BibTeX.
(function () {
// tooltips: any element with data-tip='{"t": title, "r": [[label, value], ...]}' or plain text
var tip = document.createElement("div"); tip.className = "tip"; document.body.appendChild(tip);
function show(el, e) {
var raw = el.getAttribute("data-tip"), html;
try { var d = JSON.parse(raw); html = "<b>" + d.t + "</b>" + (d.r || []).map(function (r) { return r[0] + ": " + r[1]; }).join("<br>"); }
catch (err) { html = raw; }
tip.innerHTML = html; tip.classList.add("on"); move(e);
}
function move(e) { tip.style.left = Math.min(innerWidth - 160, Math.max(160, e.clientX)) + "px"; tip.style.top = e.clientY + "px"; }
document.addEventListener("mouseover", function (e) { var el = e.target.closest("[data-tip]"); if (el) show(el, e); });
document.addEventListener("mousemove", function (e) { if (tip.classList.contains("on")) move(e); });
document.addEventListener("mouseout", function (e) { var el = e.target.closest("[data-tip]"); if (el && !el.contains(e.relatedTarget)) tip.classList.remove("on"); });
// chart view toggles: <div class="seg" data-for="id"><button data-view="x">; the chart's groups carry data-view="x"
document.querySelectorAll(".seg[data-for]").forEach(function (seg) {
var chart = document.getElementById(seg.getAttribute("data-for"));
seg.querySelectorAll("button").forEach(function (b) {
b.addEventListener("click", function () {
seg.querySelectorAll("button").forEach(function (x) { x.classList.toggle("on", x === b); });
chart.querySelectorAll("[data-view]").forEach(function (g) {
if (seg.contains(g)) return; // the tab buttons carry data-view too
g.style.display = g.getAttribute("data-view") === b.getAttribute("data-view") ? "" : "none"; });
});
});
});
// sortable leaderboards: th[data-k] sorts rows by td[data-v] in that column; the rank column follows the order
document.querySelectorAll("table.board").forEach(function (tb) {
var ths = [].slice.call(tb.querySelectorAll("th"));
ths.forEach(function (th, ci) {
if (!th.hasAttribute("data-k")) { th.classList.add("nosort"); return; }
th.addEventListener("click", function () {
var asc = th.classList.contains("sorted") ? !th.classList.contains("asc") : th.getAttribute("data-best") === "low";
ths.forEach(function (x) { x.classList.remove("sorted", "asc"); }); th.classList.add("sorted"); if (asc) th.classList.add("asc");
var body = tb.tBodies[0], rows = [].slice.call(body.rows);
rows.sort(function (a, b) { var x = +a.cells[ci].getAttribute("data-v"), y = +b.cells[ci].getAttribute("data-v"); return asc ? x - y : y - x; });
rows.forEach(function (r, i) { r.cells[0].textContent = i + 1; body.appendChild(r); });
});
});
});
var cb = document.getElementById("copy-btn");
if (cb) cb.addEventListener("click", function () {
navigator.clipboard.writeText(document.getElementById("bibtex-text").textContent).then(function () {
cb.textContent = "Copied"; cb.classList.add("copied"); setTimeout(function () { cb.textContent = "Copy"; cb.classList.remove("copied"); }, 1600);
});
});
})();
|