mirror of
https://github.com/yuzu-emu/yuzu-emu.github.io.git
synced 2025-06-08 13:27:25 +00:00
site: add github style hovercards
This commit is contained in:
parent
51d29e7f68
commit
e02dafe98f
|
@ -79,3 +79,7 @@ section = [ "HTML" ]
|
||||||
[markup.goldmark]
|
[markup.goldmark]
|
||||||
[markup.goldmark.renderer]
|
[markup.goldmark.renderer]
|
||||||
unsafe = true
|
unsafe = true
|
||||||
|
|
||||||
|
[security]
|
||||||
|
[security.funcs]
|
||||||
|
getenv = ['^HUGO_', 'TENANT']
|
||||||
|
|
1
site/layouts/shortcodes/gh-hovercard.html
Normal file
1
site/layouts/shortcodes/gh-hovercard.html
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<a class="gh-hover" href="https://github.com/yuzu-emu/yuzu/pull/{{ .Get 0 }}" data-gh-pr="{{ .Get 0 }}">{{ .Get 1 | markdownify | safeHTML }}</a>
|
|
@ -1 +1 @@
|
||||||
Subproject commit f978d34421a7246b6a5b997bf011f8ca8c75da44
|
Subproject commit 56aea091ab4e1ac7dc2619218183b4bb9a336fbc
|
59
src/js/github.js
Normal file
59
src/js/github.js
Normal file
|
@ -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;
|
Loading…
Reference in a new issue