191 Commits

Author SHA1 Message Date
JonKazama-Hellion 86f5644cd5 docs(readme): auf v2.4.0 aktualisiert (Version + Features: Palette/Trash/Quick-Save/freies Layout/Theme-Builder/Hintergrund)
Code Quality / Validate Extension (push) Successful in 5s
Security / scan (push) Successful in 18s
2026-06-15 08:33:33 +02:00
JonKazama-Hellion 4d1ca1bc7e release: v2.4.0
Code Quality / Validate Extension (push) Successful in 6s
Security / scan (push) Successful in 20s
Release / Build & Release (push) Successful in 4s
v2.4.0
2026-06-15 08:11:38 +02:00
JonKazama-Hellion 083e78e693 merge: v2.4.0 theme builder into development 2026-06-15 08:11:12 +02:00
JonKazama-Hellion 0001de7dd7 chore(release): Version-Bump 2.4.0 (6 Stellen) + CHANGELOG 2026-06-15 08:10:43 +02:00
JonKazama-Hellion c985a531ef fix(theme): bgLayer beim Custom-Wechsel ohne eigenes Bild leeren
Preset->Custom liess das alte Preset-Hintergrundbild im bgLayer haengen,
weil applyCustomTheme den bgLayer nie anfasste. Jetzt wird er geleert,
wenn keine gueltige bgUrl gesetzt ist, sodass --bg-primary (Solid) durchscheint.
2026-06-15 04:30:51 +02:00
JonKazama-Hellion 2af52fc46d feat(theme): Verdrahtung Custom-Theme (applySettings, selectThemeCard, Picker, Reset, Modal-Sync) 2026-06-15 04:00:59 +02:00
JonKazama-Hellion 1bd2cbb9ad feat(theme): applyCustomTheme/clearCustomTheme/syncCustomPickers + Hex-Validierung + WCAG-Kontrast 2026-06-15 03:31:25 +02:00
JonKazama-Hellion d305d37da5 feat(theme): Eigenes-Kachel + 6-Picker-Panel im Theme-Modal 2026-06-15 03:03:29 +02:00
JonKazama-Hellion 96d4eaa8a1 feat(theme): [data-theme=custom]-Block + Theme-Builder-Panel-Styling 2026-06-15 02:34:42 +02:00
JonKazama-Hellion 22e74d41bc feat(theme): i18n-Keys für Theme-Builder + Onboarding-Wortlaut entschaerft 2026-06-15 02:06:38 +02:00
JonKazama-Hellion d0feddbda0 feat(theme): customTheme-Default im State + Reset-Literal 2026-06-15 01:38:55 +02:00
JonKazama-Hellion 9beeec3182 feat(theme): eigenes Hintergrundbild um https-URLs und Quota-Schutz erweitern
- isValidBgUrl akzeptiert jetzt https:// zusätzlich zu data:/blob: (http bleibt
  ausgeschlossen wegen Mixed-Content)
- CSP img-src 'self' https: data: blob: in allen 3 Manifesten, damit remote
  Hintergründe deterministisch laden statt still am CSP-Default zu haengen
- Upload-Bilder werden vor dem Speichern per Canvas auf die Bildschirmkante
  (max 2560px) verkleinert und als WebP re-kodiert -> schont chrome.storage.local
- URL-Feld: Platzhalter lokalisierbar (data-i18n-placeholder) + Tracking-Hinweis,
  dass ein per URL geladenes Bild bei jedem Oeffnen vom fremden Server kommt
- i18n DE/EN: bg_url.desc + bg_invalid_url an https angepasst, 2 neue Keys
2026-06-14 21:34:34 +02:00
JonKazama-Hellion 42e3cf0dec ci(release): Release via Gitea-API (curl) statt go-basierter release-action
Code Quality / Validate Extension (push) Successful in 5s
Release / Build & Release (push) Successful in 6s
Security / scan (push) Successful in 42s
Die gitea.com/actions/release-action ist 'using: go' und scheitert auf dem Forge-Runner
mit exit 127 — act_runner v0.6.1 bekommt die go-Action weder im Job-Image noch im Runner
kompiliert ('go: executable file not found'). Der Schritt legt das Release jetzt per curl
gegen die Gitea-API an und laedt die Assets hoch, idempotent (vorhandenes Release/Assets
werden wiederverwendet bzw. ersetzt). Laeuft als normaler run-Step im Job-Image und ist
damit unabhaengig von go-Toolchain, Action-Cache und @main-Drift.
v2.3.0
2026-06-14 21:05:36 +02:00
JonKazama-Hellion 8c509647da merge: v2.3.0 bookmark comfort features into development 2026-06-14 20:22:11 +02:00
JonKazama-Hellion 2877edee69 release: v2.3.0
Code Quality / Validate Extension (push) Successful in 5s
Security / scan (push) Successful in 19s
Release / Build & Release (push) Failing after 12s
2026-06-14 20:22:11 +02:00
JonKazama-Hellion d041c66dfb feat(layout): Board-Position per Lock-Button fixieren
Neuer Pin-Button (custom SVG, kein Emoji) im Board-Header sperrt die Position eines
Boards. Bei gesperrtem Board (.board.locked):
- der Drag-Handle wird per CSS ausgeblendet (Flos Wunsch: Handle weg statt nur inaktiv),
- ein zweiter Guard in drag.js onDown verweigert zusaetzlich jeden Drag.
Schuetzt vor versehentlichem Verschieben (ergaenzt den 3px-Bewegungs-Schwellwert). locked
wird wie blurred persistiert, im Export/Import durchgereicht und mit ins Trash-Board geklont.
i18n DE/EN ergaenzt.
2026-06-14 20:18:00 +02:00
JonKazama-Hellion 520a062049 fix(quick-save): mid-drag gedrainter Quick-Save wird nach Drag-Ende gerendert
Der Drain laesst renderBoards() aus, solange ein Board- oder Bookmark-Drag laeuft
(replaceChildren wuerde den Drag abreissen) — holte den Render danach aber nie nach,
sodass der gespeicherte Eintrag bis zu einem unabhaengigen Fremd-Render unsichtbar blieb.
Der ausgelassene Render wird jetzt gemerkt (_renderDeferredByDrag) und drag.js ruft am
Ende jedes Drags (onUp/onCancel/Bookmark-dragend) flushQuickSaveRenderIfDeferred nach.
Idempotent: ohne ausstehenden Render kein Extra-Render bei normalen Drags.
2026-06-14 19:55:18 +02:00
JonKazama-Hellion 327bcd3385 fix(quick-save): Drain idempotent (srcId-Dedup) + isSafeUrl-Gate
Zwei Befunde aus der Integrations-Review:
- Race: der Page-Drain und der Worker machen je ein read-modify-write auf
  'quicksave_pending' ohne kontextuebergreifende Atomizitaet. Ein Worker-Append im
  await-Fenster des Drains konnte einen bereits gedrainten Eintrag in der Queue belassen,
  den ein Folge-Drain erneut in die Inbox schrieb (Duplikat). Jede eingespielte Bookmark
  traegt jetzt die Pending-id als srcId; ein erneut auftauchender Eintrag wird uebersprungen
  statt doppelt eingefuegt. boards-Write bleibt vor der Queue-Bereinigung -> kein Verlust.
- Validierung: der Drain hat e.url ohne isSafeUrl gepusht, anders als jeder andere
  Bookmark-Schreibpfad. isSafeUrl (jetzt im DOM-freien quicksave-core, http/https/ftp)
  filtert unsichere/leere Protokolle vor dem Schreiben ins Board.
2026-06-14 19:53:38 +02:00
JonKazama-Hellion 530196ddf7 fix(trash): Import-Cap verdraengt keine lokalen Sole-Copies mehr
Beim Trash-Import sortierte combined.sort+slice(-N) rein nach deletedAt: brachte ein
Backup neuere Eintraege mit, fielen aeltere LOKALE Eintraege aus dem Cap — und die sind
die einzige Kopie der geloeschten Daten (Datenverlust). Jetzt haben lokale Eintraege
Vorrang (alle behalten, sind bereits auf TRASH_MAX_ENTRIES gekappt), Importe fuellen nur
den Rest mit den neuesten auf.
2026-06-14 19:52:16 +02:00
JonKazama-Hellion 17eac64683 fix(layout): geblurrtes Board wieder verschiebbar (Drag-Handle ueber Blur-Overlay)
Das .board-blur-overlay (position:absolute; inset:0; z-index:5) lag im geblurrten
Zustand ueber dem Drag-Handle und schluckte den pointerdown, sodass ein geblurrtes
Board nicht mehr per Handle verschoben werden konnte (stattdessen enthuellte der Klick
es). Der Handle bekommt jetzt position:relative + z-index:6 und liegt damit ueber dem
Overlay; Drag funktioniert, Klick auf den Rest des Boards enthuellt weiterhin.
2026-06-14 19:51:32 +02:00
JonKazama-Hellion 1d17f4d11f fix(layout): Board-Handle-Klick ohne Bewegung ueberschreibt board.pos nicht mehr
Ein reiner Klick/Tap auf den Drag-Handle (ohne echtes Verschieben) hat in onUp den
gegen die Viewport geclampten --board-x/y-Wert zurueckgelesen und als board.pos
persistiert. Bei einem off-screen geclampten Board (nach Fenster-Verkleinerung oder
Import von breiterem Screen) zerstoerte das die wahre Position. Jetzt zaehlt erst eine
Bewegung > 3px als Drag; ohne Bewegung bleibt board.pos unangetastet.
2026-06-14 19:51:15 +02:00
JonKazama-Hellion b3288b47eb docs: add 2.3.0 changelog entry 2026-06-14 15:22:37 +02:00
JonKazama-Hellion 84976f5a10 ci: assert background/action + activeTab/commands in Chrome and Firefox manifests 2026-06-14 15:21:46 +02:00
JonKazama-Hellion 5b18bed9b5 chore: bump version to 2.3.0 across all bump targets 2026-06-14 15:20:07 +02:00
JonKazama-Hellion 70f3f705b4 fix(layout): Phase-5-Review — off-screen-Clamp, Drag-Cleanup, Blur-Position, Import-pos
- Render + neuer debounced Resize-Handler clampen --board-x/y gegen den
  aktuellen Viewport: ein auf breiterem Fenster platziertes Board rendert
  nie mehr off-screen (und damit per Drag unerreichbar). board.pos bleibt
  unveraendert, bei spaeterer Verbreiterung wird die Originalposition erreicht.
- drag.js: cleanup() + pointercancel-Listener. Die Klasse .board.dragging
  klebte bei Touch-Interrupt/Browser-Geste sonst dauerhaft und legte den
  app.js-Sync-Guard (Quick-Save-Render) still.
- main.css: '.board.blurred { position: relative }' entfernt — lag im
  utilities-Layer und schlug das absolute Free-Layout (geblurrtes Board fiel
  aus seiner Position + war nicht mehr drag-bar).
- data.js: board.pos wird beim JSON-Import durchgereicht (safePos-Validierung
  via Number.isFinite), sonst Verlust des frei gesetzten Layouts beim Restore.
2026-06-14 15:16:51 +02:00
JonKazama-Hellion 1d9e9dab81 Freies Layout: Mobil-Reset (<=768/480px) auf gestapeltes Layout, ungeschichtet 2026-06-14 14:59:10 +02:00
JonKazama-Hellion 8401535900 Freies Layout: Board-Drag als Free-Move neu (widgets.js-Vorbild), .board.dragging auf z-index umgewidmet, Reorder-CSS (placeholder/ghost) raus 2026-06-14 14:58:08 +02:00
JonKazama-Hellion 390a9b2f94 Freies Layout: board.pos-Migration aus Auto-Raster, Position als --board-x/y beim Render 2026-06-14 14:55:05 +02:00
JonKazama-Hellion dcc015abd2 Freies Layout: .board absolut via --board-x/--board-y (components-Layer, kein Inline-Style) 2026-06-14 14:53:09 +02:00
JonKazama-Hellion 456be8ba26 Freies Layout: .boards-wrapper auf absolute Kinder vorbereiten (layout-Layer) 2026-06-14 14:52:44 +02:00
JonKazama-Hellion 767c7c80aa fix(quick-save): Drain-Trailing-Re-Run gegen verworfene onChanged waehrend laufendem Drain (Latenz, kein Verlust) 2026-06-14 14:29:47 +02:00
JonKazama-Hellion 43403bc755 fix(quick-save): Pending-Queue-Redesign (Blocker 2b) — Worker schreibt eigenen 'quicksave_pending'-Key statt boards, Seite drained in die Inbox; getrennte Schreib-Domaenen, kein boards-Clobber 2026-06-14 14:27:31 +02:00
JonKazama-Hellion 4897781848 fix(quick-save): Opera-Worker — interne-URL-Filter, kurzer Fehler-Badge, Re-Entry-Schutz gegen Lost-Update 2026-06-14 14:17:46 +02:00
JonKazama-Hellion 5feadcc90c fix(quick-save): Firefox-importScripts-Guard (Event-Page), Sync-Guard auf reale Overlay/Drag-Klassen, Worker-Serialisierung + interne-URL-Filter + kurzer Fehler-Badge 2026-06-14 14:14:31 +02:00
JonKazama-Hellion a37f34eeac fix(manifest): Quick-Save auf Alt+Shift+S (Strg+Shift+S Brave-Konflikt, Strg+Alt verboten); Firefox laedt quicksave-core via scripts-Array 2026-06-14 10:47:17 +02:00
JonKazama-Hellion f473697fb2 fix(backup): Papierkorb (trash) auch im Backup-Reminder-Export, konsistent zum Settings-Export 2026-06-14 10:30:08 +02:00
JonKazama-Hellion 9383726198 feat(quick-save): Live-Sync via chrome.storage.onChanged in app.js (boards neu laden + renderBoards) 2026-06-14 10:28:29 +02:00
JonKazama-Hellion 7d390792ea feat(quick-save): Opera-Worker additiv um onCommand + importScripts ergaenzt, Redirect unberuehrt (CRLF) 2026-06-14 10:26:29 +02:00
JonKazama-Hellion 17506011c1 feat(quick-save): background.js fuer Chrome-Worker + Firefox-Event-Page, read-modify-write in Inbox, Badge-Bestaetigung 2026-06-14 10:24:06 +02:00
JonKazama-Hellion c8ff4dd9d2 manifest(opera): quick-save command additiv, tabs/action/Redirect-Worker unveraendert 2026-06-14 10:22:26 +02:00
JonKazama-Hellion 79459beb98 manifest(firefox): quick-save command, activeTab, Event-Page background.scripts, action-Badge 2026-06-14 10:22:15 +02:00
JonKazama-Hellion 9a682d49a9 manifest(chrome): quick-save command (Strg+Shift+S), activeTab, service_worker, action-Badge 2026-06-14 10:22:00 +02:00
JonKazama-Hellion a9928706ad i18n: Quick-Save command-description + Badge/Confirm-Keys in _locales DE/EN 2026-06-14 10:20:19 +02:00
JonKazama-Hellion 83df926979 fix(trash): Daten-Review-Befunde — Import-Cap nach deletedAt sortiert (Verlust-Schutz), Restore-Doppelklick-Guard, Delete-Rollback bei Save-Fehler, NaN/Null-Haertung 2026-06-14 10:18:10 +02:00
JonKazama-Hellion 9800e6c949 fix(trash): Papierkorb-Eintrag als vertikale Karte, kompaktere Aktions-Buttons (UX im 380px-Panel) 2026-06-14 10:11:43 +02:00
JonKazama-Hellion ba5f5c4978 v2.3 Papierkorb: Export/Import um trash erweitern (defensiv validiert) 2026-06-14 10:02:31 +02:00
JonKazama-Hellion 22203d25a7 v2.3 Papierkorb: renderTrash, Wiederherstellen, endgueltig loeschen, leeren 2026-06-14 09:59:44 +02:00
JonKazama-Hellion da5d8faafa v2.3 Papierkorb: CSS fuer die Papierkorb-Liste (components-Layer) 2026-06-14 09:55:01 +02:00
JonKazama-Hellion 127aba12eb v2.3 Papierkorb: Settings-Section zwischen Daten und Danger Zone 2026-06-14 09:55:01 +02:00
JonKazama-Hellion 4031b429ad v2.3 Papierkorb: i18n-Keys DE und EN 2026-06-14 09:51:57 +02:00