diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml index 03bb7af..f218ab5 100644 --- a/.github/workflows/quality.yml +++ b/.github/workflows/quality.yml @@ -18,43 +18,56 @@ jobs: - name: Checkout uses: actions/checkout@v4 - - name: HTML-Validierung (newtab.html existiert) + - name: Projektstruktur prüfen run: | echo "Prüfe Projektstruktur..." test -f manifest.json || (echo "FEHLER: manifest.json fehlt!" && exit 1) test -f manifest.firefox.json || (echo "FEHLER: manifest.firefox.json fehlt!" && exit 1) + test -f manifest.opera.json || (echo "FEHLER: manifest.opera.json fehlt!" && exit 1) test -f newtab.html || (echo "FEHLER: newtab.html fehlt!" && exit 1) test -d src/js || (echo "FEHLER: src/js/ fehlt!" && exit 1) + test -d src/js/opera || (echo "FEHLER: src/js/opera/ fehlt!" && exit 1) test -d src/css || (echo "FEHLER: src/css/ fehlt!" && exit 1) test -d assets/icons || (echo "FEHLER: assets/icons/ fehlt!" && exit 1) test -d assets/themes || (echo "FEHLER: assets/themes/ fehlt!" && exit 1) + test -d assets/fonts || (echo "FEHLER: assets/fonts/ fehlt!" && exit 1) echo "Projektstruktur OK" - - name: Manifest-Validierung + - name: Manifest-Validierung (alle 3) run: | - echo "Prüfe manifest.json..." + echo "Prüfe Manifests..." python3 -c " import json, sys + with open('manifest.json') as f: m = json.load(f) - assert m.get('manifest_version') == 3, 'Manifest V3 erwartet' - assert m.get('name'), 'Name fehlt' - assert m.get('version'), 'Version fehlt' - assert 'storage' in m.get('permissions', []), 'Storage Permission fehlt' + assert m.get('manifest_version') == 3, 'Chrome: Manifest V3 erwartet' + assert m.get('name'), 'Chrome: Name fehlt' + assert m.get('version'), 'Chrome: Version fehlt' + assert 'storage' in m.get('permissions', []), 'Chrome: Storage Permission fehlt' print('manifest.json (V3) OK — Version:', m['version']) with open('manifest.firefox.json') as f: mf = json.load(f) - assert mf.get('manifest_version') == 2, 'Firefox Manifest V2 erwartet' - assert mf['version'] == m['version'], 'Versionen stimmen nicht überein!' - print('manifest.firefox.json (V2) OK — Version:', mf['version']) + assert mf.get('manifest_version') == 3, 'Firefox: Manifest V3 erwartet' + assert mf['version'] == m['version'], 'Firefox: Version stimmt nicht mit Chrome überein!' + assert 'browser_specific_settings' in mf, 'Firefox: browser_specific_settings fehlt' + print('manifest.firefox.json (V3) OK — Version:', mf['version']) + + with open('manifest.opera.json') as f: + mo = json.load(f) + assert mo.get('manifest_version') == 3, 'Opera: Manifest V3 erwartet' + assert mo['version'] == m['version'], 'Opera: Version stimmt nicht mit Chrome überein!' + assert 'tabs' in mo.get('permissions', []), 'Opera: Tabs Permission fehlt' + assert 'background' in mo, 'Opera: Background Service Worker fehlt' + print('manifest.opera.json (V3) OK — Version:', mo['version']) " - name: JavaScript Syntax-Check run: | echo "Prüfe JavaScript-Syntax..." ERRORS=0 - for f in src/js/*.js; do + for f in src/js/*.js src/js/opera/*.js; do if ! node --check "$f" 2>&1; then echo "SYNTAX-FEHLER in $f" ERRORS=$((ERRORS + 1)) @@ -77,12 +90,18 @@ jobs: run: | MANIFEST_VER=$(python3 -c "import json; print(json.load(open('manifest.json'))['version'])") FIREFOX_VER=$(python3 -c "import json; print(json.load(open('manifest.firefox.json'))['version'])") + OPERA_VER=$(python3 -c "import json; print(json.load(open('manifest.opera.json'))['version'])") HTML_VER=$(grep -oP 'Version \K[0-9]+\.[0-9]+\.[0-9]+' newtab.html || echo 'NICHT GEFUNDEN') echo "manifest.json: $MANIFEST_VER" echo "manifest.firefox.json: $FIREFOX_VER" + echo "manifest.opera.json: $OPERA_VER" echo "newtab.html: $HTML_VER" if [ "$MANIFEST_VER" != "$FIREFOX_VER" ]; then - echo "FEHLER: Versionen in Manifests stimmen nicht überein!" + echo "FEHLER: Chrome/Firefox Versionen stimmen nicht überein!" + exit 1 + fi + if [ "$MANIFEST_VER" != "$OPERA_VER" ]; then + echo "FEHLER: Chrome/Opera Versionen stimmen nicht überein!" exit 1 fi if [ "$MANIFEST_VER" != "$HTML_VER" ]; then diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3835843..6821da5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -# Release — erstellt ZIP-Pakete für Chrome und Firefox bei neuem Tag +# Release — erstellt ZIP-Pakete für Chrome, Firefox und Opera bei neuem Tag name: Release on: @@ -25,18 +25,25 @@ jobs: run: | mkdir -p dist zip -r "dist/hellion-newtab-${{ steps.version.outputs.tag }}-chrome.zip" \ - manifest.json newtab.html src/ assets/ \ - -x "*.git*" "dist/*" ".github/*" + manifest.json newtab.html src/js/*.js src/css/ assets/ \ + -x "*.git*" "dist/*" ".github/*" "src/js/opera/*" - - name: Firefox ZIP erstellen (Manifest V2) + - name: Firefox ZIP erstellen (Manifest V3) run: | - # manifest.firefox.json wird zu manifest.json für Firefox cp manifest.json manifest.chrome-backup.json cp manifest.firefox.json manifest.json zip -r "dist/hellion-newtab-${{ steps.version.outputs.tag }}-firefox.zip" \ - manifest.json newtab.html src/ assets/ \ - -x "*.git*" "dist/*" ".github/*" "manifest.chrome-backup.json" "manifest.firefox.json" - # Wiederherstellen + manifest.json newtab.html src/js/*.js src/css/ assets/ \ + -x "*.git*" "dist/*" ".github/*" "manifest.chrome-backup.json" "manifest.firefox.json" "src/js/opera/*" + mv manifest.chrome-backup.json manifest.json + + - name: Opera/Opera GX ZIP erstellen (Manifest V3 + Workaround) + run: | + cp manifest.json manifest.chrome-backup.json + cp manifest.opera.json manifest.json + zip -r "dist/hellion-newtab-${{ steps.version.outputs.tag }}-opera.zip" \ + manifest.json newtab.html src/js/*.js src/js/opera/ src/css/ assets/ \ + -x "*.git*" "dist/*" ".github/*" "manifest.chrome-backup.json" "manifest.opera.json" mv manifest.chrome-backup.json manifest.json - name: SHA256 Checksummen erstellen @@ -53,8 +60,9 @@ jobs: ## Hellion NewTab ${{ steps.version.outputs.tag }} ### Installation - - **Chrome / Edge / Brave / Opera / Vivaldi:** `hellion-newtab-${{ steps.version.outputs.tag }}-chrome.zip` herunterladen und entpacken - - **Firefox:** `hellion-newtab-${{ steps.version.outputs.tag }}-firefox.zip` herunterladen und entpacken + - **Chrome / Edge / Brave / Vivaldi:** `hellion-newtab-${{ steps.version.outputs.tag }}-chrome.zip` + - **Firefox:** `hellion-newtab-${{ steps.version.outputs.tag }}-firefox.zip` + - **Opera / Opera GX:** `hellion-newtab-${{ steps.version.outputs.tag }}-opera.zip` Siehe [README](README.md) für die vollständige Installationsanleitung. @@ -63,5 +71,6 @@ jobs: files: | dist/hellion-newtab-${{ steps.version.outputs.tag }}-chrome.zip dist/hellion-newtab-${{ steps.version.outputs.tag }}-firefox.zip + dist/hellion-newtab-${{ steps.version.outputs.tag }}-opera.zip dist/checksums-sha256.txt generate_release_notes: true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2936dda --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,92 @@ +# ⬡ Hellion Dashboard — Changelog + +Alle relevanten Änderungen pro Version. Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.0.0/). + +--- + +### v1.5.2 — 21.03.2026 + +#### Neue Features + +- **Custom Dialog-System** — Native `confirm()` und `alert()` durch Frosted-Glass-Dialoge ersetzt (`dialog.js`) +- **Onboarding** — 6-stufiger Willkommens-Flow beim ersten Start mit Boards, Themes, Features und Backup-Hinweis +- **Backup-Reminder** — Erinnert alle 7 Tage an JSON-Export, warnt vor Datenverlust bei Browser-Reset +- **Theme-Modal** — Theme-Picker als eigenes Modal aus Settings ausgelagert, eigener Header-Button +- **Accordion-Settings** — Alle Settings-Sektionen einklappbar mit Chevron (About/Danger Zone standardmäßig zu) + +#### Verbesserungen + +- Fonts von Google Fonts API auf lokale WOFF2-Dateien umgestellt (DSGVO) +- Ungenutzte Font-Dateien entfernt (~388 KB gespart) +- `innerHTML` komplett durch `createElement`/`createElementNS` ersetzt (XSS-Schutz) +- SVG-Icons via `createElementNS` statt Inline-HTML +- Drag & Drop: Inline-Styles durch CSS-Klassen ersetzt (`.drag-ghost`, `.drag-over`, `.dragging-source`) +- Suchleisten-Toggle von DATA nach BEHAVIOR verschoben +- Nicht implementiertes "Quick Save" UI-Element entfernt +- Onboarding wiederholbar über Settings → Help + +#### Opera / Opera GX + +- `manifest.opera.json` hinzugefügt (MV3 mit Workaround-Skripten) +- `src/js/opera/background.js` — Tab-Management gegen Opera Speed Dial +- `src/js/opera/redirect.js` — Content Script Redirect bei `document_start` + +#### Firefox + +- `manifest.firefox.json` auf Manifest V3 migriert +- `browser_specific_settings` mit Gecko-ID und `data_collection_permissions` + +#### Build & CI + +- GitHub Actions: Release erstellt jetzt 3 ZIP-Pakete (Chrome, Firefox, Opera) +- Quality-Check prüft alle 3 Manifests und Opera-Ordner + +--- + +### v1.2.0 — 20.03.2026 + +- Projektstruktur in `src/js/`, `src/css/`, `assets/` aufgeteilt +- JS in 10 Module aufgeteilt (storage, state, themes, boards, drag, settings, search, sticky, data, app) +- Firefox-Kompatibilität (`manifest.firefox.json`, Manifest V3) +- Vivaldi bestätigt kompatibel +- Theme-Bildpfade korrigiert (Settings Preview) +- URL-Validierung bei Bookmark-Erstellung +- JSON-Import mit Board- und Bookmark-Struktur-Validierung +- XSS-Schutz: `createElement` statt `innerHTML` für Bookmarks +- Storage-Quota-Prüfung mit Warnung bei 8 MB+ +- Event Delegation für Bookmark-Klicks (Performance) +- Responsive Design (Tablet 768px, Smartphone 480px) +- Sticky Note Header-Kollision behoben +- FileReader-Fehlerbehandlung für Hintergrundbild-Upload +- GitHub Actions: Security Scan, Code Quality, Release Automation +- 3 Themes ersetzt: Astronaut → Nebula, Cosmic Clock → Crescent, Void Mage → Event Horizon +- Alle Theme-Bilder lizenzrechtlich geprüft und dokumentiert +- LICENSE (CC BY-NC-SA 4.0), SECURITY.md und DISCLAIMER.md hinzugefügt + +--- + +### v1.1.0 — 20.03.2026 + +- 5 neue Themes (Merchantman, Julia & Jin, SC Sunset, Hellion HUD, Hellion Energy) +- Suchleiste (Google / DuckDuckGo / Bing) +- Sticky Note Widget +- JSON Export & Import +- Datum neben der Uhr +- About / Impressum in Settings +- Board Blur-Funktion (Privat-Modus) +- Drag & Drop auf Pointer Events umgestellt +- Opera / Opera GX Kompatibilität + +--- + +### v1.0.0 — 20.03.2026 + +- Initiales Release +- Boards & Bookmarks mit Drag & Drop +- 3 Themes (Nebula, Crescent, Event Horizon) +- HTML-Import (Browser-Lesezeichen) +- Settings Panel + +--- + +**Hellion NewTab** — [Hellion Online Media](https://hellion-media.de) — JonKazama-Hellion \ No newline at end of file diff --git a/README.md b/README.md index f633dd1..3074e91 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -# ⬡ Hellion NewTab v1.2.0 +# ⬡ Hellion Dashboard v1.5.2 -![Version](https://img.shields.io/badge/Version-1.2.0-blue) +![Version](https://img.shields.io/badge/Version-1.5.2-blue) ![JavaScript](https://img.shields.io/badge/JavaScript-Vanilla%20ES2020-F7DF1E?logo=javascript&logoColor=black) -![Manifest](https://img.shields.io/badge/Manifest-V3%20%7C%20V2-green) +![Manifest](https://img.shields.io/badge/Manifest-V3-green) ![License](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-orange) ![Privacy](https://img.shields.io/badge/Privacy-100%25%20Lokal-448f45) @@ -12,7 +12,7 @@ Ein persönlicher Bookmark-Dashboard als Browser-Extension. Boards, Drag & Drop, 8 Themes, Suchleiste, Sticky Notes — alles im Browser, alles offline. Keine externe Datenübertragung, keine Tracker, keine Analytics, keine Werbung. -Entwickelt von **[Hellion Online Media](https://hellion-media.de)** — JonKazama-Hellion. +Entwickelt von **[Hellion Online Media — Florian Wathling](https://hellion-media.de)** — JonKazama-Hellion. --- @@ -54,20 +54,20 @@ Was angezeigt wird, ist was gespeichert ist. Keine Magie. ### 8 Themes | Theme | Akzent | Stil | -| --- | --- | --- | -| Nebula | Magenta | Cosmic Nebula | -| Crescent | Gold | Minimalist Night | -| Event Horizon | Orange | Deep Space | -| Merchantman | Teal | Industrial Sci-Fi | -| Julia & Jin | Blau | FFXIV Night | -| SC Sunset | Amber | Planet-Side | -| Hellion HUD | Grün | Circuit Board | -| Hellion Energy | Matrix-Grün | Tactical | +|---|---|---| +| Nebula | `#b359ff` Magenta | Cosmic Nebula | +| Crescent | `#d4bd8a` Gold | Minimalist Night | +| Event Horizon | `#9d5cff` Purple | Deep Space | +| Merchantman | `#2eb8b8` Emerald | Industrial Sci-Fi | +| Julia & Jin | `#7db3ff` Aetherial Blue | FFXIV Night | +| SC Sunset | `#ff8c3d` Amber | Planet-Side | +| Hellion HUD | `#32ff6a` Neon Green | Circuit Board | +| Hellion Energy | `#1eff8e` Acid Green | Tactical | ### Bild-Credits | Theme | Quelle | Lizenz | -| --- | --- | --- | +|---|---|---| | Nebula | [Temel / mrwashingt0n](https://pixabay.com/de/users/mrwashingt0n-15745216/) auf Pixabay | Pixabay License (frei) | | Crescent | [Daniil Silantev](https://unsplash.com) auf Unsplash | Unsplash License (frei) | | Event Horizon | Eigenes Werk — Stillframe von [hellion-initiative.online](https://hellion-initiative.online) | Hellion Online Media | @@ -77,55 +77,83 @@ Was angezeigt wird, ist was gespeichert ist. Keine Magie. | Hellion HUD | Eigenes Werk — AI-generiert und nachbearbeitet für hellion-media.de | Hellion Online Media | | Hellion Energy | Eigenes Werk — AI-generiert für hellion-media.de | Hellion Online Media | -### Settings +### Onboarding & Dialoge +- 6-stufiger Willkommens-Flow beim ersten Start +- Custom Frosted-Glass-Dialoge statt nativer Browser-Popups +- Backup-Reminder alle 7 Tage (warnt vor Datenverlust bei Browser-Reset) + +### Settings (Accordion) + +- Einklappbare Sektionen mit Chevron — About/Danger Zone standardmäßig geschlossen - Compact Mode — reduziert Abstände für mehr Bookmarks - Shorten Titles — kürzt lange Titel auf eine Zeile - Open in New Tab — Bookmarks in neuem Tab öffnen - Show Descriptions — Beschreibungen unter Bookmarks anzeigen - Hide Extra Bookmarks — Boards ab 5/10/20 Bookmarks einklappen -- Hintergrundbild — URL oder lokaler Upload - Suchleiste ein/ausblenden - JSON Export / Import +- Onboarding wiederholbar - Danger Zone — Reset aller Daten +### Theme-Picker (eigener Header-Button) + +- 8 Themes als zentriertes Modal +- Hintergrundbild per URL oder lokaler Upload + --- ## Browser-Kompatibilität | Browser | Status | Manifest | -| --- | --- | --- | -| Chrome | Kompatibel | V3 (`manifest.json`) | -| Edge | Kompatibel | V3 (`manifest.json`) | -| Brave | Kompatibel | V3 (`manifest.json`) | -| Opera | Kompatibel | V3 (`manifest.json`) | -| Opera GX | Kompatibel | V3 (`manifest.json`) | -| Vivaldi | Kompatibel | V3 (`manifest.json`) | -| Firefox | Kompatibel | V2 (`manifest.firefox.json`) | +|---|---|---| +| Chrome | ✅ Kompatibel | V3 (`manifest.json`) | +| Edge | ✅ Kompatibel | V3 (`manifest.json`) | +| Brave | ✅ Kompatibel | V3 (`manifest.json`) | +| Opera | ✅ Kompatibel | V3 (`manifest.opera.json`) | +| Opera GX | ✅ Kompatibel | V3 (`manifest.opera.json`) | +| Vivaldi | ✅ Kompatibel | V3 (`manifest.json`) | +| Firefox | ✅ Kompatibel | V3 (`manifest.firefox.json`) | -> **Firefox-Hinweis:** Firefox verwendet aktuell Manifest V2. Mozilla arbeitet an MV3-Support — -> sobald stabil, wird die Extension migriert. MV2 wird von Mozilla weiterhin unterstützt. +> **Firefox-Hinweis:** Ab v1.2.0 läuft die Extension auf Manifest V3 — identisch zu Chrome/Edge. +> `manifest.firefox.json` bleibt als separate Datei erhalten für Firefox-spezifische Anpassungen. --- ## Installation -### Chrome / Edge / Brave / Opera / Opera GX / Vivaldi +### Chrome / Edge / Brave / Vivaldi ```text 1. Repository als ZIP herunterladen oder git clone -2. chrome://extensions öffnen (oder edge:// / brave:// / opera://) +2. chrome://extensions öffnen (bzw. edge:// / brave://) 3. Entwicklermodus aktivieren 4. "Entpackte Erweiterung laden" → Ordner auswählen in dem manifest.json liegt 5. Neuen Tab öffnen ``` -### Firefox - -Firefox benötigt `manifest.json` im Format V2. +### Opera / Opera GX ```bash -# manifest.json durch Firefox-Version ersetzen: +# manifest.opera.json als manifest.json verwenden: +copy manifest.opera.json manifest.json # Windows +cp manifest.opera.json manifest.json # Linux/Mac +``` + +```text +1. opera://extensions öffnen +2. Entwicklermodus aktivieren +3. "Entpackte Erweiterung laden" → Ordner auswählen +4. Neuen Tab öffnen +``` + +> **Opera-Hinweis:** Opera GX priorisiert Speed Dial — der enthaltene Workaround +> übernimmt die New-Tab-Seite zuverlässig. Details: [src/js/opera/README.md](src/js/opera/README.md) + +### Firefox + +```bash +# manifest.firefox.json als manifest.json verwenden: copy manifest.firefox.json manifest.json # Windows cp manifest.firefox.json manifest.json # Linux/Mac ``` @@ -144,7 +172,7 @@ cp manifest.firefox.json manifest.json # Linux/Mac ## Browser-Bookmarks exportieren & importieren | Browser | Export-Pfad | -| --- | --- | +|---|---| | Chrome / Edge | Einstellungen → Lesezeichen → Exportieren | | Firefox | Lesezeichen → Alle Lesezeichen → Importieren und Sichern → Als HTML exportieren | @@ -166,11 +194,11 @@ Die exportierte `.html`-Datei über den **Import**-Button in der Extension laden ## Tech-Stack | Komponente | Details | -| --- | --- | +|---|---| | Sprache | JavaScript (Vanilla ES2020, keine Frameworks) | | Styling | CSS Custom Properties (Theme-System) | -| Fonts | Google Fonts (Rajdhani, Inter, Cinzel) | -| Storage | chrome.storage.local / localStorage Fallback | +| Fonts | Lokale Fonts (Rajdhani, Inter, Cinzel) | +| Storage | `chrome.storage.local` / `localStorage` Fallback | | Favicons | Google Favicons API (`/s2/favicons`) | | Drag & Drop | Pointer Events API (nativ) | | Build | Kein Build-Schritt — direkt lauffähig | @@ -182,10 +210,12 @@ Die exportierte `.html`-Datei über den **Import**-Button in der Extension laden ```text hellion-newtab/ -├── manifest.json # Chrome, Edge, Brave, Opera, Vivaldi (MV3) -├── manifest.firefox.json # Firefox (MV2) +├── manifest.json # Chrome, Edge, Brave, Vivaldi (MV3) +├── manifest.firefox.json # Firefox (MV3) +├── manifest.opera.json # Opera / Opera GX (MV3 + Workaround) ├── newtab.html # Haupt-HTML (UI-Struktur, Modals, Settings Panel) ├── LICENSE # CC BY-NC-SA 4.0 +├── CHANGELOG.md # Versionshistorie ├── SECURITY.md # Sicherheitsrichtlinie und Meldeprozess ├── DISCLAIMER.md # Haftungsausschluss │ @@ -193,27 +223,25 @@ hellion-newtab/ │ ├── js/ │ │ ├── storage.js # Storage Abstraction + Quota-Prüfung │ │ ├── state.js # Globaler State, Defaults, Hilfsfunktionen +│ │ ├── dialog.js # Custom Dialog-System (HellionDialog.alert/confirm) │ │ ├── themes.js # Theme-Definitionen & Anwendungslogik │ │ ├── boards.js # Board/Bookmark Rendering, Event Delegation, Modals │ │ ├── drag.js # Drag & Drop (Pointer Events, Board + Bookmark) -│ │ ├── settings.js # Settings Panel (Toggles, Theme-Picker, Background) +│ │ ├── settings.js # Settings Panel, Theme-Modal, Accordion │ │ ├── search.js # Suchleiste (Google, DuckDuckGo, Bing) │ │ ├── sticky.js # Sticky Note Widget (Drag, Persist, Toggle) │ │ ├── data.js # JSON Export / Import mit Validierung -│ │ └── app.js # Init, Clock, globale Events (Einstiegspunkt) +│ │ ├── onboarding.js # Mehrstufiger Willkommens-Flow +│ │ ├── app.js # Init, Clock, globale Events (Einstiegspunkt) +│ │ └── opera/ # Opera GX Workaround-Skripte +│ │ ├── background.js # Tab-Management gegen Speed Dial +│ │ └── redirect.js # Content Script Redirect │ └── css/ │ └── main.css # Styles + Theme-System + Responsive Breakpoints │ ├── assets/ +│ ├── fonts/ # Lokale Fonts (Rajdhani, Inter, Cinzel) │ ├── themes/ # 8 Theme-Hintergrundbilder -│ │ ├── bg-nebula.jpg -│ │ ├── bg-crescent.jpg -│ │ ├── bg-event-horizon.jpg -│ │ ├── bg-merchantman.webp -│ │ ├── bg-julia-jin.png -│ │ ├── bg-sc-sunset.jpg -│ │ ├── bg-hellion-hud.png -│ │ └── bg-hellion-energy.jpg │ └── icons/ │ ├── icon16.png │ ├── icon48.png @@ -223,16 +251,16 @@ hellion-newtab/ └── workflows/ ├── security.yml # CodeQL-Analyse + Dependency Review ├── quality.yml # Struktur, Manifest, Syntax, Versions-Konsistenz - └── release.yml # ZIP-Pakete (Chrome + Firefox) + SHA256 Checksummen + └── release.yml # ZIP-Pakete (Chrome + Firefox + Opera) + SHA256 ``` ### Design-Prinzipien - **Zero Dependencies** — Kein npm, kein Build, kein Framework. Direkt lauffähig - **Privacy First** — Alle Daten lokal, kein Server-Kontakt -- **Modular** — 10 JS-Dateien mit klarer Zuständigkeit +- **Modular** — 12 JS-Dateien mit klarer Zuständigkeit - **Responsive** — Tablet (768px) und Smartphone (480px) Breakpoints -- **Secure** — createElement statt innerHTML, URL-Validierung, Storage-Fehlerbehandlung +- **Secure** — `createElement` statt `innerHTML`, URL-Validierung, Storage-Fehlerbehandlung - **Event Delegation** — Ein Listener pro Board-Liste statt pro Bookmark (Performance) - **Theme-System** — CSS Custom Properties, 8 Themes, Custom-Background-Support @@ -257,14 +285,14 @@ hellion-newtab/ ### Release (`release.yml`) - **Trigger** — Bei Git-Tag (`v*`) -- **Pakete** — Chrome-ZIP (MV3) + Firefox-ZIP (MV2) +- **Pakete** — Chrome-ZIP + Firefox-ZIP + Opera-ZIP (alle MV3) - **Checksummen** — SHA256 für alle Artefakte - **GitHub Release** — Automatisch mit Installationsanleitung ```bash # Release erstellen: -git tag v1.2.0 -git push origin v1.2.0 +git tag v1.5.2 +git push origin v1.5.2 # → GitHub Action erstellt automatisch Release mit ZIP-Dateien ``` @@ -304,7 +332,7 @@ Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Vollständige Lizenz: [LICENSE](LICENSE) | [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) | | | -| --- | --- | +|---|---| | **Entwickler** | Florian Wathling | | **Unternehmen** | Hellion Online Media | | **Web** | [hellion-media.de](https://hellion-media.de) | @@ -314,54 +342,12 @@ Vollständige Lizenz: [LICENSE](LICENSE) | [CC BY-NC-SA 4.0](https://creativecom --- -## Changelog - -### v1.2.0 — 20.03.2026 - -- Projektstruktur in `src/js/`, `src/css/`, `assets/` aufgeteilt -- JS in 10 Module aufgeteilt (storage, state, themes, boards, drag, settings, search, sticky, data, app) -- Firefox-Kompatibilität (`manifest.firefox.json`, Manifest V2) -- Vivaldi bestätigt kompatibel -- Theme-Bildpfade korrigiert (Settings Preview) -- URL-Validierung bei Bookmark-Erstellung -- JSON-Import mit Board- und Bookmark-Struktur-Validierung -- XSS-Schutz: createElement statt innerHTML für Bookmarks -- Storage-Quota-Prüfung mit Warnung bei 8 MB+ -- Event Delegation für Bookmark-Klicks (Performance) -- Responsive Design (Tablet 768px, Smartphone 480px) -- Sticky Note Header-Kollision behoben -- FileReader-Fehlerbehandlung für Hintergrundbild-Upload -- GitHub Actions: Security Scan, Code Quality, Release Automation -- 3 Themes ersetzt: Astronaut → Nebula, Cosmic Clock → Crescent, Void Mage → Event Horizon -- Alle Theme-Bilder lizenzrechtlich geprüft und dokumentiert -- LICENSE (CC BY-NC-SA 4.0), SECURITY.md und DISCLAIMER.md hinzugefügt - -### v1.1.0 — 20.03.2026 - -- 5 neue Themes (Merchantman, Julia & Jin, SC Sunset, Hellion HUD, Hellion Energy) -- Suchleiste (Google / DuckDuckGo / Bing) -- Sticky Note Widget -- JSON Export & Import -- Datum neben der Uhr -- About / Impressum in Settings -- Board Blur-Funktion (Privat-Modus) -- Drag & Drop auf Pointer Events umgestellt -- Opera / Opera GX Kompatibilität - -### v1.0.0 — 20.03.2026 - -- Initiales Release -- Boards & Bookmarks mit Drag & Drop -- 3 Themes (Nebula, Crescent, Event Horizon) -- HTML-Import (Browser-Lesezeichen) -- Settings Panel - ---- - ### Einsatz von AI AI (Claude Code, Opus 4.6 von Anthropic) wurde als Hilfsmittel eingesetzt — für Fehleridentifikation, Code-Review und Qualitätssicherung. Architektur, Features und alle Entscheidungen sind Eigenleistung. --- -**Hellion NewTab** — [Hellion Online Media](https://hellion-media.de) — JonKazama-Hellion +> Vollständige Versionshistorie: [CHANGELOG.md](CHANGELOG.md) + +**Hellion NewTab** — [Hellion Online Media](https://hellion-media.de) — JonKazama-Hellion \ No newline at end of file