// Main application file that coordinates all modules
import { setupTooltips, setupCopyButtons } from './utils.js';
import { Calculator } from './calculator.js';
import { FATFilesystem } from './filesystems/fat.js';
class FilesystemCalculator {
constructor() {
this.filesystems = [
new FATFilesystem()
];
this.calculator = new Calculator();
this.activeTab = null;
}
init() {
this.renderTabs();
this.renderContent();
this.setupEventListeners();
this.setupCalculator();
this.setupUtilities();
// Activate first tab
if (this.filesystems[0] && this.filesystems[0].variants[0]) {
this.switchTab(this.filesystems[0].variants[0].id);
}
}
renderTabs() {
const tabsContainer = document.getElementById('filesystem-tabs');
const tabs = [];
this.filesystems.forEach(filesystem => {
filesystem.variants.forEach(variant => {
tabs.push(`
${variant.name}
`);
});
});
tabsContainer.innerHTML = tabs.join('');
}
renderContent() {
const contentContainer = document.getElementById('filesystem-content');
const calculatorHTML = this.calculator.generateHTML();
const contents = [];
this.filesystems.forEach(filesystem => {
filesystem.variants.forEach(variant => {
contents.push(filesystem.generateTabContentHTML(variant.id, calculatorHTML));
});
});
contentContainer.innerHTML = contents.join('');
}
setupEventListeners() {
// Tab switching
document.addEventListener('click', (e) => {
if (e.target.classList.contains('tab')) {
const tabId = e.target.getAttribute('data-tab');
this.switchTab(tabId);
}
});
// Input listeners for all filesystems
this.filesystems.forEach(filesystem => {
filesystem.variants.forEach(variant => {
filesystem.setupInputListeners(variant.id);
});
});
}
setupCalculator() {
this.calculator.setupEventListeners();
}
setupUtilities() {
setupTooltips();
setupCopyButtons();
window.copyToClipboard = (elementId) => {
import('./utils.js').then(module => {
module.copyToClipboard(elementId);
});
};
}
switchTab(tabId) {
// Update tab appearance
document.querySelectorAll('.tab').forEach(tab => {
tab.classList.remove('active');
});
document.querySelector(`[data-tab="${tabId}"]`).classList.add('active');
// Update content visibility
document.querySelectorAll('.tab-content').forEach(content => {
content.classList.remove('active');
});
document.getElementById(tabId).classList.add('active');
this.activeTab = tabId;
// Update calculator display
this.calculator.updateDisplay();
// Trigger calculation for the new tab
const filesystem = this.findFilesystemForTab(tabId);
if (filesystem) {
filesystem.calculate(tabId);
}
}
findFilesystemForTab(tabId) {
for (const filesystem of this.filesystems) {
if (filesystem.variants.some(variant => variant.id === tabId)) {
return filesystem;
}
}
return null;
}
}
// Initialize the application when DOM is loaded
document.addEventListener('DOMContentLoaded', () => {
const app = new FilesystemCalculator();
app.init();
});