Releases: jparkerweb/bgg-keyboard-select
Releases · jparkerweb/bgg-keyboard-select
v2.0.0
What's New 🎉
[2.0.0] — 2026-04-21
Complete rewrite for BoardGameGeek's new Angular-based Subscriptions Feed. The previous table-based /subscriptions page was replaced on the BGG side, which broke every selector the 1.x extension depended on.
Added
- Cross-section navigation on the Subscriptions Feed. J/K now walks every feed item across all date/type groups (Today, Yesterday, Threads, Videos, Previews, blog posts, images) in document order, not just one section.
- Comment-by-comment navigation on thread pages. J/K moves a highlighted cursor through each
<gg-article>comment; T/B jumps to first/last. Previous versions only scrolled by a fixed pixel amount. Ron thread pages focuses the current comment's Reply button.- Transient on-screen toast for feedback on actions (selection count, mark-read count, ad-hide count, errors).
- SPA-navigation awareness: scripts re-initialize when the Angular router moves between threads without a full page reload.
- Heuristic selector fallbacks so minor BGG class-name changes don't fully break the extension.
Changed
- Selection state on the feed is now stored in BGG's native per-row checkboxes (
label.item-input input[type=checkbox]). BGG's own bulk actions (e.g., "Mark Current Page Read") stay in sync with keyboard-driven selection. - Mark-read targets BGG's built-in
button.quick-read-btnon each row instead of the retiredGSUB_MarkReadonclick handler. - Pagination uses
a[aria-label="Next Subscription Item"]/ "Previous Subscription Item"; falls back to a scroll nudge if BGG switches to pure infinite scroll. - Thread-page subscribe action waits for the Angular-rendered
gg-subscription-buttonrather than assuming it's present atdocument_idle. - Replaced 2000 ms magic
setTimeoutcalls withMutationObserver-driven readiness. - Cursor highlight, selected-row tint, and ad-hide styles moved to
.bgg-kbd-*classes to avoid colliding with BGG's own CSS. - Manifest version bumped to 2.0.0;
default_iconnow uses the sized 16/48/128 PNGs.
Removed
- Obsolete
content-script.jsmain-world injection. The previous architecture injected the per-page scripts twice (once as content scripts, once as page scripts), duplicating event listeners and styles. - MV2-style
content_security_policyblock (script-src/object-src). This shape is invalid under MV3; the MV3 default policy is already correct for this extension. - Hard-coded selectors for the retired BGG DOM:
#module_1,#results_1 .module_title,[id^=GSUB_itemline_thread_],table.innermoduletable,.geeksub_minorlink,#subform_1 + .moduletable .pages a. - Stray
debuggerstatement in the subscription click handler. - Injected Google Fonts
@importfor Roboto (avoids touching page-level CSP and third-party requests).
Fixed
- Keyboard shortcuts no longer leak to the page when typing in inputs, textareas, contenteditable regions, or when a modifier key (Ctrl/Cmd/Alt) is held.
- Handlers
preventDefault()on every key they consume, preventing stray native page shortcuts from firing alongside ours. - Thread-page
H(hide ad) andS(subscribe) no longer throw when the ad or subscribe button isn't on the page — they toast a friendly message instead.