Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ErichDonGubler/17cdd30c4b40c93596da1d813ef327cb to your computer and use it in GitHub Desktop.
Save ErichDonGubler/17cdd30c4b40c93596da1d813ef327cb to your computer and use it in GitHub Desktop.
User scripts for various things Erich uses for his work on Firefox's WebGPU implementation
// ==UserScript==
// @name Extra Mozilla Phabricator review tools
// @namespace https://gist.github.com/ErichDonGubler/f1cebb52f54dac18c3dece0bb609685c/edit
// @version 2025-02-28.2
// @description Creates several convenience tools in the subheader bar underneath the title of Phabricator revision views.
// @author Erich Gubler <[email protected]>
// @match https://phabricator.services.mozilla.com/D*
// @icon data:image/png;base64,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
// @grant none
// @sandbox DOM
// ==/UserScript==
(function() {
'use strict';
// NOTE: Match the class for other informative elements like the `Public` callout.
let loadAllFilesButton = document.createElement('span');
loadAllFilesButton.className = "policy-header-callout";
loadAllFilesButton.innerHTML = `<span class="visual-only phui-icon-view phui-font-fa fa-search-plus bluegrey" aria-hidden="true"></span>Load all files`;
loadAllFilesButton.onclick = (_event) => {
document.querySelectorAll('[data-sigil="differential-load"]').forEach(el => el.click());
};
document.querySelector('.phui-header-subheader').append(loadAllFilesButton);
// NOTE: Match the class for other informative elements like the `Public` callout.
let copyLinkButton = document.createElement('span');
copyLinkButton.className = "policy-header-callout";
copyLinkButton.innerHTML = `<span class="visual-only phui-icon-view phui-font-fa fa-clipboard bluegrey" aria-hidden="true"></span>Copy link`;
copyLinkButton.onclick = (_event) => {
let url = new URL(document.URL);
url.hash = ''; // Erase the fragment.
url.search = ''; // Erase query params.
let revisionId = url.pathname.split('/').pop();
let link = `[${revisionId}](${url})`;
navigator.clipboard.writeText(link);
};
document.querySelector('.phui-header-subheader').append(copyLinkButton);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment