-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
135 lines (118 loc) · 4.43 KB
/
Copy pathscript.js
File metadata and controls
135 lines (118 loc) · 4.43 KB
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import { KEYS } from "./js/config.js";
import { DOM } from "./js/dom.js";
import { formatTime } from "./js/format.js";
import { updateTodayStats, renderBarChart, renderHeatmap } from "./js/stats.js";
import {
timerState,
startTimer,
updateDots,
updateRing,
handleTimerEnd,
} from "./js/timer.js";
DOM.ring.style.strokeDasharray = DOM.circumference;
DOM.startButton.addEventListener("click", function () {
if (timerState.isRunning) {
clearInterval(timerState.timer);
timerState.isRunning = false;
localStorage.removeItem(KEYS.timerRunning);
DOM.startButton.textContent = "スタート";
} else {
timerState.totalTime = timerState.timeLeft;
timerState.startTimestamp = Date.now();
timerState.startTimeLeft = timerState.timeLeft;
startTimer();
localStorage.setItem(KEYS.timerRunning, "true");
localStorage.setItem(KEYS.startTimestamp, timerState.startTimestamp);
localStorage.setItem(KEYS.startTimeLeft, timerState.startTimeLeft);
localStorage.setItem(KEYS.timerStatus, timerState.timerStatus);
}
});
DOM.resetButton.addEventListener("click", function () {
timerState.timerStatus = "work";
clearInterval(timerState.timer);
timerState.timeLeft = DOM.workInput.value * 60;
timerState.isRunning = false;
localStorage.removeItem(KEYS.timerRunning);
localStorage.setItem(KEYS.sessionCount, 0);
DOM.startButton.textContent = "スタート";
DOM.display.textContent = formatTime(timerState.timeLeft);
updateRing(timerState.timeLeft, timerState.totalTime);
timerState.sessionCount = 0;
updateDots();
});
DOM.workInput.addEventListener("input", function () {
if (DOM.workInput.value < 1) DOM.workInput.value = 1;
localStorage.setItem(KEYS.workTime, DOM.workInput.value);
if (!timerState.isRunning) {
timerState.timeLeft = DOM.workInput.value * 60;
DOM.display.textContent = formatTime(timerState.timeLeft);
}
});
DOM.breakInput.addEventListener("input", function () {
if (DOM.breakInput.value < 1) DOM.breakInput.value = 1;
localStorage.setItem(KEYS.breakTime, DOM.breakInput.value);
if (!timerState.isRunning) {
if (timerState.timerStatus === "break") {
timerState.timeLeft = DOM.breakInput.value * 60;
DOM.display.textContent = formatTime(timerState.timeLeft);
}
}
});
DOM.longBreakInput.addEventListener("input", function () {
if (DOM.longBreakInput.value < 1) DOM.longBreakInput.value = 1;
localStorage.setItem(KEYS.longBreakTime, DOM.longBreakInput.value);
});
DOM.autoStartInput.addEventListener("change", function () {
localStorage.setItem(KEYS.autoStart, DOM.autoStartInput.checked);
});
document.getElementById("debug").addEventListener("click", function () {
handleTimerEnd();
});
if (
location.hostname !== "localhost" &&
location.hostname !== "127.0.0.1" &&
location.protocol !== "file:"
) {
document.getElementById("debug").style.display = "none";
}
if (DOM.savedWork) {
DOM.workInput.value = DOM.savedWork;
timerState.timeLeft = DOM.savedWork * 60;
timerState.totalTime = timerState.timeLeft;
DOM.display.textContent = formatTime(timerState.timeLeft);
}
if (DOM.savedBreak) DOM.breakInput.value = DOM.savedBreak;
if (DOM.savedLongBreak) DOM.longBreakInput.value = DOM.savedLongBreak;
if (DOM.savedSession) {
timerState.sessionCount = Number(DOM.savedSession);
updateDots();
}
const savedAutoStart = localStorage.getItem(KEYS.autoStart);
if (savedAutoStart === "true") DOM.autoStartInput.checked = true;
if (localStorage.getItem(KEYS.timerRunning) === "true") {
timerState.startTimestamp = Number(localStorage.getItem(KEYS.startTimestamp));
timerState.startTimeLeft = Number(localStorage.getItem(KEYS.startTimeLeft));
timerState.timerStatus = localStorage.getItem(KEYS.timerStatus);
timerState.timeLeft =
timerState.startTimeLeft -
Math.floor((Date.now() - timerState.startTimestamp) / 1000);
timerState.totalTime = timerState.startTimeLeft;
DOM.display.textContent = formatTime(timerState.timeLeft);
updateRing(timerState.timeLeft, timerState.totalTime);
startTimer();
}
updateTodayStats();
DOM.showStatsBtn.addEventListener("click", () => {
renderBarChart();
renderHeatmap();
DOM.statsModal.classList.remove("hidden");
});
DOM.closeStatsBtn.addEventListener("click", () => {
DOM.statsModal.classList.add("hidden");
});
DOM.showSettingsBtn.addEventListener("click", () => {
DOM.settingsModal.classList.remove("hidden");
});
DOM.closeSettingsBtn.addEventListener("click", () => {
DOM.settingsModal.classList.add("hidden");
});