Files
umrechner/REFACTOR.md

164 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Refactoring-Optionen
## 1. `prepareValue` reparieren + tote `parseNumber`-Funktion entfernen
**Dateien:** `hugo/static/js/converter.js`
`prepareValue()` macht `input.replace(/,/g, '.')`. Bei deutscher Eingabe `1.000,50` wird
daraus der ungültige String `1.000.50` `new Decimal()` wirft einen Fehler und die
Reaktivität bricht. Die Funktion `parseNumber()` (wird nirgends verwendet) würde das
korrekt parsen.
**Vorschlag:** Logik von `parseNumber` in `prepareValue` übernehmen, `parseNumber`
löschen.
**Effekt:** Bugfix + Tote-Code-Eliminierung.
---
## 2. Überzähliges schließendes `</div>` in Conversion-Seite entfernen
**Datei:** `hugo/layouts/conversion/single.html`
Vor dem abschließenden `{{ end }}` steht ein `</div>` ohne zugehöriges öffnendes
Element in dieser Template-Datei. Das erzeugt invalides HTML.
**Effekt:** HTML-Korrektheit, weniger Fragilität.
---
## 3. Toten `intermediate`-Engine-Zweig aus Formel-Template entfernen
**Datei:** `hugo/layouts/partials/conversion-formula.html`
Keine JSON-Datendatei verwendet `"conversion_engine": "intermediate"`. Der komplette
`else if eq .Params.engine "intermediate"`-Block wird niemals ausgeführt.
**Effekt:** Reduziert Template-Logik um ~20 Zeilen toten Code.
---
## 4. Engine-Partial dynamisch statt per `if/else` laden
**Datei:** `hugo/layouts/conversion/single.html`
Statt dreier verschachtelter `if/else` zur Auswahl des Data-Partials:
```html
{{ if eq $engine "currencies" }} ... {{ else if eq $engine "temperatures" }} ... {{ else }} ... {{ end }}
```
reicht ein dynamischer Partial-Aufruf:
```html
{{ partial (printf "conversion/%s-data" $engine) . }}
```
**Effekt:** Entfaltet 3 Ebenen verschachtelte Template-Logik.
---
## 5. SVG-Ladepattern in eigenes Partial extrahieren
**Dateien:** `hugo/layouts/index.html`, `hugo/layouts/404.html`,
`hugo/layouts/partials/unit-dropdown.html`
Diese drei Dateien wiederholen identisch:
```html
{{ $svgPath := printf "img/%s.svg" $data.slug }}
{{ $svgFile := readFile (printf "static/%s" $svgPath) }}
{{ if $svgFile }}{{ $svgFile | safeHTML }}{{ else }}<span></span>{{ end }}
```
**Vorschlag:** `hugo/layouts/partials/icon.html` mit `(dict "slug" $data.slug)`.
**Effekt:** DRY, Änderungen am Icon-Loading zentral.
---
## 6. Wiederholte Select-Optionen-Logik in Partial auslagern
**Datei:** `hugo/layouts/conversion/single.html`
Die Dropdowns für „von“ und „in“ enthalten nahezu identische `range`-Schleifen mit
nur leicht unterschiedlichen Variablen.
**Vorschlag:** `hugo/layouts/partials/unit-options.html` via Parameter
`(dict "mode" "from" ...)` steuern.
**Effekt:** Weniger Redundanz, geringere Fehleranfälligkeit bei Änderungen.
---
## 7. `category-url.html` entminifizieren
**Datei:** `hugo/layouts/partials/category-url.html`
Aktuell 1 Zeile, 260+ Zeichen ohne Umbrüche. Das ist die komplexeste Logik der
Seite (Finden des ersten und zweiten verfügbaren Units), aber völlig unlesbar.
**Effekt:** Deutlich bessere mentale Parsbarkeit.
---
## 8. URL-Wert-Normalisierung deduplizieren + `0`-Inkonsistenz fixen
**Datei:** `hugo/static/js/converter.js`
`updateUrl` und `navigate` wiederholen die Komma-zu-Punkt-Ersetzung. Zudem verhält
sich `updateUrl("0")` anders als `navigate(url, "0")` (ersteres setzt `?v=1`,
letzteres `?v=0`).
**Vorschlag:** Eine gemeinsame Funktion `normalizeUrlValue(value)` extrahieren.
**Effekt:** DRY + Konsistenzfix.
---
## 9. Redundantes `new Decimal(v)` in linear-data entfernen
**Datei:** `hugo/layouts/partials/conversion/linear-data.html`
`convert: v => new Decimal(v).times(...)` `v` kommt bereits als `Decimal` aus
`prepareValue`. Temperaturen und Währungen nutzen `v` direkt.
**Effekt:** Konsistentes Verhalten über alle Engines.
---
## 10. `_content.gotmpl` in Teil-Partials splitten
**Datei:** `hugo/content/_content.gotmpl`
Die Datei ist 140+ Zeilen lang und mischt drei Konzerne:
Währungs-Page-Generierung, Linear-Page-Generierung und Temperaturen-Page-Generierung.
**Vorschlag:**
`hugo/layouts/partials/content-generators/currencies.html`,
`linear.html`, `temperatures.html`.
**Effekt:** Besseres Verständnis des Bauprozesses, leichteres Testen einzelner
Generatoren.
---
## 11. Stille Fehler bei Währungs-Fetch im Build loggen
**Datei:** `hugo/layouts/partials/available-currencies.html`
Der Fehlerfall von `resources.GetRemote` wird abgefangen, aber nicht geloggt
(`{{ with .Err }}{{ end }}`). `_content.gotmpl` macht das besser mit `warnf`.
**Effekt:** Einfacheres Debuggen bei Build-Zeit-Fehlern.
---
## Nicht empfohlen
- **SEO-Text-Partials vereinheitlichen:** 155 Dateien unter `partials/texts/`.
Die sind inhaltsgetrieben, keine Code-Redundanz.
- **Alle `conversion_engine` Defaults aus JSON entfernen:** Theoretisch
defaultbar, aber die explizite Deklaration in jeder Datei ist defensiver und
selbsterklärend.