Online Secure Digital Bullet Journal

Digital Bullet Journal

No collections yet.

'; return; } collectionNames.forEach(name => { const collectionEl = document.createElement('div'); collectionEl.className = 'bg-gray-50 p-4 rounded-lg'; let itemsHtml = bujoData.collections[name].map(item => `
  • ${item.content}
  • `).join(''); collectionEl.innerHTML = `

    ${name}

      ${itemsHtml}
    `; collectionsList.appendChild(collectionEl); }); }; // --- Global Action Functions --- window.deleteEntry = (dateKey, id) => { bujoData.entries[dateKey] = bujoData.entries[dateKey].filter(e => e.id !== id); saveData(); renderDailyLog(); }; window.toggleTaskStatus = (dateKey, id) => { const entry = bujoData.entries[dateKey].find(e => e.id === id); if (entry) { if (entry.status === 'incomplete') entry.status = 'complete'; else if (entry.status === 'complete') entry.status = 'incomplete'; } saveData(); renderDailyLog(); }; window.deleteCollection = (name) => { delete bujoData.collections[name]; saveData(); renderCollections(); }; window.deleteCollectionItem = (collectionName, itemId) => { bujoData.collections[collectionName] = bujoData.collections[collectionName].filter(item => item.id !== itemId); saveData(); renderCollections(); }; // --- Event Listeners --- Object.keys(tabs).forEach(key => tabs[key].addEventListener('click', () => switchTab(key))); document.getElementById('prev-day-btn').addEventListener('click', () => { currentDate.setDate(currentDate.getDate() - 1); renderDailyLog(); }); document.getElementById('next-day-btn').addEventListener('click', () => { currentDate.setDate(currentDate.getDate() + 1); renderDailyLog(); }); document.getElementById('prev-month-btn').addEventListener('click', () => { currentMonthDate.setMonth(currentMonthDate.getMonth() - 1); renderMonthlyView(); }); document.getElementById('next-month-btn').addEventListener('click', () => { currentMonthDate.setMonth(currentMonthDate.getMonth() + 1); renderMonthlyView(); }); dailyEntryForm.addEventListener('submit', (e) => { e.preventDefault(); const textInput = document.getElementById('entry-text'); const typeInput = document.getElementById('entry-type'); const dateKey = toISODateString(currentDate); if (!bujoData.entries[dateKey]) bujoData.entries[dateKey] = []; const newEntry = { id: Date.now(), type: typeInput.value, content: textInput.value }; if (newEntry.type === 'task') newEntry.status = 'incomplete'; bujoData.entries[dateKey].push(newEntry); saveData(); renderDailyLog(); textInput.value = ''; }); collectionForm.addEventListener('submit', (e) => { e.preventDefault(); const nameInput = document.getElementById('collection-name'); if (!bujoData.collections[nameInput.value]) { bujoData.collections[nameInput.value] = []; saveData(); renderCollections(); nameInput.value = ''; } }); collectionsList.addEventListener('submit', (e) => { if (e.target.classList.contains('collection-item-form')) { e.preventDefault(); const input = e.target.querySelector('.collection-item-input'); const collectionName = e.target.closest('div').querySelector('h3').textContent; bujoData.collections[collectionName].push({ id: Date.now(), content: input.value }); saveData(); renderCollections(); } }); document.getElementById('save-settings-btn').addEventListener('click', () => { bujoData.username = usernameInput.value.trim() || 'User'; saveData(); settingsSavedMsg.classList.remove('hidden'); setTimeout(() => settingsSavedMsg.classList.add('hidden'), 2000); }); document.getElementById('pdf-download-btn').addEventListener('click', () => { const { jsPDF } = window.jspdf; const doc = new jsPDF(); let yPos = 40; doc.setFontSize(20); doc.text(`${bujoData.username}'s Bullet Journal`, 105, 20, null, null, 'center'); // Daily Logs doc.setFontSize(16); doc.text("Daily Logs", 14, yPos); yPos += 10; Object.keys(bujoData.entries).sort().forEach(dateKey => { if (yPos > 260) { doc.addPage(); yPos = 20; } doc.setFontSize(12); doc.setFont(undefined, 'bold'); doc.text(new Date(dateKey).toLocaleDateString(), 14, yPos); yPos += 7; doc.setFont(undefined, 'normal'); bujoData.entries[dateKey].forEach(entry => { doc.text(`- [${entry.type}] ${entry.content}`, 18, yPos); yPos += 6; }); }); // Collections yPos += 10; doc.setFontSize(16); doc.text("Collections", 14, yPos); yPos += 10; Object.keys(bujoData.collections).forEach(name => { if (yPos > 260) { doc.addPage(); yPos = 20; } doc.setFontSize(12); doc.setFont(undefined, 'bold'); doc.text(name, 14, yPos); yPos += 7; doc.setFont(undefined, 'normal'); bujoData.collections[name].forEach(item => { doc.text(`- ${item.content}`, 18, yPos); yPos += 6; }); }); doc.save(`${bujoData.username}_Bullet_Journal.pdf`); }); // --- Initial Load --- loadData(); renderDailyLog(); });
    Scroll to Top