diff --git a/kubernetes/gitea/landingpage.html b/kubernetes/gitea/landingpage.html index 2f94fb2..2885289 100644 --- a/kubernetes/gitea/landingpage.html +++ b/kubernetes/gitea/landingpage.html @@ -46,6 +46,6 @@ window.GITEA_SUB_URL = "{{AppSubUrl}}"; - - + + {{template "base/footer" .}} diff --git a/kubernetes/gitea/landingpage.js b/kubernetes/gitea/landingpage.js index c6d22ad..1373ade 100644 --- a/kubernetes/gitea/landingpage.js +++ b/kubernetes/gitea/landingpage.js @@ -1,12 +1,18 @@ +const baseUrl = window.GITEA_SUB_URL || ""; const httpService = { - baseUrl: window.GITEA_SUB_URL || "", async fetchRss() { - const resp = await fetch(`${this.baseUrl}/alex.rss`); + const resp = await fetch(`${baseUrl}/alex.rss`); if (!resp.ok) throw new Error(`HTTP ${resp.status}`); const text = await resp.text(); return new DOMParser().parseFromString(text, "application/xml"); }, + + async fetchHeatmap(username = "alex") { + const resp = await fetch(`${baseUrl}/api/v1/users/${username}/heatmap`); + if (!resp.ok) throw new Error(`HTTP ${resp.status}`); + return resp.json(); // [{timestamp: unix_seconds, contributions: number}] + }, }; const dataDomain = { @@ -94,7 +100,7 @@ const dataDomain = { : repoName, pubDate: item.querySelector("pubDate")?.textContent || "", firstCommit: - this.parseCommits( + dataDomain.parseCommits( item.querySelector("description")?.textContent || "", )[0] || null, }); @@ -120,14 +126,14 @@ const dataDomain = { .slice(0, limit) .map((item) => { const rawTitle = item.querySelector("title")?.textContent || ""; - const titleText = this.titlePlainText(rawTitle); + const titleText = dataDomain.titlePlainText(rawTitle); return { - titleHtmlSafe: this.safeTitleHtml(rawTitle), + titleHtmlSafe: dataDomain.safeTitleHtml(rawTitle), titleText, link: item.querySelector("link")?.textContent || "#", pubDate: item.querySelector("pubDate")?.textContent || "", - icon: this.activityIcon(titleText), - commits: this.parseCommits( + icon: dataDomain.activityIcon(titleText), + commits: dataDomain.parseCommits( item.querySelector("description")?.textContent || "", ).slice(0, 3), }; @@ -221,11 +227,25 @@ const uiRendering = { } }, - activityMapRender(xmlDoc) { + async activityMapRender() { const container = document.getElementById("activity-heatmap"); if (!container) return; - const counts = dataDomain.parseAllActivityDates(xmlDoc); + let heatmapData; + try { + heatmapData = await httpService.fetchHeatmap(); + } catch (e) { + container.innerHTML = `