// Base filesystem class that defines the common interface for all filesystem implementations
import { parseHex, validateInput, checkDependencies, updateResultItem } from '../utils.js';
export class BaseFilesystem {
constructor(name, variants = []) {
this.name = name;
this.variants = variants; // Array of variant configurations
}
// Abstract method to be implemented by subclasses
getVariants() {
return this.variants;
}
// Generate HTML for constants section
generateConstantsHTML(variantId) {
const variant = this.variants.find(v => v.id === variantId);
if (!variant) return '';
return `
${this.generateConstantsHTML(variantId)}
Hex-Rechner
${calculatorHTML}
${this.generateInputsHTML(variantId)}
${this.generateResultsHTML(variantId)}
${this.generateFormulasHTML(variantId)}
`;
}
// Abstract method for calculations - to be implemented by subclasses
calculate(variantId) {
throw new Error('calculate method must be implemented by subclass');
}
// Setup input event listeners for this filesystem
setupInputListeners(variantId) {
const variant = this.variants.find(v => v.id === variantId);
if (!variant) return;
const allInputIds = [
...variant.constants.map(c => c.id),
...variant.inputs.map(i => i.id)
];
allInputIds.forEach(inputId => {
const input = document.getElementById(inputId);
if (input) {
input.addEventListener('input', () => {
validateInput(inputId, input.value);
this.calculate(variantId);
});
}
});
}
// Get all input values for a variant
getInputValues(variantId) {
const variant = this.variants.find(v => v.id === variantId);
if (!variant) return {};
const values = {};
// Get constants
variant.constants.forEach(constant => {
const element = document.getElementById(constant.id);
if (element) {
values[constant.id] = parseHex(element.value) || 0;
}
});
// Get inputs
variant.inputs.forEach(input => {
const element = document.getElementById(input.id);
if (element) {
values[input.id] = parseHex(element.value);
}
});
return values;
}
}