/**
* Version Footer Utility
* Fetches version information and adds it to page footers
*/
class VersionFooter {
constructor() {
this.versionData = null;
this.init();
}
async init() {
try {
await this.fetchVersionData();
this.addVersionToFooter();
} catch (error) {
console.warn('Could not load version information:', error);
this.addFallbackVersion();
}
}
async fetchVersionData() {
const response = await fetch('/api/version');
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
}
this.versionData = await response.json();
}
addVersionToFooter() {
const footers = document.querySelectorAll('footer');
footers.forEach(footer => {
// Check if version info already exists
if (footer.querySelector('.version-info')) {
return;
}
const versionDiv = document.createElement('div');
versionDiv.className = 'version-info';
versionDiv.style.cssText = `
margin-top: 12px;
padding-top: 8px;
border-top: 1px solid #e0e0e0;
font-size: 11px;
color: #666;
text-align: center;
`;
if (this.versionData) {
const commitUrl = `${this.versionData.gitUrl}/commit/${this.versionData.sha}`;
const commitDate = new Date(this.versionData.commitDate).toLocaleDateString();
versionDiv.innerHTML = `
Version: ${this.versionData.shortSha}
• ${commitDate}
• Branch: ${this.versionData.branch}
`;
} else {
versionDiv.innerHTML = 'Version information unavailable';
}
footer.appendChild(versionDiv);
});
}
addFallbackVersion() {
const footers = document.querySelectorAll('footer');
footers.forEach(footer => {
if (footer.querySelector('.version-info')) {
return;
}
const versionDiv = document.createElement('div');
versionDiv.className = 'version-info';
versionDiv.style.cssText = `
margin-top: 12px;
padding-top: 8px;
border-top: 1px solid #e0e0e0;
font-size: 11px;
color: #666;
text-align: center;
`;
versionDiv.innerHTML = 'Version information unavailable';
footer.appendChild(versionDiv);
});
}
}
// Auto-initialize when DOM is ready
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
new VersionFooter();
});
} else {
new VersionFooter();
}