93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
/**
|
|
* 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);
|
|
});
|