/** * Page Counter for Footer Updates * Sets CSS variables for accurate page counting in footers */ class PageCounter { constructor() { this.totalPages = 16; // Default fallback } /** * Initialize the page counter */ async init() { // Wait for TOC generator to be ready if (window.tocGenerator) { // Get total pages from TOC generator this.totalPages = window.tocGenerator.getTotalPages(); } else { // Try to load from JSON file directly await this.loadPageNumbers(); } // Set CSS variable for footers this.updateCSSVariables(); console.log(`✅ Page counter initialized: ${this.totalPages} total pages`); } /** * Load page numbers from JSON file */ async loadPageNumbers() { try { const response = await fetch('../page_numbers.json'); if (response.ok) { const pageNumbers = await response.json(); this.totalPages = Math.max(...Object.values(pageNumbers)); console.log(`📄 Loaded total pages: ${this.totalPages}`); } } catch (error) { console.warn('⚠️ Could not load page numbers, using default:', error); } } /** * Update CSS variables for footer page counting */ updateCSSVariables() { console.log(`🔧 Setting CSS variable --total-pages to ${this.totalPages}`); // Set CSS custom property for total pages document.documentElement.style.setProperty('--total-pages', this.totalPages); // Also update any existing footer elements const footers = document.querySelectorAll('.page-footer'); footers.forEach(footer => { const pageNumberElement = footer.querySelector('.footer-page-number'); if (pageNumberElement) { pageNumberElement.textContent = `${this.totalPages}`; } }); console.log('✅ CSS variables updated'); } /** * Get total page count */ getTotalPages() { return this.totalPages; } /** * Refresh page count */ async refresh() { await this.loadPageNumbers(); this.updateCSSVariables(); } } // Initialize when DOM is loaded document.addEventListener('DOMContentLoaded', function() { console.log('🚀 Page Counter: DOM loaded, waiting for TOC generator...'); // Wait a bit for TOC generator to initialize setTimeout(async () => { console.log('🔄 Page Counter: Starting initialization...'); window.pageCounter = new PageCounter(); await window.pageCounter.init(); }, 500); });