-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
debug.js
122 lines (101 loc) · 3.36 KB
/
debug.js
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
// debug.js
let autoRefreshInterval;
document.getElementById('refresh').addEventListener('click', showLogs);
document.getElementById('clear').addEventListener('click', clearLogs);
document.getElementById('enableDebug').addEventListener('click', toggleDebugMode);
function showLogs() {
browser.storage.local.get('debug_logs')
.then(result => {
const logs = result.debug_logs || [];
const preElement = document.getElementById('logs');
preElement.innerHTML = '';
logs.forEach(log => {
const logLine = document.createElement('div');
logLine.className = 'log-line';
const timestamp = document.createElement('span');
timestamp.className = 'log-timestamp';
timestamp.textContent = log.timestamp;
const sender = document.createElement('span');
sender.className = 'log-sender';
sender.dataset.sender = log.sender; // Add data attribute for CSS targeting
sender.textContent = log.sender;
const message = document.createElement('span');
message.className = 'log-message';
message.textContent = log.message;
logLine.appendChild(timestamp);
logLine.appendChild(sender);
logLine.appendChild(message);
preElement.appendChild(logLine);
});
scrollToBottom();
});
}
function scrollToBottom() {
const preElement = document.getElementById('logs');
preElement.scrollTop = preElement.scrollHeight;
}
function clearLogs() {
browser.storage.local.set({ debug_logs: [] })
.then(showLogs);
}
function updateDebugStatus() {
browser.storage.local.get('debug_mode_until')
.then(result => {
const debugUntil = result.debug_mode_until;
const now = Date.now();
const isEnabled = debugUntil && debugUntil > now;
const timeLeft = isEnabled ? Math.ceil((debugUntil - now) / 60000) : 0;
// Update status text
const statusElement = document.getElementById('debugStatus');
statusElement.textContent = isEnabled
? `Debug mode enabled (${timeLeft} minutes remaining)`
: 'Debug mode disabled';
// Update button text and onclick handler
const debugButton = document.getElementById('enableDebug');
debugButton.textContent = isEnabled ? 'Disable Debug Mode' : 'Enable Debug Mode (1 hour)';
if (!isEnabled && autoRefreshInterval) {
stopAutoRefresh();
} else if (isEnabled && !autoRefreshInterval) {
startAutoRefresh();
}
});
}
function toggleDebugMode() {
browser.storage.local.get('debug_mode_until')
.then(result => {
const debugUntil = result.debug_mode_until;
const now = Date.now();
const isEnabled = debugUntil && debugUntil > now;
if (isEnabled) {
// Disable debug mode by setting timestamp to now (expired)
return browser.storage.local.set({ debug_mode_until: now });
} else {
// Enable debug mode for 1 hour
const oneHourFromNow = new Date(Date.now() + 60 * 60 * 1000).getTime();
return browser.storage.local.set({ debug_mode_until: oneHourFromNow });
}
})
.then(() => {
updateDebugStatus();
});
}
function startAutoRefresh() {
if (!autoRefreshInterval) {
autoRefreshInterval = setInterval(() => {
showLogs();
updateDebugStatus();
}, 5000);
}
}
function stopAutoRefresh() {
if (autoRefreshInterval) {
clearInterval(autoRefreshInterval);
autoRefreshInterval = null;
}
}
// Initial setup
showLogs();
updateDebugStatus();
startAutoRefresh();
// Clean up when the page is closed
window.addEventListener('beforeunload', stopAutoRefresh);