Skip to content

Instantly share code, notes, and snippets.

@juanca
Created March 2, 2017 18:42
Show Gist options
  • Save juanca/5fd799c5b094e3e4f8b709cd101d7403 to your computer and use it in GitHub Desktop.
Save juanca/5fd799c5b094e3e4f8b709cd101d7403 to your computer and use it in GitHub Desktop.
Github PR bookmarklet: Load all file diffs
javascript:
document.querySelectorAll('.load-diff-button').forEach(node => node.click())
@benguild
Copy link

Thanks, I use this all of the time.

@chri7325
Copy link

Awesome. Will save me quite a lot of carpel-tunnel clicks.

@sarojkh
Copy link

sarojkh commented May 22, 2018

Thank you. Bookmarked.

@melfa
Copy link

melfa commented Mar 29, 2019

Load first 50 files with only "Load Diff" button, without reason (this exclude large files, deleted files and so on):
Array.from(document.querySelectorAll('.js-diff-load-button-container')).filter(container => !container.querySelector('.hidden-diff-reason')).slice(0, 50).forEach(container => container.querySelector('.load-diff-button').click())

@uttamraj-pando
Copy link

awesome.would have received lot of upvotes in stackoverflow

@ElectricRCAircraftGuy
Copy link

@juanca
Copy link
Author

juanca commented Oct 9, 2020

oh, if you're keeping a collection around. here is another i use pretty regularly:

https://gist.github.com/juanca/669c59f15a17e20022b8bd78b12889e6

@s0undt3ch
Copy link

Only click on files which are not yet marked as reviewed.

Array.from(document.querySelectorAll('.file')).filter(container => !container.querySelector('input.js-reviewed-checkbox:checked')).filter(container => container.querySelector('.load-diff-button')).forEach(node => node.click())

@s0undt3ch
Copy link

Nope, that doesn't work :/

@s0undt3ch
Copy link

Ah ha!

Array.from(document.querySelectorAll('.file')).filter(container => !container.querySelector('input.js-reviewed-checkbox:checked')).forEach(pnode => pnode.querySelectorAll('.load-diff-button').forEach(node => node.click()))

@AronNovak
Copy link

image
Well, use it carefully for large pull requests, you can easily end up with being blocked.

@s0undt3ch
Copy link

s0undt3ch commented May 4, 2021

Well, that really must be a massive PR.
Mine was ~1.6k files changed and I never hit that...

@AronNovak
Copy link

image
I was blocked for such a PR. But the block only took for a few minutes, not hours fortunately.

@juanca
Copy link
Author

juanca commented May 12, 2021

Woah, I guess we could batch the requests for x files at a time? Might seem a bit excessive for a bookmark though. Up to anyone else if they want to improve on the script.

@mcoberly2
Copy link

Thanks! I just put the Javascript in my browser URI field and voila!

@ScriptAutomate
Copy link

I had to modify a little:

Array.from(document.getElementsByClassName('load-diff-button')).map(button => button.click())`

https://gist.github.com/ScriptAutomate/a3240e8767f0e8e70644ebf3ca4b74fb#github-reviewing-prs-with-tons-of-modified-files-and-load-diff-buttons

@ryan-walsh-forte
Copy link

The original from 2017 above seems to work for me. Thanks!

@JetUni
Copy link

JetUni commented Nov 17, 2023

This didn't work for me on a PR with 1200 files changed, so I came up with this code that I ran from the console. I ran it with up to 50 files at a time (in the slice and splice) with great success!

// Find all files in the PR
let files = Array.from(document.querySelectorAll('.file'));
// Filter by the files that aren't reviewed already
let filteredFiles = files.filter(file => !file.querySelector('.js-reviewed-checkbox').checked);

// Load the next 10 files
filteredFiles.slice(0, 10).forEach(file => file.querySelector('.load-diff-button').click());

// After reviewing all 10 files, run these commands to mark them as reviewed
// and delete them from the filtered array
filteredFiles.slice(0, 10).forEach(file => file.querySelector('.js-reviewed-checkbox').click());
filteredFiles.splice(0, 10);

@HappyRashair
Copy link

Niiice :) It worked for 600 files / 3k lines changed

@DavidMelnychuk
Copy link

This is fantastic, thank you

@bri12415
Copy link

bri12415 commented Sep 3, 2024

Thanks for this!

@nabilfreeman
Copy link

Here's another useful one that de-renders the viewed blocks to improve page performance (viewed diffs are still rendered in the background, and even if you filter out viewed files in the contextual menu, their diffs are puzzlingly still rendered invisibly, massively slowing down everything)

// Removes all viewed diffs from the DOM (refresh the page to get them back)
Array.from(document.querySelectorAll('.file')).filter(container => container.querySelector('input.js-reviewed-checkbox:checked')).forEach(node => node.remove())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment