Skip to content

v2.8.0

Choose a tag to compare

@github-actions github-actions released this 22 Aug 17:42
· 36 commits to main since this release

v2.8.0 banner

v2.8.0 (current) — content.js / tags.js module split, plus a feature round built on top

Two parts shipped together: the refactor v2.7.0 explicitly flagged as too
risky to bundle with anything else, and a round of six items from the
standing feature backlog plus a design pass, built on top of that new
foundation.

New features

  • Command palette (Ctrl/Cmd+K) — new content/features/command-palette.js.
    Searchable overlay for actions that already existed behind menus: open
    Advanced Options, open the tag dashboard, toggle the master switch /
    currency conversion / Hebrew translations, force-refresh FX rates or the
    mods list, reload the tab. Arrow keys to navigate, Enter to run, Escape
    to close.
  • Wishlist-wide price alerts — the existing per-game price-alert system
    (checkPriceAlerts in background.js) required visiting each game's page
    and setting a threshold manually. New checkWishlistWideAlerts() covers
    the whole wishlist at once: any wishlisted game whose latest recorded
    price has dropped a configurable % (default 20) off its own tracked peak
    fires a notification, opt-in via a new toggle in Advanced Options. Only
    covers wishlist items you've visited at least once — that visit is what
    builds the price history to compare against. Required a real architecture
    change: background.js previously only knew the wishlist's counts, not
    which games were on it — wishlist.js's existing slug-deduplication set
    is now also sent in the wishlist-report message and cached as
    wishlistSlugs.
  • Game status: Playing / Backlog / Finished — new fixed-vocabulary
    gameStatus field per game (new shared lib/game-status.js), distinct
    from free-form tags. Settable from a 3-button toggle group on the game's
    own page (in the tags & notes section) or from each card in the tag
    dashboard; filterable there via status:playing search syntax alongside
    the existing tag:/lowest:/snapshots:/since: filters.
  • Auto theme — a 5th theme option (alongside the existing Neon, Classic,
    CRT, Sunset, and — already built but previously undiscovered by this
    project's own roadmap notes — Light) that resolves to Light or Neon from
    prefers-color-scheme at apply time, and updates live if the OS
    preference changes while a gog.com tab is open.
  • Settings search — Advanced Options has grown to 9 cards; a search box
    in the header now filters them by free-text match. (Also fixed a
    hardcoded stale "v2.4" version string next to it while in the area — it
    now reads the real manifest version.)
  • Undo toast for tag deletion — replaces the old blocking
    confirm("...cannot be undone") dialog. Deletion still commits
    immediately (so it's never lost if the tab closes), but a 5-second toast
    with an Undo button restores the exact prior state. Required extending
    toasts.js to support an optional action button, and loading it into
    tags.html for the first time (previously content-script only).
  • Design polish — the small tooltip sparkline (buildMiniSparkline) now
    gets the same area-fill + emphasized-endpoint treatment the full game-panel
    chart already had. Added prefers-reduced-motion guards to the popup's
    entrance animations and the new toast/palette transitions, which didn't
    have them.
  • Interface language selector — lib/i18n.js grew 5 new languages
    (Russian, Polish, German, French, Spanish) alongside the existing English
    and Hebrew, picked from a dropdown in Advanced Options. Same
    data-i18n/data-i18n-attr mechanism as before — no code changes outside
    lib/i18n.js and the dropdown markup.

Module split (the foundation the features above were built on)

Pure refactor, zero user-visible change on its own. The two files v2.7.0
explicitly flagged as too risky to bundle with everything else —
content.js (~1560 lines) and tags.js (~1028 lines) — are now genuinely
modular.

  • content.js (was one file) is now an orchestrator plus:
    content/state.js (shared mutable { settings, pageCurrency, observers }
    — every feature module dereferences through it live instead of closing
    over local variables), content/utils.js, and five feature modules under
    content/features/: currency.js, card-badges.js (the hot zone —
    applyCardBadges didn't move an inch of logic, just location),
    misc.js (expired sales / DRM banner / Hebrew+RTL), wishlist.js, and
    game-page.js (the whole insights panel).
  • tags.js (was one file) is now an orchestrator plus tags/state.js
    and four feature modules under tags/features/: tag-management.js,
    games-list.js, stats.js, export-import.js.
  • A few modules on each side reference each other via the fully-qualified
    window.GOGPlusX.fn() path instead of top-level destructuring —
    necessary in a couple of spots to break genuine circular dependencies
    (e.g. tags' tag-management ↔ games-list ↔ stats all need each other to
    refresh the dashboard after an edit). Documented inline where it matters.
  • manifest.json's content-script list and tags.html's script tags were
    updated to the new load order; tsconfig.json/typecheck scope is
    unchanged (still lib/ only — content/ and tags/ aren't JSDoc-typed).
  • All tests (122 by the time the feature round above landed on top, including
    the applyCardBadges hot-zone regression suite from v2.7.0) pass against
    the split code — those tests import the real module files in manifest
    order, so they're exercising the actual production load path, not a mock.

Download gog-enhancer-webstore.zip below and load it as an unpacked extension, or wait for the Chrome Web Store listing.