From e02dafe98fc61cde19c8a6090302e8480f15821d Mon Sep 17 00:00:00 2001 From: liushuyu Date: Sat, 5 Feb 2022 04:31:09 -0700 Subject: [PATCH] site: add github style hovercards --- site/config.toml | 4 ++ site/layouts/shortcodes/gh-hovercard.html | 1 + site/themes/shared-bulma-theme | 2 +- src/js/github.js | 59 +++++++++++++++++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 site/layouts/shortcodes/gh-hovercard.html create mode 100644 src/js/github.js diff --git a/site/config.toml b/site/config.toml index 979446ff..881f8ae2 100644 --- a/site/config.toml +++ b/site/config.toml @@ -79,3 +79,7 @@ section = [ "HTML" ] [markup.goldmark] [markup.goldmark.renderer] unsafe = true + +[security] + [security.funcs] + getenv = ['^HUGO_', 'TENANT'] diff --git a/site/layouts/shortcodes/gh-hovercard.html b/site/layouts/shortcodes/gh-hovercard.html new file mode 100644 index 00000000..e8c3aaba --- /dev/null +++ b/site/layouts/shortcodes/gh-hovercard.html @@ -0,0 +1 @@ +{{ .Get 1 | markdownify | safeHTML }} diff --git a/site/themes/shared-bulma-theme b/site/themes/shared-bulma-theme index f978d344..56aea091 160000 --- a/site/themes/shared-bulma-theme +++ b/site/themes/shared-bulma-theme @@ -1 +1 @@ -Subproject commit f978d34421a7246b6a5b997bf011f8ca8c75da44 +Subproject commit 56aea091ab4e1ac7dc2619218183b4bb9a336fbc diff --git a/src/js/github.js b/src/js/github.js new file mode 100644 index 00000000..d3a7b975 --- /dev/null +++ b/src/js/github.js @@ -0,0 +1,59 @@ +function fetchPR(tenant, pr) { + return fetch(`https://api.github.com/repos/${tenant}-emu/${tenant}/pulls/${pr}`, { + headers: { + Accept: 'application/vnd.github.v3+json', + 'X-Requested-With': 'XMLHttpRequest', + }, + method: 'GET', + }).then(function (response) { + return response.json(); + }); +} + +function buildHovercard(data) { + const elem = document.getElementById('gh-template'); + const title = elem.getElementsByClassName('gh-hover-title')[0]; + title.firstChild.innerText = data.title; + title.href = data.html_url; + const mergedAt = data.merged_at; + let state = 'open'; + let mergedDate = ''; + if (mergedAt) { + // eslint-disable-next-line no-undef + let parsedDate = moment.utc(mergedAt); + mergedDate = parsedDate.fromNow(); + state = 'merged'; + elem.getElementsByClassName('gh-hover-date')[0].innerText = `Merged ${mergedDate}.`; + } else if (data.state === 'closed') { + state = 'closed'; + } + elem.getElementsByClassName('gh-hover-icon')[0].classList.add(state); + elem.getElementsByClassName('gh-hover-number')[0].innerText = `#${data.number}`; + return elem.innerHTML; +} + +function createHovercard(tenant, pr) { + return fetchPR(tenant, pr).then(function (response) { + return buildHovercard(response); + }); +} + +function showHovercard(instance, tenant) { + if (instance._loading) return; + if (instance._cached) { + instance.setContent(instance._cached); + return; + } + instance._loading = true; + const pr_number = instance.reference.getAttribute('data-gh-pr'); + createHovercard(tenant, pr_number).then(function(content) { + instance._cached = content; + instance.setContent(content); + instance._loading = false; + }).catch(function(error) { + instance.setContent('Error fetching data from GitHub: ' + error); + instance._loading = false; + }); +} + +window.showHovercard = showHovercard;