// Doc Analyzer - PDF Rendering and Theme Toggle // Theme toggle functionality function initTheme() { const savedTheme = localStorage.getItem('theme') || 'dark'; document.documentElement.setAttribute('data-theme', savedTheme); const themeToggle = document.querySelector('.theme-toggle'); if (themeToggle) { themeToggle.addEventListener('click', () => { const currentTheme = document.documentElement.getAttribute('data-theme'); const newTheme = currentTheme === 'dark' ? 'light' : 'dark'; document.documentElement.setAttribute('data-theme', newTheme); localStorage.setItem('theme', newTheme); }); } } // PDF rendering functionality async function renderPDF(pdfUrl, canvasId) { const canvas = document.getElementById(canvasId); if (!canvas) return; const ctx = canvas.getContext('2d'); try { // Load PDF.js from CDN const pdfjsLib = await import('https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.min.mjs'); pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.mjs'; // Load the PDF document const loadingTask = pdfjsLib.getDocument(pdfUrl); const pdf = await loadingTask.promise; // Get first page const page = await pdf.getPage(1); // Calculate scale to fit canvas width const viewport = page.getViewport({ scale: 1 }); const scale = canvas.width / viewport.width; const scaledViewport = page.getViewport({ scale: scale }); // Set canvas dimensions canvas.height = scaledViewport.height; canvas.width = scaledViewport.width; // Render page const renderContext = { canvasContext: ctx, viewport: scaledViewport }; await page.render(renderContext).promise; } catch (error) { console.error('Error rendering PDF:', error); ctx.fillStyle = '#ef4444'; ctx.font = '16px Arial'; ctx.fillText('Error loading PDF', 10, 30); } } // Initialize on page load document.addEventListener('DOMContentLoaded', () => { initTheme(); // Check for PDF to render const pdfUrl = document.getElementById('pdf-url'); const canvasId = document.getElementById('canvas-id'); if (pdfUrl && canvasId) { renderPDF(pdfUrl.value, canvasId.value); } });