Files

93 lines
4.1 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const main = document.getElementById('main');
const syncStatus = document.getElementById('syncStatus');
const countBadge = document.getElementById('countBadge');
async function load() {
try {
const res = await chrome.runtime.sendMessage({ type: 'getReviewTasks' });
if (res.error) {
syncStatus.textContent = '';
renderError(res.error);
return;
}
const review = res.review || [];
const total = res.total || 0;
const autoArchiveCount = res.autoArchiveCount || 0;
syncStatus.textContent = `${total} total tasks synced`;
if (review.length === 0) {
countBadge.style.display = 'none';
renderEmpty();
}
else {
countBadge.textContent = String(review.length);
countBadge.style.display = 'inline-block';
renderStats(review, autoArchiveCount);
}
}
catch (e) {
syncStatus.textContent = '';
renderError(e.message);
}
}
function renderEmpty() {
main.innerHTML = `
<div class="empty">No decayed tasks found. Great job keeping up!</div>
<button class="btn btn-secondary" id="syncBtn">Sync Now</button>
<a href="options.html" target="_blank" class="settings">Open Settings</a>
`;
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
function renderError(msg) {
main.innerHTML = `
<div class="error">${escapeHtml(msg)}</div>
<button class="btn btn-secondary" id="syncBtn">Retry Sync</button>
<a href="options.html" target="_blank" class="settings">Open Settings</a>
`;
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
function renderStats(review, autoArchiveCount) {
const hot = review.filter((r) => r.score.score >= 70).length;
const warm = review.filter((r) => r.score.score >= 40 && r.score.score < 70).length;
const cold = review.filter((r) => r.score.score < 40).length;
const oldest = review.reduce((a, b) => a.score.ageDays > b.score.ageDays ? a : b);
main.innerHTML = `
<div class="stat-row"><span class="stat-label">Hot (≥70)</span><span class="stat-value hot">${hot}</span></div>
<div class="stat-row"><span class="stat-label">Warm (40-69)</span><span class="stat-value warm">${warm}</span></div>
<div class="stat-row"><span class="stat-label">Cold (<40)</span><span class="stat-value">${cold}</span></div>
<div class="stat-row"><span class="stat-label">Oldest task</span><span class="stat-value">${Math.round(oldest.score.ageDays)} days</span></div>
${autoArchiveCount > 0 ? `<div class="stat-row"><span class="stat-label">Auto-archive ready</span><span class="stat-value hot">${autoArchiveCount}</span></div>` : ''}
<button class="btn btn-primary" id="reviewBtn">Start Review Session</button>
<button class="btn btn-secondary" id="syncBtn">Sync Now</button>
<a href="options.html" target="_blank" class="settings">Open Settings</a>
`;
document.getElementById('reviewBtn')?.addEventListener('click', () => {
chrome.runtime.sendMessage({ type: 'openReview' });
window.close();
});
document.getElementById('syncBtn')?.addEventListener('click', doSync);
}
async function doSync() {
const btn = document.getElementById('syncBtn');
if (btn)
btn.textContent = 'Syncing...';
try {
const res = await chrome.runtime.sendMessage({ type: 'sync' });
if (res.error) {
renderError(res.error);
return;
}
await load();
}
catch (e) {
renderError(e.message);
}
}
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
load();
});
export {};