Add repo/branch links to GitHub's "Comparing Changes" page

This adds a link to the fork's branch on the GitHub "Comparing changes" page (AKA the "Create a Pull Request" page). See https://stackoverflow.com/questions/77623282/how-do-i-get-my-remote-branch-url-from-the-github-create-pull-request-page for more details.

Versão de: 09/12/2023. Veja: a última versão.

// ==UserScript==
// @name         Add repo/branch links to GitHub's "Comparing Changes" page
// @namespace    http://tampermonkey.net/
// @version      0.6
// @description  This adds a link to the fork's branch on the GitHub "Comparing changes" page (AKA the "Create a Pull Request" page). See https://stackoverflow.com/questions/77623282/how-do-i-get-my-remote-branch-url-from-the-github-create-pull-request-page for more details.
// @author       DanKaplanSES
// @match        https://github.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=github.com
// @require      https://code.jquery.com/jquery-3.7.1.min.js
// @grant        none
// @license MIT
// ==/UserScript==

const browseRepoHtml = `<div class="browse-repo"><a href="#" target="_blank">Browse Repo</a></div>`;
const browseBranchHtml = `<div class="browse-branch"><a href="#" target="_blank">Browse Branch</a></div>`;

jQuery.noConflict(true)(function ($) {
  function modifyPage() {
    if (location.pathname.indexOf(`/compare/`) === -1) {
      return;
    }
    const isPageAlreadyModified = $(`#browse-link-0`).length > 0;
    if (isPageAlreadyModified) {
      return;
    }

    $(`.range-cross-repo-pair details`).wrap(
      `<div class="details-container"></div>`
    );

    $(`.details-container`).each(function (index) {
      const containerType =
        $(this).find(`summary.branch`).length > 0 ? `branch` : `repo`;
      const html = containerType === `repo` ? browseRepoHtml : browseBranchHtml;
      const href = hrefString(containerType, index);
      $(this)
        .css({ 'display': `inline-block` })
        .append(html)
        .css({ 'text-align': `center` })
        .find(`a`)
        .attr({ id: `browse-link-${index}`, href });

      const containerContentsHidden = $(this).find(`details`).is(`:hidden`);
      if (containerContentsHidden) {
        $(this).hide();
      }
    });

    $(`.range-editor .pre-mergability, .range-editor .d-inline-block`).css({
      'vertical-align': `top`,
    });
  }

  function hrefString(containerType, index) {
    switch (containerType) {
      case 'repo':
        return `/` + $(`.css-truncate-target`)[index].textContent;
      case 'branch':
        return (
          `/` +
          $(`.css-truncate-target`)[index - 1].textContent +
          `/tree/` +
          $(`.css-truncate-target`)[index].textContent
        );
      default:
        throw new Error(`Unexpected hrefType: ${hrefType}`);
    }
  }

  const pageReadyForModification =
    $(`.range-cross-repo-pair details`).length > 0;
  if (pageReadyForModification) {
    modifyPage();
  }

  setInterval(modifyPage, 1500);
});