From 184f3ec0c2c41e5580db9240a13244077adc859c Mon Sep 17 00:00:00 2001 From: Ferdinand Date: Thu, 2 Apr 2026 10:46:44 +0200 Subject: [PATCH] fix: bidirectional eingabe update, hexToHsl null check, import validation, harmony umlauts --- js/collection.js | 3 +++ js/converter.js | 4 +++- js/eingabe.js | 3 +++ js/harmonien.js | 4 ++-- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/js/collection.js b/js/collection.js index 3926e3c..477c2db 100644 --- a/js/collection.js +++ b/js/collection.js @@ -108,14 +108,17 @@ export function importCollection() { const data = load(); const existingFavHexes = new Set(data.favoriten.map(hslToHex)); (imported.favoriten || []).forEach(hsl => { + if (!hsl || typeof hsl.h !== 'number' || typeof hsl.s !== 'number' || typeof hsl.l !== 'number') return; if (!existingFavHexes.has(hslToHex(hsl))) data.favoriten.push(hsl); }); const existingSchemaNames = new Set(data.schemata.map(s => s.name)); (imported.schemata || []).forEach(s => { + if (!s || typeof s.name !== 'string' || !Array.isArray(s.farben)) return; if (!existingSchemaNames.has(s.name)) data.schemata.push(s); }); const existingHistHexes = new Set(data.history.map(hslToHex)); (imported.history || []).forEach(hsl => { + if (!hsl || typeof hsl.h !== 'number' || typeof hsl.s !== 'number' || typeof hsl.l !== 'number') return; if (!existingHistHexes.has(hslToHex(hsl))) data.history.push(hsl); }); if (data.history.length > 20) data.history = data.history.slice(0, 20); diff --git a/js/converter.js b/js/converter.js index a67f21d..57996ed 100644 --- a/js/converter.js +++ b/js/converter.js @@ -49,7 +49,9 @@ export function hslToHex(hsl) { // Hex → HSL export function hexToHsl(hex) { - return rgbToHsl(hexToRgb(hex)); + const rgb = hexToRgb(hex); + if (!rgb) return null; + return rgbToHsl(rgb); } // Harmonien — Input: HSL, Output: Objekt mit Arrays von HSL-Objekten diff --git a/js/eingabe.js b/js/eingabe.js index 47721e8..ec1507f 100644 --- a/js/eingabe.js +++ b/js/eingabe.js @@ -39,6 +39,7 @@ export function initEingabe(onSaveFavorit, onSaveSchema) { if (/^#[0-9a-fA-F]{6}$/.test(val)) { const hsl = hexToHsl(val); state.setColor(hsl); + updateUI(hsl); } }); @@ -47,6 +48,7 @@ export function initEingabe(onSaveFavorit, onSaveSchema) { if (rgb) { const hsl = rgbToHsl(rgb); state.setColor(hsl); + updateUI(hsl); } }); @@ -54,6 +56,7 @@ export function initEingabe(onSaveFavorit, onSaveSchema) { const hsl = parseHsl(hslInput.value); if (hsl) { state.setColor(hsl); + updateUI(hsl); } }); diff --git a/js/harmonien.js b/js/harmonien.js index c58ea9e..d718d8e 100644 --- a/js/harmonien.js +++ b/js/harmonien.js @@ -65,10 +65,10 @@ function render(onSaveFavorit, onSaveSchema) { grid.textContent = ''; const h = getHarmonies(hsl); - grid.appendChild(renderHarmony('Komplementar', h.komplementaer, onSaveFavorit, onSaveSchema)); + grid.appendChild(renderHarmony('Komplementär', h.komplementaer, onSaveFavorit, onSaveSchema)); grid.appendChild(renderHarmony('Analog', h.analog, onSaveFavorit, onSaveSchema)); grid.appendChild(renderHarmony('Triade', h.triade, onSaveFavorit, onSaveSchema)); - grid.appendChild(renderHarmony('Split-Komplementar', h.splitKomplementaer, onSaveFavorit, onSaveSchema)); + grid.appendChild(renderHarmony('Split-Komplementär', h.splitKomplementaer, onSaveFavorit, onSaveSchema)); } export function initHarmonien(onSaveFavorit, onSaveSchema) {