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
(() => {
const postHookOp = async (project, sample, op, btn) => {
btn.disabled = true;
const params = new URLSearchParams({ name: sample, op });
try {
const resp = await fetch(`/project/${project}/hook?${params.toString()}`, {
method: "POST",
headers: { Accept: "application/json" },
});
if (!resp.ok) {
const detail = await resp.text();
window.alert(`Hook ${op} failed (${resp.status}): ${detail}`);
btn.disabled = false;
return;
}
window.location.reload();
} catch (err) {
window.alert(`Hook ${op} failed: ${err}`);
btn.disabled = false;
}
};
const handleClick = async (event) => {
const uninstallBtn = event.target.closest(".hook-toggle");
if (uninstallBtn) {
event.preventDefault();
const project = uninstallBtn.dataset.project;
const sample = uninstallBtn.dataset.sample;
const op = uninstallBtn.dataset.op;
if (!project || !sample || !op) {
return;
}
await postHookOp(project, sample, op, uninstallBtn);
return;
}
const installBtn = event.target.closest(".hook-install-btn");
if (!installBtn) {
return;
}
event.preventDefault();
const project = installBtn.dataset.project;
const op = installBtn.dataset.op;
const select = document.getElementById("hook-install-select");
const sample = select instanceof HTMLSelectElement ? select.value : "";
if (!project || !sample || !op) {
return;
}
await postHookOp(project, sample, op, installBtn);
};
document.addEventListener("click", handleClick);
})();