Commit Graph

65 Commits

Author SHA1 Message Date
JonKazama-Hellion 153db9c24d feat(calculator): Stationeers Calculator mit Gas/Furnace/Solar/Atmo
4 Sub-Modi: PV=nRT Gas-Rechner, Furnace Combustion,
Solar/Battery Planung und Atmosphere Mixer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 22:20:09 +02:00
JonKazama-Hellion 2e691b8b51 fix(calculator): save() überschreibt Game-Mode Sub-States nicht mehr
data.calculator wurde bei jedem save() komplett ersetzt, wodurch
factorio/satisfactory Sub-Mode-Präferenzen verloren gingen.
Jetzt werden nur die Core-Properties einzeln gesetzt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 22:16:19 +02:00
JonKazama-Hellion 11419bd589 feat(calculator): Factorio Calculator mit Ratio, Belt und Maschinen-Modus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 22:12:28 +02:00
JonKazama-Hellion 27fa4f53af feat(calculator): Satisfactory Calculator mit Overclock-Power 2026-04-16 22:10:11 +02:00
JonKazama-Hellion 8fdd46beec feat(calculator): Unit-Converter mit 6 Kategorien 2026-04-16 22:05:51 +02:00
JonKazama-Hellion 3dd9723271 fix(calc-scientific): sqrt/square mit lastResult, Negate-Regex
sqrt und x² transferieren _lastResult in _currentExpr wenn Expression leer.
handleNegate Regex akzeptiert auch dezimal-first Zahlen (.5).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 22:03:02 +02:00
JonKazama-Hellion 2f23c13de1 feat(calculator): Scientific-Modus implementieren
Neuer Taschenrechner-Modus mit 6 wissenschaftlichen Buttons (√, x², xⁿ, π, e, ±),
Formel-Helfer (Kreisfläche, Kreisumfang, °C↔°F, Pythagoras, Prozent) und
erweiterter Tastaturunterstützung (p → Pi, ^ → Potenz).

- calc-scientific.js: IIFE, registriert 'scientific' Mode via Calculator.registerMode()
- newtab.html: Script-Tag nach calculator.js eingefügt (Load-Order eingehalten)
- i18n.js: 15 neue Keys pro Sprache (DE + EN)
- main.css: Styles für .calc-sci-buttons und .calc-formula-* Komponenten
2026-04-16 21:59:10 +02:00
JonKazama-Hellion f5cebd8d34 fix(calculator): Dezimal-Eingabe nach ^ ermöglichen
Split-Regex für Dezimalpunkt-Check um ^ erweitern,
damit z.B. 2.3^1.5 korrekt eingegeben werden kann.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:56:29 +02:00
JonKazama-Hellion 10318008e6 feat(calculator): Parser um ^ (Potenz) und sqrt() erweitern 2026-04-16 21:51:30 +02:00
JonKazama-Hellion 50319f8ba9 fix(calculator): init-Reihenfolge und save() Daten-Erhalt
Standard-Modus vor open() registrieren (verhindert leeres Widget bei Restore).
save() nutzt read-modify-write statt Overwrite (bewahrt Timer/ImageRef-Daten).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:49:51 +02:00
JonKazama-Hellion b71e8cde1b fix(calculator): Auto-Resize via DOM statt nicht-existierendem WidgetManager.resize()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:45:35 +02:00
JonKazama-Hellion 2487ac772f feat(calculator): Tab-System mit registerMode() und switchMode()
- Neue Eigenschaften: _modes (Map), _activeMode, _tabBarEl
- registerMode() für externe Mode-Dateien, aktualisiert Tab-Bar live
- renderBody() baut jetzt Tab-Bar + .calc-mode-body Container
- _renderTabBar(), _updateTabBar(), switchMode() implementiert
- _renderStandardMode() extrahiert aus altem renderBody()
- save()/load(): activeMode wird persistiert und wiederhergestellt
- onClose(): aktiven Modus sauber aufräumen, _tabBarEl zurücksetzen
- CSS: .calc-tab-bar, .calc-tab, .calc-tab-icon, .calc-tab-label, .calc-mode-body
- i18n: calculator.tab.standard (DE + EN)
2026-04-16 21:43:03 +02:00
JonKazama-Hellion 7be391de99 docs(plan): Calculator Upgrade v2.1.0 Implementierungsplan
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:38:57 +02:00
JonKazama-Hellion cebf277a5d docs(spec): Calculator Upgrade v2.1.0 Design-Spec
6 Modi: Standard, Scientific, Unit-Converter, Satisfactory, Factorio, Stationeers.
Tab-basierte Architektur, Registrierungs-Pattern, erweiteter Shunting-Yard Parser.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 21:22:07 +02:00
JonKazama-Hellion 92c5b23b44 fix: image-ref Titel-Bug, CSP, ARIA-Labels, Onboarding i18n
- image-ref.js: .widget-title-text → .widget-title (Titel-Update war kaputt)
- Alle 3 Manifests: explizites content_security_policy (script-src/object-src 'self')
- i18n.js: applyLanguage() setzt aria-label synchron zu title
- newtab.html: 6 Close-Buttons + Search-Submit mit data-i18n-title
- i18n.js: 4 neue Keys (dialog.close, search.submit_title, onboarding.tradecenter_desc)
- onboarding.js: TradeCenter-Beschreibung auf t() umgestellt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:51:54 +02:00
JonKazama-Hellion 7f22627272 Merge branch 'feature/hardening-v2.0.1' — Hardening Release v2.0.1
Security: URL-Validierung (bgUrl + Import), immutable Data-Mapping
Stability: Widget Event-System (EventTarget), transitionend Race Fix
Privacy: Lokale Letter-Icons statt Google Favicons API
Compat: backdrop-filter Fallback, _locales in Release-ZIPs
i18n: 10 fehlende Übersetzungs-Keys ergänzt
Quality: Clock Interval ID, Notes-Import über init()
2026-04-16 20:37:03 +02:00
JonKazama-Hellion 9b6515aab3 fix(ci): _locales/ in alle Release-ZIPs aufnehmen
Manifest nutzt __MSG_extName__ / __MSG_extDesc__ mit default_locale,
aber die _locales/ Dateien fehlten in allen drei ZIP-Befehlen.
Ohne sie kann der Browser die Extension nicht laden.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:35:59 +02:00
JonKazama-Hellion 675e21d886 fix(release): fehlende Versionsnummern + bgUrl-Validierung
Drei Stellen hatten noch '2.0.0' statt '2.0.1': newtab.html About-Sektion,
data.js Export und app.js Backup-Export. FileReader-Upload in settings.js
validiert jetzt bgUrl via isValidBgUrl() (Defense-in-Depth).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:33:38 +02:00
JonKazama-Hellion 536e0771a4 chore(release): bump version to v2.0.1 — hardening release
Security fixes, widget event system, local favicons, i18n completeness,
backdrop-filter fallback, code quality improvements. See CHANGELOG.md.
2026-04-16 20:28:22 +02:00
JonKazama-Hellion 02cdee76a8 fix(i18n): complete missing translations for toolbar tooltips and button texts
Add data-i18n-title to 5 header buttons, data-i18n to 3 settings buttons.
Add 10 new keys to STRINGS.de and STRINGS.en including background URL
validation error messages.
2026-04-16 20:27:17 +02:00
JonKazama-Hellion b6d347cd15 fix(compat): add backdrop-filter fallback for Brave Shields
Add --bg-solid-fallback CSS variable to all 11 themes and a
@supports not (backdrop-filter) block. UI remains usable when
Brave Shields or strict fingerprinting settings block backdrop-filter.
2026-04-16 20:25:10 +02:00
JonKazama-Hellion 6704f4c955 feat(privacy): replace Google Favicons with local letter icons
Remove getFaviconUrl() and all external network requests. Bookmarks now
show a colored letter icon with deterministic hue based on title.
Eliminates privacy leak and Brave Shields compatibility issues.
2026-04-16 20:22:18 +02:00
JonKazama-Hellion a3e21a760f fix(security): harden JSON import with URL validation and immutable mapping
Add isSafeUrl() to block javascript:/data: URLs in imported bookmarks.
Replace mutable object mutation with immutable .map() and string length limits.
Use Notes.init()/Calculator.load()/Timer.load() instead of direct internal
mutation after import.
2026-04-16 20:20:38 +02:00
JonKazama-Hellion 82dd6e026a fix(security): validate background URL before CSS injection
Add isValidBgUrl() that only allows blob: and data:image/ protocols.
Applied in applySettings() and the manual URL input handler.
Prevents CSS injection via manipulated bgUrl storage values.
2026-04-16 20:18:42 +02:00
JonKazama-Hellion 2430d65e3a refactor(widgets): migrate Calculator, Timer, ImageRef to event listeners
Replace monkey-patching of WidgetManager.close/minimize/openWidget with
WidgetManager.on() event listeners. Eliminates 3-deep closure chain.
2026-04-16 20:15:08 +02:00
JonKazama-Hellion 30df93a4cc fix(widgets): harden minimize transitionend with fallback and property filter
- Filter transitionend by propertyName=opacity to prevent double-fire
- Add 350ms fallback setTimeout for prefers-reduced-motion / zero-duration
- Initialize _minimizing: false in create() for clean state
- Dispatch events after save() for consistent state in listeners

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:13:47 +02:00
JonKazama-Hellion b92ea5a1a4 fix(widgets): replace setTimeout with transitionend in minimize
Fixes race condition where openWidget() during the 250ms timeout would
be overridden. Uses _minimizing flag to cancel in-flight transitions.
Dispatches widget:minimize and widget:open events.
2026-04-16 20:10:30 +02:00
JonKazama-Hellion fde1fdd002 fix(widgets): dispatch close event before registry cleanup
Move widget:close dispatch before _widgets.delete() so handlers can
still query WidgetManager for the widget's state during the event.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:09:43 +02:00
JonKazama-Hellion 7cda3019c8 refactor(widgets): add EventTarget-based lifecycle event system
Add _emitter, on(), off() to WidgetManager. Dispatch widget:close event
after close(). Foundation for removing monkey-patching from widget modules.
2026-04-16 20:07:04 +02:00
JonKazama-Hellion 3de1dd3b8b docs(plan): Hardening v2.0.1 Implementierungsplan erstellen
9 Tasks, 16 Dateien, Foundation-First-Strategie.
Event-System → Widget-Migration → Security → Favicons → i18n → Quality → Release.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:29:14 +02:00
JonKazama-Hellion 63825cd393 docs(spec): Hardening v2.0.1 Design-Dokument erstellen
Audit-basierte Spec für Security, Stability, i18n und Code-Quality Fixes.
Foundation-First-Strategie: Event-System → Widget-Migration → Security → i18n → Quality.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 15:25:03 +02:00
JonKazama-Hellion c6c0d5c468 docs(release): architecture.md auf v2.0.0 aktualisieren
i18n.js und bookmark-import.js ergänzen, Load-Order und
Module-Tabelle an aktuelle newtab.html synchronisieren.
v2.0.0
2026-03-22 18:38:18 +01:00
JonKazama-Hellion dbd209bc2b docs(release): README auf v2.0.0 mit i18n-Feature aktualisieren
Version, i18n-Sektion, Architecture-Tree mit i18n.js und _locales,
Modulanzahl und Release-Beispiel aktualisiert.
2026-03-22 18:33:27 +01:00
JonKazama-Hellion 7900962c5a fix(i18n): Review-Findings beheben
- Version in newtab.html auf 2.0.0 aktualisieren
- dialog.js OK-Fallback auf t('dialog.ok') umstellen
- Duplikat-Keys widgets.minimize/close entfernen (widget.* wird genutzt)
2026-03-22 18:28:35 +01:00
JonKazama-Hellion 1bbdbdef1c feat(release): Version auf v2.0.0 bumpen — i18n Release
Alle drei Manifests, Export-Versionen und CHANGELOG aktualisiert.
2026-03-22 18:28:35 +01:00
JonKazama-Hellion f07200cd8e feat(i18n): settings.js und widgets.js auf t() umstellen
Reset-Dialog, Dateifehler, Widget-Buttons (Minimieren/Schließen)
und Default-Titel verwenden jetzt i18n-Keys.
2026-03-22 18:28:35 +01:00
JonKazama-Hellion ab165d4f75 feat(i18n): app.js Strings auf t() umstellen
Clock-Tage/Monate, Backup-Reminder, HTML-Import und
URL-Validierung verwenden jetzt i18n-Keys.
2026-03-22 18:28:35 +01:00
JonKazama-Hellion 4a66015258 feat(i18n): data.js, bookmark-import.js, storage.js auf t() umstellen 2026-03-22 18:28:35 +01:00
JonKazama-Hellion d0f870ace1 feat(i18n): calculator.js, timer.js, image-ref.js auf t() umstellen 2026-03-22 18:28:35 +01:00
JonKazama-Hellion daea57a9df feat(i18n): notes.js Strings auf t() umstellen 2026-03-22 18:28:35 +01:00
JonKazama-Hellion f937f7c39c feat(i18n): onboarding.js Strings auf t() umstellen 2026-03-22 18:28:31 +01:00
JonKazama-Hellion 3ab8847f31 feat(i18n): boards.js Strings auf t() umstellen 2026-03-22 18:28:25 +01:00
JonKazama-Hellion 36335d3cc4 feat(i18n): dialog.js Defaults auf t() umstellen 2026-03-22 18:28:20 +01:00
JonKazama-Hellion 1b39ac863b fix(i18n): Code-Quality-Review Korrekturen
- resolveLang() Hilfsfunktion extrahieren (DRY)
- JSDoc-Kommentar in I18n.init() korrigieren
- settings.export.btn Key für Export-Button trennen
- setLanguage('auto') im Reset-Handler aufrufen
2026-03-22 14:07:17 +01:00
JonKazama-Hellion 522b177470 fix(i18n): Spec-Review-Korrekturen für i18n-Grundgerüst
- header.settings DE-String korrigiert (war englisch)
- ~17 deutsche Strings die englisch waren gefixt
- I18n.init() vor applySettings() in app.js
- html lang-Attribut dynamisch via I18n setzen
- Default html lang auf en (passend zu default_locale)
2026-03-22 14:04:04 +01:00
JonKazama-Hellion f2d4e22b86 feat(i18n): i18n-Modul, _locales und data-i18n Attribute einrichten 2026-03-22 13:56:04 +01:00
JonKazama-Hellion 677344f24d docs(release): Dokumentation ins Englische übersetzen und v1.11.1 Docs
- README, CHANGELOG, DISCLAIMER, SECURITY auf Englisch übersetzen
- Projekt-Docs (architecture, patterns, widget-schema, style-guide) übersetzen
- CODEOWNERS für Master-Branch-Schutz hinzufügen
- release.yml auf Englisch übersetzen
- STYLE_GUIDE von src/css/ nach docs/ verschieben
v1.11.1
2026-03-22 13:12:24 +01:00
JonKazama-Hellion 40d4d9f37a feat(app): 3 neue Themes, WebP-Konvertierung und Browser-Bookmark-Import
- Satisfactory, Avorion und Hellion Stealth als neue Themes
- Alle 11 Theme-Bilder von JPG/PNG nach WebP konvertieren (~12 MB → 1.1 MB)
- Browser-Lesezeichen direkt importieren mit Ordner-Auswahl Modal
- Duplikat-Erkennung, URL-Validierung, Chrome/Firefox-Kompatibilität
- Version auf 1.11.1 aktualisieren (Manifeste, data.js, newtab.html, app.js)
v1.11.0
2026-03-22 13:12:24 +01:00
JonKazama-Hellion 198171b6c2 feat(app): Onboarding, Settings-Redesign und Docs für v1.9.0
- Onboarding mit Widget-Toolbar Slide und Gaming Starter Board
- Settings in Darstellung-Modal und schlankes Settings-Panel
- About-Block als fixierten Footer im Settings-Panel
- Dropdown-Optionen an Theme-Farben anpassen
- Projekt-Dokumentation (Architektur, Widget-Schema, Patterns)
- Firefox Update-URL für Store-Veröffentlichung
- Versions-Bump auf 1.9.0 in allen Manifests
2026-03-22 13:12:24 +01:00
JonKazama-Hellion 51947b229c feat(image-ref): Bild-Referenz Widget mit Session-Storage
Opt-in Widget fuer Bild-Referenzen (max. 3 gleichzeitig).
Canvas API konvertiert zu WebP, sessionStorage fuer Bilddaten.
Positionen und Labels bleiben persistent, Bilder nur pro Session.
2026-03-22 13:12:24 +01:00