summary refs log tree commit diff
path: root/content.js
blob: 4ef1f33b6c36900f074d9af88de9f3a01a32936b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function sprongulate() {
  // Since GitHub is an SPA, we can't limit ourselves to only loading on
  // specifically nixpkgs PRs, as synthetic browser navigation doesn't
  // trigger content script loading. Thus, we have to load on all pages,
  // and ensure we're on a nixpkgs PR before running.
  const [, NixOS, nixpkgs, pull, number] = new URL(window.location.href).pathname.split('/')
  if (NixOS !== 'NixOS' || nixpkgs !== 'nixpkgs' || pull !== 'pull') return

  // There are (at the time of writing) two contexts in which the PR
  // number is visible:
  //
  //   1. in the header (following the PR title)
  //   2. sufficiently far down that the header is no longer visible (at
  //   which point the header shrinks and affixes itself to the top of
  //   the page)
  //
  // These are actually two distinct elements, the visibility of which
  // are dependent on your scroll position. They also have completely
  // different (and nondescript) CSS selectors, so instead of looking
  // for them directly, we locate the immediately preceding PR title
  // elements (which *do* have a common CSS selector), to find them.
  for (let node of document.querySelectorAll('.js-issue-title')) {
    node = node.nextElementSibling
    const a = document.createElement('a')
    a.setAttribute('href', `https://nixpk.gs/pr-tracker.html?pr=${number}`)
    node.replaceWith(a)
    a.appendChild(node)
  }
}

// Once on first page load...
sprongulate()

// ...and once every time there is new page content.
document.addEventListener('turbo:render', sprongulate)