X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/9a23dfc07cdc90f1eebbc876312b6b5f82ef508a..73ea36e13ac0f3ac00080b3995ecc7ab71cdbbe2:/app/assets/javascripts/heatmap.js diff --git a/app/assets/javascripts/heatmap.js b/app/assets/javascripts/heatmap.js index 058f71cfe..09013ae5a 100644 --- a/app/assets/javascripts/heatmap.js +++ b/app/assets/javascripts/heatmap.js @@ -12,6 +12,7 @@ document.addEventListener("DOMContentLoaded", () => { } const heatmapData = heatmapElement.dataset.heatmap ? JSON.parse(heatmapElement.dataset.heatmap) : []; + const displayName = heatmapElement.dataset.displayName; const colorScheme = document.documentElement.getAttribute("data-bs-theme") ?? "auto"; const rangeColors = ["#14432a", "#166b34", "#37a446", "#4dd05a"]; const startDate = new Date(Date.now() - (365 * 24 * 60 * 60 * 1000)); @@ -33,7 +34,7 @@ document.addEventListener("DOMContentLoaded", () => { type: "month", gutter: 4, label: { - text: (timestamp) => monthNames[new Date(timestamp).getMonth() + 1], + text: (timestamp) => monthNames[new Date(timestamp).getUTCMonth() + 1], position: "top", textAlign: "middle" }, @@ -68,6 +69,22 @@ document.addEventListener("DOMContentLoaded", () => { text: (date, value) => getTooltipText(date, value) }] ]); + + cal.on("mouseover", (event, timestamp, value) => { + if (!displayName || !value) return; + if (event.target.parentElement.nodeName === "a") return; + + for (const { date, max_id } of heatmapData) { + if (!max_id) continue; + if (timestamp !== Date.parse(date)) continue; + + const params = new URLSearchParams([["before", max_id + 1]]); + const a = document.createElementNS("http://www.w3.org/2000/svg", "a"); + a.setAttribute("href", `/user/${encodeURIComponent(displayName)}/history?${params}`); + $(event.target).wrap(a); + break; + } + }); } function getTooltipText(date, value) {