let items = [];
let doneIds = new Set();
document.addEventListener('DOMContentLoaded', async () => {
const container = document.getElementById('container');
const progress = document.getElementById('progress');
try {
const res = await chrome.runtime.sendMessage({ type: 'getReviewTasks' });
if (res.error) {
container.innerHTML = `
${escapeHtml(res.error)}
`;
return;
}
items = res.review || [];
render();
}
catch (e) {
container.innerHTML = `${escapeHtml(e.message)}
`;
}
function render() {
const remaining = items.filter(i => !doneIds.has(i.task.id));
progress.textContent = `${items.length - remaining.length} / ${items.length} reviewed`;
if (remaining.length === 0) {
container.innerHTML = `
All caught up!
No more decayed tasks to review. Come back next week.
`;
chrome.runtime.sendMessage({ type: 'setLastReviewDate', date: new Date().toISOString() }).catch(() => { });
return;
}
container.innerHTML = '';
for (const item of remaining) {
container.appendChild(renderCard(item));
}
}
function renderCard(item) {
const card = document.createElement('div');
card.className = 'card';
card.id = `card-${item.task.id}`;
const pillClass = item.score.score >= 70 ? 'score-hot' : item.score.score >= 40 ? 'score-warm' : 'score-cold';
card.innerHTML = `
${escapeHtml(item.task.source)}
${item.task.projectName ? `Project: ${escapeHtml(item.task.projectName)}` : ''}
${item.task.labels.length > 0 ? `Labels: ${escapeHtml(item.task.labels.join(', '))}` : ''}
Age: ${Math.round(item.score.ageDays)} days
${escapeHtml(item.score.explanation)}
Open
`;
card.querySelectorAll('button[data-action]').forEach(btn => {
btn.addEventListener('click', async (e) => {
const target = e.currentTarget;
const action = target.getAttribute('data-action');
const id = target.getAttribute('data-id');
target.textContent = '...';
try {
if (action === 'complete') {
await chrome.runtime.sendMessage({ type: 'complete', taskId: id });
}
else if (action === 'delete') {
await chrome.runtime.sendMessage({ type: 'delete', taskId: id });
}
else if (action === 'dismiss') {
await chrome.runtime.sendMessage({ type: 'dismiss', taskId: id });
}
doneIds.add(id);
const c = document.getElementById(`card-${id}`);
if (c) {
c.classList.add('done');
}
setTimeout(render, 300);
}
catch (err) {
target.textContent = 'Error';
}
});
});
return card;
}
function escapeHtml(text) {
const div = document.createElement('div');
div.textContent = text;
return div.innerHTML;
}
});
export {};