-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcontent.js
More file actions
60 lines (53 loc) · 2.02 KB
/
content.js
File metadata and controls
60 lines (53 loc) · 2.02 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
// Минимальный виджет + оверлей для отображения на YouTube
// Создает или возвращает элемент таймера
function ensureTimerEl() {
let el = document.getElementById("sf-timer");
if (!el) {
el = document.createElement("div");
el.id = "sf-timer";
document.documentElement.appendChild(el);
}
return el;
}
// Создает или возвращает элемент overlay блокировки
function ensureOverlay() {
let o = document.getElementById("sf-overlay");
if (!o) {
o = document.createElement("div");
o.id = "sf-overlay";
o.setAttribute("aria-hidden", "true");
document.documentElement.appendChild(o);
}
return o;
}
// Удаляет overlay блокировки
function removeOverlay() {
const o = document.getElementById("sf-overlay");
if (o) o.remove();
}
// Форматирование времени из секунд в MM:SS
function fmt(sec) {
sec = Math.max(0, Math.floor(sec));
const m = Math.floor(sec / 60), s = sec % 60;
return `${m}:${s.toString().padStart(2,"0")}`;
}
// Основная функция обновления интерфейса
function updateUI() {
// Запрашиваем текущее состояние у background скрипта
browser.runtime.sendMessage({ type: "getState" }).then(({ state, now }) => {
const timerEl = ensureTimerEl();
// Если активна блокировка - показываем overlay
if (state.blockedUntil && now < state.blockedUntil) {
const remain = Math.ceil((state.blockedUntil - now) / 1000);
const ov = ensureOverlay();
ov.textContent = `⛔ Время вышло! Доступ будет через ${fmt(remain)}.`;
timerEl.textContent = `Блок: ${fmt(remain)}`;
} else {
// Иначе показываем оставшееся время
removeOverlay();
timerEl.textContent = `⏳ ${fmt(state.remaining)}`;
}
}).catch(() => {});
}
setInterval(updateUI, 1000);
updateUI();