• 
      

    [WIP] Core functionality for file diff collapsing

    Review Request #9431 — Created Dec. 9, 2017 and discarded

    Information

    Review Board
    release-3.0.x

    Reviewers

    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.

    If a minified file is also a deleted, moved/copied, binary (I'm not
    sure if this is even a possibility), or a new empty file then it will
    not be collapsed by default because there will just be a short
    message displayed instead of a large, one-line diff.

    Collapsing a diff does not work especially elegantly when the file only
    contains whitespace changes. In this case the Hide/Show whitespace
    changes button can also be used to collapse the file. So the file
    can't be viewed unless both buttons allow it to be. One fix for this
    would be to hide the new button whenever a file is collapsed with the
    Hide/Show whitespace changes button. (This fix can be done in a
    separate review request)

    A few small changes were also made related to chunk highlighting.
    Previously the minimum height of the highlight was 1, this was changed
    to 0 because when a chunk was highlighted then its file was collapsed
    there would be a 1px tall highlight left behind.

    Also, previously collapsing a file with either button would leave the
    highlight in the same position. Now it will be updated to match the
    shifted position of the chunk whenever either button is used to
    collapse or expand.

    A change I made to renderers.py had caused an error in the test
    test_make_context_with_chunk_index, but this has been fixed now.

    I have added tests to verify that the minified property added to
    diffutils is working correctly (returns true if
    depot_filename contains .min., and false otherwise).

    Unit tests have also been added to verify that the new context
    variable collapse_file is set properly in various situations.
    A couple of the new tests
    test_make_context_with_collapse_file_using_unchanged_file and
    test_make_context_with_collapse_file_using_file_with_no_chunks
    may be unnecessary, because I'm not sure if a file can have
    'num_changes': 0 without having 'moved_or_copied': True
    or 'num_chunks': 0 without 'newfile': True

    Two new unit tests have been added to verify that the new onClick
    event properly updates the classes of the button icon and tbodies
    related to that file.

    Preferably, additional unit tests would be written to verify that
    the onClick event updates only the classes of elements related
    to the desired file. I don't think this will be difficult, but
    right now I'm not sure how to do it without doubling the size of
    the html template in diffReviewableViewTests.js and possibly
    needing to adjust many of the other tests in that file.
    This is the only reason the review request is still WIP

    Description From Last Updated

    F841 local variable 'filediff' is assigned to but never used

    reviewbotreviewbot

    E231 missing whitespace after ','

    reviewbotreviewbot

    F841 local variable 'filediff' is assigned to but never used

    reviewbotreviewbot

    E231 missing whitespace after ','

    reviewbotreviewbot

    Col: 17 '$buttonIcon' is defined but never used.

    reviewbotreviewbot

    E501 line too long (80 > 79 characters)

    reviewbotreviewbot

    You could turn this into a one-liner if you wanted. height = chunkEl.clientHeight ? chunkEl.clientHeight + 1 : 0;

    TB tbrockma
    Checks run (1 failed, 1 succeeded)
    flake8 failed.
    JSHint passed.

    flake8

    RC
    Review request changed
    Description:
       

    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.

       
       

    If a minified file is also a deleted, moved/copied, binary (I'm not

        sure if this is even a possibility), or a new empty file then it will
        not be collapsed by default because there will just be a short
        message displayed instead of a large, one-line diff.

       
    -  

    -  
       

    Collapsing a diff does not work especially elegantly when the file only

        contains whitespace changes. In this case the Hide/Show whitespace
        changes button can also be used to collapse the file. So the file
        can't be viewed unless both buttons allow it to be. One fix for this
        would be to hide the new button whenever a file is collapsed with the
        Hide/Show whitespace changes button.

      +
      +

      +
      +

    A few small changes were also made related to chunk highlighting.

      +
      +

    Previously the minimum height of the highlight was 1, this was changed

      + to 0 because when a chunk was highlighted then its file was collapsed
      + there would be a 1px tall highlight left behind.

      +
      +

    Also, previously collapsing a file with either button would leave the

      + highlight in the same position. Now it will be updated to match the
      + shifted position of the chunk whenever either button is used to
      + collapse or expand.

    Testing Done:
       

    A change I made to renderers.py had caused an error in the test

        test_make_context_with_chunk_index, but this has been fixed now.

       
       

    I have added tests to verify that the minified property added to

        diffutils is working correctly (ie, returns true if
        depot_filename contains .min., and false if not.

       
      +

    Two new unit tests have been added to verify that the new onClick

      + event properly updates the classes of the button icon and tbodies
      + related to that file.

      +
       

       
    ~  

    Additional front end tests need to be added to verify that the

    ~   new onclick function properly updates the classes of the
    ~   corresponding diff and only that diff.

      ~

    Preferably, additional unit tests would be written to verify that

      ~ the onClick event updates only the classes of elements related
      ~ to the desired file. I don't think this will be difficult, but
      + right now I'm not sure how to do it without doubling the size of
      + the html template in diffReviewableViewTests.js and possibly
      + needing to adjust many of the other tests in that file.

       
       

    Other tests needed to verify the default state of files.

        (only collapsed upon loading the page if it is minified and not
        deleted, copied, moved, binary, or new-empty).

      +
      +

    Other tests needed to verify the additional chunk highlighting

      + updates work as expected. (when a file is collapsed or expanded,
      + the highlighting is updated).

    Commit:
    a2eeaba62db64487228cbac243a6e508dd1a289e
    bbf41e8a9df370741e75491d7e6d4c75e8b37cdf

    Checks run (1 failed, 1 succeeded)

    flake8 passed.
    JSHint failed.

    JSHint

    RC
    Review request changed
    Description:
       

    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.

       
       

    If a minified file is also a deleted, moved/copied, binary (I'm not

        sure if this is even a possibility), or a new empty file then it will
        not be collapsed by default because there will just be a short
        message displayed instead of a large, one-line diff.

       
       

    Collapsing a diff does not work especially elegantly when the file only

        contains whitespace changes. In this case the Hide/Show whitespace
        changes button can also be used to collapse the file. So the file
        can't be viewed unless both buttons allow it to be. One fix for this
        would be to hide the new button whenever a file is collapsed with the
        Hide/Show whitespace changes button.

       
       

       
    ~  

    A few small changes were also made related to chunk highlighting.

    ~  
      ~

    A few small changes were also made related to chunk highlighting.

      ~ Previously the minimum height of the highlight was 1, this was changed
    -  

    Previously the minimum height of the highlight was 1, this was changed

        to 0 because when a chunk was highlighted then its file was collapsed
        there would be a 1px tall highlight left behind.

       
       

    Also, previously collapsing a file with either button would leave the

        highlight in the same position. Now it will be updated to match the
        shifted position of the chunk whenever either button is used to
        collapse or expand.

    Testing Done:
       

    A change I made to renderers.py had caused an error in the test

        test_make_context_with_chunk_index, but this has been fixed now.

       
       

    I have added tests to verify that the minified property added to

    ~   diffutils is working correctly (ie, returns true if
    ~   depot_filename contains .min., and false if not.

      ~ diffutils is working correctly (returns true if
      ~ depot_filename contains .min., and false otherwise).

      +
      +

    Unit tests have also been added to verify that the new context

      + variable collapse_file is set properly in various situations.
      + A couple of the new tests
      + test_make_context_with_collapse_file_using_unchanged_file and
      + test_make_context_with_collapse_file_using_file_with_no_chunks
      + may be unnecessary, because I'm not sure if a file can have
      + 'num_changes': 0 without having 'moved_or_copied': True
      + or 'num_chunks': 0 without 'newfile': True

       
       

    Two new unit tests have been added to verify that the new onClick

        event properly updates the classes of the button icon and tbodies
        related to that file.

       
       

       
       

    Preferably, additional unit tests would be written to verify that

        the onClick event updates only the classes of elements related
        to the desired file. I don't think this will be difficult, but
        right now I'm not sure how to do it without doubling the size of
        the html template in diffReviewableViewTests.js and possibly
        needing to adjust many of the other tests in that file.

    -  
    -  

    Other tests needed to verify the default state of files.

    -   (only collapsed upon loading the page if it is minified and not
    -   deleted, copied, moved, binary, or new-empty).

    -  
    -  

    Other tests needed to verify the additional chunk highlighting

    -   updates work as expected. (when a file is collapsed or expanded,
    -   the highlighting is updated).

    Commit:
    bbf41e8a9df370741e75491d7e6d4c75e8b37cdf
    84007a82efcc02f34d627d624f09a744a746be46

    Checks run (1 failed, 1 succeeded)

    flake8 failed.
    JSHint passed.

    flake8

    RC
    RC
    TB
    1. 
        
    2. Show all issues

      You could turn this into a one-liner if you wanted.

      height = chunkEl.clientHeight ? chunkEl.clientHeight + 1 : 0;

    3. 
        
    david
    Review request changed
    Status:
    Discarded