Challenge Tasks
Task Manager
30-Day Inktober Challenge
Host: Art Community Group | Duration: 30 Days
I. Rules & Constraints
Goal: Consistency and skill growth. Medium: [Medium Constraint]
All tasks must be completed sequentially and shared publicly using [Hashtag].
II. Challenge Schedule
III. General Notes
Remember, the goal is not perfection, but commitment. Have fun and be inspired by the community's work!
Challenge Details
Host: | Duration:
I. Rules & Requirements
II. Challenge Schedule
Creative Challenge Brief. Do not give up!
No tasks added.
'; return; } sortedTasks.forEach(t => { const div = document.createElement('div'); div.className = 'challenge-chip'; div.innerHTML = ` Day ${t.day}: ${t.prompt} (${t.medium || 'Any'}) `; managerContainer.appendChild(div); }); } function renderScheduleGrid(sortedTasks) { const grid = document.getElementById('challenge-schedule-grid'); grid.innerHTML = ''; sortedTasks.forEach(t => { const div = document.createElement('div'); div.className = 'challenge-item'; div.innerHTML = `DAY ${t.day}
${t.prompt}
Medium: ${t.medium || 'Any'}
`;
grid.appendChild(div);
});
}
// --- PDF Export ---
function generatePDF() {
if (tasks.length === 0) {
alert("Please add at least one task before generating the PDF.");
return;
}
const pdfTemplate = document.getElementById('pdf-template');
const pdfScheduleGrid = document.getElementById('pdf-schedule-grid');
// 1. Fill Metadata (Done in updateMeta/updateDoc)
document.getElementById('pdf-rules-text').innerText = document.getElementById('cfg-rules').value || 'No rules defined.';
// 2. Fill Schedule Grid (Clone current state)
pdfScheduleGrid.innerHTML = '';
const sortedTasks = [...tasks].sort((a, b) => a.day - b.day);
sortedTasks.forEach(t => {
pdfScheduleGrid.innerHTML += `
DAY ${t.day}
${t.prompt}
Constraint: ${t.medium || 'Any'}
