wiki/offerings/_src/page-counter.js
2025-09-22 00:39:23 +02:00

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);
});