window.SpotNotes = window.SpotNotes || {}; window.SpotNotes.initSidebar = function() { const sidebar = document.getElementById('sidebar'); const toggleBtn = document.getElementById('sidebar-toggle'); toggleBtn.addEventListener('click', () => { sidebar.classList.toggle('collapsed'); // Change arrow direction based on state if (sidebar.classList.contains('collapsed')) { const sections = document.querySelectorAll('.list-section'); sections.forEach(section => { const content = section.querySelector('.list-section-content'); if (content) content.style.display = 'none'; }); toggleBtn.innerHTML = '<'; // Point left (open) } else { toggleBtn.innerHTML = '>'; // Point right (close) } }); const centerBtn = document.getElementById('btn-center-user'); if (centerBtn) { centerBtn.addEventListener('click', () => { window.SpotNotes.isTracking = true; window.SpotNotes.updateTrackingUI(); if (window.SpotNotes.userLocation) { window.SpotNotes.map.setView([window.SpotNotes.userLocation.lat, window.SpotNotes.userLocation.lng], 16); } }); } }; window.SpotNotes.setupPublicToggle = function() { const btn = document.getElementById('btn-toggle-public'); const list = document.getElementById('public-notepads-list'); if (!btn || !list) return; btn.addEventListener('click', async () => { if (list.style.display === 'none') { list.style.display = 'block'; btn.innerHTML = 'Public Notepads ▾'; // Lazy load if empty if (list.innerHTML === '') { list.innerHTML = '

Loading...

'; try { const res = await fetch('/api/notepads?type=public'); const pads = await res.json(); window.SpotNotes.renderNotepadList(pads, 'public-notepads-list'); } catch (err) { list.innerHTML = '

Error loading public pads.

'; } } } else { list.style.display = 'none'; btn.innerHTML = 'Public Notepads ▸'; } }); }; window.SpotNotes.renderNotepadList = function(pads, containerId, isFavorite) { const container = document.getElementById(containerId); if (!container) return; container.innerHTML = ''; if (pads.length === 0) { container.innerHTML = '

No notepads found.

'; return; } pads.forEach(pad => { const item = document.createElement('div'); item.className = 'notepad-card'; let icon = pad.is_public ? '🌍' : '🔒'; let favButton = ''; const editBtn = (window.SpotNotes.currentUser && pad.owner_id === window.SpotNotes.currentUser.id) ? `` : ''; const isOwner = window.SpotNotes.currentUser && pad.owner_id === window.SpotNotes.currentUser.id; const manageShareBtn = isOwner ? `` : ''; if(window.SpotNotes.isLoggedIn){ const action = isFavorite ? 'unfavorite' : 'favorite'; const label = isFavorite ? '♥' : '♡'; favButton = ``; } const deleteBtn = isOwner ? `` : ''; const shareToken = pad.share_token || ''; const shareBtn = ``; item.innerHTML = `
${icon} ${window.SpotNotes.escapeHtml(pad.name)}
${editBtn} ${manageShareBtn} ${shareBtn} ${favButton} ${deleteBtn}
`; item.addEventListener('click', () => window.SpotNotes.loadNotesForPad(pad.id, pad.name, pad.is_public, pad.owner_id, false, null, pad.can_write, pad.encrypted_key)); container.appendChild(item); }); }; window.SpotNotes.toggleSection = function(event) { const section = event.target.closest('.list-section'); const content = section.querySelector('.list-section-content'); const isCollapsed = content.style.display === 'none'; content.style.display = isCollapsed ? 'block' : 'none'; event.target.innerHTML = isCollapsed ? event.target.innerHTML.replace('▸', '▾') : event.target.innerHTML.replace('▾', '▸'); };