[WIP] Add ability to collapse entire files in the diff view.

Review Request #9337 — Created Oct. 27, 2017 and updated

rcreagha
Review Board
release-3.0.x
d1e05ce...
reviewboard, students

When viewing the diff of a review request not all files need to be
viewed, for example minified files don't need to be reviewed. It is
also helpful to have a way to hide files you have already reviewed.

Now files can be collapsed and expanded as the user wishes. Also,
minified files are collapsed by default.

In a previous commit clicking the new button whould hide the diff
information as well as the links to download the file. I have changed
it no longer hide the download links so that it matches files hidden
with the "Hide/Show whitespace changes" button.

I modified the function toggleWhitespaceOnlyChunks in
diffReviewableView.es6.js so it now takes in a boolean value to indicate
if the files should be shown or hidden. I made this change because I needed
the "Hide/Show whitespace changes" button to work with the button to hide/show
a specific file, and without specifying if files should be shown or hidden it
would have caused issues where clicking "Hide whitespace changes" would hide
some but show others if they were already individually hidden with the new
button.

Unit tests have not been written yet.

Also it might be worth mentioning that because the existing
"Collapse changes" button reloads the page, any files that were
manually collapsed or expanded will return to their default state.

Loading file attachments...

  • 7
  • 0
  • 11
  • 0
  • 18
Description From Last Updated
E128 continuation line under-indented for visual indent reviewbot
E128 continuation line under-indented for visual indent reviewbot
E128 continuation line under-indented for visual indent reviewbot
E128 continuation line under-indented for visual indent reviewbot
E126 continuation line over-indented for hanging indent reviewbot
Col: 22 Expected '===' and instead saw '=='. reviewbot
Col: 46 Missing semicolon. reviewbot
david
  1. 
      
  2. reviewboard/diffviewer/diffutils.py (Diff revision 1)
     
     

    If there's a newly-added minified filename, I think depot_filename will be None, which might crash. This should also use single quotes, and probably test for .min..

    1. I did some of my dev testing with minified files that I added into an empty repo and didn't have any issues with it being a newly added file. Please let me know if this doesn't cover the situation you had in mind.

  3. This comment should have an "Args" section explaining what e is.

  4. Because this is ES6, we can use a slightly shorter syntax:

    _toggleCollapseDiff(e) {
    
  5. These should use const instead of var.

  6. Should be indented only 1 space within its parent.

  7. 
      
  1. 
      
  2. Don't know if this is helpful at all, or even a part of the requirements of your project, but if you did want to maintain the collapsed state of your elements even after page reload, you could save a list of collapsed file ids under an object in browser storage (probably local storage) indexed by the current review request id. If the list under the review request id exists, use it to determine which elements should be collapsed on client-side loading. If it doesn't, remove all other currently saved review request collapsed-lists (to not use up a bunch of local storage space).

  3. 
      
Review request changed

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

Review request changed

Checks run (1 failed, 1 succeeded)

flake8 failed.
JSHint passed.

flake8

bleblan2
  1. Just a couple code formatting things I noticed.

  2. reviewboard/diffviewer/renderers.py (Diff revision 4)
     
     

    This is really difficult to read. Since collapse_by_default is a boolean value, I think it makes more sense to assign it as a boolean instead of changing it's value in an if statement.

    I'm thinking something like this:

            collapse_by_default = (self.diff_file['minified'] and
                                   not self.diff_file['binary'] and
                                   not self.diff_file['deleted'] and
                                   (not self.diff_file['moved_or_copied'] or
                                    self.diff_file['num_changes'] != 0) and
                                   (not self.diff_file['new_file'] or
                                    self.diff_file['num_chunks'] != 0))
    
  3. Looking at the other if tags in the file, they all have a space before closing the tag: ...show_deleted %}

  4. 
      
Review request changed

Checks run (2 failed)

flake8 failed.
JSHint failed.

flake8

JSHint

Loading...