// 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 `

Konstanten

${variant.constants.map(constant => `
`).join('')}
`; } // Generate HTML for input parameters section generateInputsHTML(variantId) { const variant = this.variants.find(v => v.id === variantId); if (!variant) return ''; return `

Eingabeparameter

${variant.inputs.map(input => `
`).join('')}
`; } // Generate HTML for results section generateResultsHTML(variantId) { const variant = this.variants.find(v => v.id === variantId); if (!variant) return ''; return `

Berechnete Werte

${variant.resultGroups.map(group => `

${group.name}

${group.results.map(result => `
${result.label}:
-
`).join('')}
`).join('')}
`; } // Generate HTML for formulas section generateFormulasHTML(variantId) { const variant = this.variants.find(v => v.id === variantId); if (!variant) return ''; return `

Berechnungsformeln ${this.name}

${variant.formulas.map(formula => `
${formula.name} = ${formula.expression}
`).join('')}
`; } // Generate complete tab content HTML generateTabContentHTML(variantId, calculatorHTML) { 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; } }