Files
umrechner/REFACTOR.md

4.8 KiB
Raw Blame History

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:

{{ if eq $engine "currencies" }} ... {{ else if eq $engine "temperatures" }} ... {{ else }} ... {{ end }}

reicht ein dynamischer Partial-Aufruf:

{{ 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:

{{ $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.