-
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
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
-
83
-
84
// Copyright 2026 Shota FUJI <pockawoooh@gmail.com>
// SPDX-License-Identifier: MIT
function setupTabWidthSelector() {
const LOCAL_STORAGE_KEY = "legit_tab_width";
function isValidTabWidth(width) {
if (typeof width !== "string") {
return false;
}
const n = parseInt(width, 10);
return Number.isFinite(n) && n > 0;
}
function applyTabWidth(width) {
localStorage.setItem(LOCAL_STORAGE_KEY, width);
document.body.style.tabSize = width;
}
const saved = localStorage.getItem(LOCAL_STORAGE_KEY);
const value = isValidTabWidth(saved) ? saved : "4";
applyTabWidth(value);
const selector = document.getElementById("global-tab-width");
if (selector) {
selector.value = value;
selector.addEventListener("change", event => {
if (!isValidTabWidth(event.currentTarget.value)) {
return;
}
applyTabWidth(event.currentTarget.value);
});
}
}
function setupThemeColor() {
const LOCAL_STORAGE_KEY = "legit_theme_color";
const VALID_COLORS = ["red", "orange", "green", "gray", "pink", "purple", "yellow"];
function applyThemeColor(color) {
if (color) {
localStorage.setItem(LOCAL_STORAGE_KEY, color);
document.documentElement.dataset.themeColor = color;
} else {
localStorage.removeItem(LOCAL_STORAGE_KEY);
document.documentElement.dataset.themeColor = "";
}
}
const saved = localStorage.getItem(LOCAL_STORAGE_KEY) || "";
applyThemeColor(saved);
const selector = document.getElementById("theme-color");
if (selector) {
selector.value = saved;
selector.addEventListener("change", event => {
const value = event.currentTarget.value;
if (value && !VALID_COLORS.includes(value)) {
return;
}
applyThemeColor(value);
});
}
}
function setupPreferencesDialog() {
const preferences = document.getElementById("preferences-dialog");
document.getElementById("preferences-dialog-trigger")?.addEventListener("click", (event) => {
preferences?.showModal();
});
document.getElementById("preferences-dialog-closer")?.addEventListener("click", (event) => {
preferences?.close();
});
}
setupTabWidthSelector();
setupThemeColor();
setupPreferencesDialog();