164 lines
4.8 KiB
Markdown
164 lines
4.8 KiB
Markdown
# 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.
|