Repository navigation
v2.8.0
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
(checkPriceAlertsin background.js) required visiting each game's page
and setting a threshold manually. NewcheckWishlistWideAlerts()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 thewishlist-reportmessage and cached as
wishlistSlugs. - Game status: Playing / Backlog / Finished — new fixed-vocabulary
gameStatusfield per game (new sharedlib/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 viastatus:playingsearch syntax alongside
the existingtag:/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-schemeat 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.jsto support an optional action button, and loading it into
tags.htmlfor 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. Addedprefers-reduced-motionguards to the popup's
entrance animations and the new toast/palette transitions, which didn't
have them. - Interface language selector —
lib/i18n.jsgrew 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-attrmechanism as before — no code changes outside
lib/i18n.jsand 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 —
applyCardBadgesdidn'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 plustags/state.js
and four feature modules undertags/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 andtags.html's script tags were
updated to the new load order;tsconfig.json/typecheck scope is
unchanged (stilllib/only —content/andtags/aren't JSDoc-typed).- All tests (122 by the time the feature round above landed on top, including
theapplyCardBadgeshot-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.
