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
61
62
63
64
(function () {
const root = document.getElementById("project-git-config");
if (!root) return;
const base = root.dataset.setUrl;
if (!base) return;
function showErr(msg) {
try {
alert(msg);
} catch (e) {
/* ignore */
}
}
function onChange(ev) {
const el = ev.target;
const key = el.dataset.configKey;
if (!key) return;
const value = el.value;
const url =
base + "&key=" + encodeURIComponent(key) + "&value=" + encodeURIComponent(value);
fetch(url, {
method: "POST",
credentials: "same-origin",
headers: { Accept: "application/json" },
})
.then(async (r) => {
if (!r.ok) {
let detail = "Save failed";
try {
const j = await r.json();
if (typeof j.detail === "string") detail = j.detail;
else if (j.detail !== undefined) detail = JSON.stringify(j.detail);
} catch (e) {
try {
detail = await r.text();
} catch (e2) {
/* ignore */
}
}
throw new Error(detail);
}
return r.json();
})
.catch((err) => showErr(err.message || String(err)));
}
root.querySelectorAll("[data-config-key]").forEach((el) => {
el.addEventListener("change", onChange);
});
root.querySelectorAll("[data-gitconfig-section]").forEach((section) => {
const btn = section.querySelector(".gitconfig-section-toggle");
const icon = section.querySelector(".gitconfig-toggle-icon");
if (!btn) return;
btn.addEventListener("click", (e) => {
e.preventDefault();
const hasCollapsed = section.classList.toggle("collapsed");
btn.setAttribute("aria-expanded", hasCollapsed ? "false" : "true");
if (icon) icon.textContent = hasCollapsed ? "+" : "\u2212";
});
});
})();