blob: 28b837338ec8f2873ece434d346eb25500a8f75b (
plain)
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
52
53
54
55
56
57
58
59
60
|
// Progressive enhancement for two bits of data GitHub itself loads lazily:
// the branch/tag dropdown and the latest-commit bar above a file listing.
// Both degrade gracefully without JS: the button's command/commandfor still
// opens the (empty) dialog natively; the commit placeholder just never fills
// in.
document.addEventListener("DOMContentLoaded", () => {
const dialog = document.querySelector(".ref-selector-menu");
if (dialog) {
const list = dialog.querySelector(".ref-selector-list");
const { owner, repo } = dialog.dataset;
const cache = {};
async function load(type) {
if (Object.prototype.hasOwnProperty.call(cache, type)) {
list.innerHTML = cache[type];
return;
}
list.textContent = "Loading…";
try {
const res = await fetch(`/api/${owner}/${repo}/refs/${type}`);
const html = res.ok ? await res.text() : "";
cache[type] = html || "Failed to load.";
list.innerHTML = cache[type];
} catch {
list.textContent = "Failed to load.";
}
}
let opened = false;
dialog.addEventListener("toggle", () => {
if (dialog.open && !opened) {
opened = true;
load("branches");
}
});
for (const tab of dialog.querySelectorAll("[data-ref-type]")) {
tab.addEventListener("click", () => {
for (const other of dialog.querySelectorAll("[data-ref-type]")) {
other.classList.toggle("active", other === tab);
}
load(tab.dataset.refType);
});
}
}
const commitPlaceholder = document.querySelector(".latest-commit-placeholder");
if (commitPlaceholder) {
fetch(commitPlaceholder.dataset.src)
.then((res) => (res.ok ? res.text() : ""))
.then((html) => {
if (html.trim()) {
commitPlaceholder.outerHTML = html;
} else {
commitPlaceholder.remove();
}
})
.catch(() => commitPlaceholder.remove());
}
});
|