`).join('')}
`;
charactersContent.innerHTML = `${data.characterAnalysis.map(c => ``).join('')}
`;
// Show results and reset tabs
resultsContainer.style.display = 'block';
setActiveTab(0);
}
function showError(message) {
errorMessage.textContent = message;
errorMessage.style.display = 'block';
resultsContainer.style.display = 'none';
}
// --- Tab and Navigation Logic ---
function setActiveTab(index) {
// Guard clause
if (index < 0 || index >= tabButtons.length) return;
currentTabIndex = index;
tabButtons.forEach((button, i) => {
button.classList.toggle('active', i === index);
});
tabPanes.forEach((pane, i) => {
pane.classList.toggle('hidden', i !== index);
});
// Update navigation button states
prevBtn.disabled = index === 0;
nextBtn.disabled = index === tabButtons.length - 1;
}
tabButtons.forEach((button, index) => {
button.addEventListener('click', () => setActiveTab(index));
});
prevBtn.addEventListener('click', () => {
if (currentTabIndex > 0) {
setActiveTab(currentTabIndex - 1);
}
});
nextBtn.addEventListener('click', () => {
if (currentTabIndex < tabButtons.length - 1) {
setActiveTab(currentTabIndex + 1);
}
});
// --- PDF Generation Logic ---
async function generatePdf() {
// 1. Get all content from the UI
const title = bookTitleDisplay.textContent;
const symbolismHTML = symbolismContent.innerHTML;
const themesHTML = themesContent.innerHTML;
const charactersHTML = charactersContent.innerHTML;
// Helper function to convert HTML to a simpler format for the PDF
const formatForPdf = (htmlString) => {
const container = document.createElement('div');
container.innerHTML = htmlString;
let result = '';
container.querySelectorAll('div.space-y-4 > div').forEach(item => {
const heading = item.querySelector('h3').innerText;
const paragraph = item.querySelector('p').innerText;
result += `${c.character}
${c.analysis}
${heading}: ${paragraph}
`; }); return result; }; // 2. Format it nicely in the hidden PDF area pdfContentArea.innerHTML = `