Skip to content

Releases: jparkerweb/bgg-keyboard-select

v2.0.0

21 Apr 14:54
54f97a0

Choose a tag to compare

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.
  • R on 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-btn on each row instead of the retired GSUB_MarkRead onclick 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-button rather than assuming it's present at document_idle.
  • Replaced 2000 ms magic setTimeout calls with MutationObserver-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_icon now uses the sized 16/48/128 PNGs.

Removed

  • Obsolete content-script.js main-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_policy block (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 debugger statement in the subscription click handler.
  • Injected Google Fonts @import for 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) and S (subscribe) no longer throw when the ad or subscribe button isn't on the page — they toast a friendly message instead.