• 
      

    Refactor Review Request banners to be driven entirely from JavaScript.

    Review Request #7338 — Created May 26, 2015 and submitted

    Information

    Review Board
    release-2.5.x
    f71e832...

    Reviewers

    The Review Request banners (close banners and draft banners) were a weird mix
    of backend- and frontend-driven code. When rendering the review request page,
    we'd render the banner from a Django template and then "import" it from the
    javascript view. We'd also have some actions (such as changing a field or
    marking the review request as closed) that would create a new banner entirely
    from javascript. These two code paths used slightly different markup, and made
    it annoying to think about and to test.

    This change updates things so that all of our banners are created entirely in
    javascript. This involved quite a few changes:

    • The showBanner implementation would unconditionally end up showing a draft
      banner if the review request wasn't closed, because it had previously only
      been called when doing something that would create a draft. We had an unused
      hasDraft field on the ReviewRequestEditor, which I've repurposed for use
      here in determining whether we should show a banner or not.
    • Updated the js-tests to account for the fact that we now need a draft present
      in order for the draft banner to be created.
    • Because the initial text for the close description or draft change
      description were rendered from django, we didn't have the rendered text
      available in javascript. I've plumbed this through the ReviewRequestEditor.
    • I ported over the "Send E-Mail" check-box and "This draft adds a new diff"
      info box into the javascript-driven draft banner.
    • Tweaked the spacing a little bit in the draft banner with the "new diff"
      link.
    • Verified that opening up existing review requests with drafts, or closed
      review requests (both submitted and discarded) would create the correct
      banner, and that the change description/close description text was correctly
      presented in both markdown and plain mode.
    • Verified that banners were created when making changes to fields or closing
      the review request.
    • Ran unit tests.
    • Ran js-tests.
    Description From Last Updated

    Blank line between these.

    chipx86chipx86

    Blank line between these.

    chipx86chipx86

    Multi-line comments should use /* .. * .. */. Might not be worth having this comment, though. No harm in …

    chipx86chipx86

    Blank line between these.

    chipx86chipx86

    This should be a template.

    chipx86chipx86

    Since we're now going to be in this function without a banner sometimes, can we move all this into the …

    chipx86chipx86

    How about we just return on else, and keep the assert? What that gives us is a check that we …

    chipx86chipx86

    Can we use double quote for the view name, to fix highlighting? Also, I think we want to escape the …

    chipx86chipx86

    Can we either keep this one line or indent 4 spaces? We're not wrapping on the other lines, so I …

    chipx86chipx86

    If this is HTML and not text, we should call it descriptionFieldHTML, so that it's clear we don't want to …

    chipx86chipx86
    reviewbot
    1. Tool: PEP8 Style Checker
      Ignored Files:
          reviewboard/templates/reviews/review_detail.html
          reviewboard/templates/reviews/ui/base.html
          reviewboard/templates/reviews/reviewable_page_data.js
          reviewboard/static/rb/js/views/reviewRequestEditorView.js
          reviewboard/templates/diffviewer/view_diff.html
          reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
          reviewboard/static/rb/css/pages/reviews.less
          reviewboard/templates/reviews/review_header.html
          reviewboard/static/rb/js/models/reviewRequestEditorModel.js
          reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
      
      
      
      Tool: Pyflakes
      Ignored Files:
          reviewboard/templates/reviews/review_detail.html
          reviewboard/templates/reviews/ui/base.html
          reviewboard/templates/reviews/reviewable_page_data.js
          reviewboard/static/rb/js/views/reviewRequestEditorView.js
          reviewboard/templates/diffviewer/view_diff.html
          reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
          reviewboard/static/rb/css/pages/reviews.less
          reviewboard/templates/reviews/review_header.html
          reviewboard/static/rb/js/models/reviewRequestEditorModel.js
          reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
      
      
    2. 
        
    chipx86
    1. 
        
    2. Show all issues

      Blank line between these.

    3. Show all issues

      Blank line between these.

    4. Show all issues

      Multi-line comments should use /* .. * .. */.

      Might not be worth having this comment, though. No harm in calling off the prototype.

    5. Show all issues

      Blank line between these.

    6. Show all issues

      This should be a template.

    7. reviewboard/static/rb/js/views/reviewRequestEditorView.js (Diff revision 1)
       
       
       
       
       
       
      Show all issues

      Since we're now going to be in this function without a banner sometimes, can we move all this into the block of code down below where we set up the BannerClass, so we don't have to do it otherwise?

    8. Show all issues

      How about we just return on else, and keep the assert?

      What that gives us is a check that we didn't assign BannerClass to something undefined. (That would be more useful if we were to pull these out into their own files I guess.)

    9. Show all issues

      Can we use double quote for the view name, to fix highlighting?

      Also, I think we want to escape the URL. We can do that by doing {% url ... as ... %} outside of the script, then pass this in with |escapejs.

    10. Show all issues

      Can we either keep this one line or indent 4 spaces? We're not wrapping on the other lines, so I don't know that we need to here.

    11. Totally unrelated to this change, but we really should make a jsbool template tag.

    12. 
        
    david
    reviewbot
    1. Tool: Pyflakes
      Ignored Files:
          reviewboard/templates/reviews/review_detail.html
          reviewboard/templates/reviews/ui/base.html
          reviewboard/templates/reviews/reviewable_page_data.js
          reviewboard/static/rb/js/views/reviewRequestEditorView.js
          reviewboard/templates/diffviewer/view_diff.html
          reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
          reviewboard/static/rb/css/pages/reviews.less
          reviewboard/templates/reviews/review_header.html
          reviewboard/static/rb/js/models/reviewRequestEditorModel.js
          reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
      
      
      
      Tool: PEP8 Style Checker
      Ignored Files:
          reviewboard/templates/reviews/review_detail.html
          reviewboard/templates/reviews/ui/base.html
          reviewboard/templates/reviews/reviewable_page_data.js
          reviewboard/static/rb/js/views/reviewRequestEditorView.js
          reviewboard/templates/diffviewer/view_diff.html
          reviewboard/static/rb/js/resources/models/draftReviewRequestModel.js
          reviewboard/static/rb/css/pages/reviews.less
          reviewboard/templates/reviews/review_header.html
          reviewboard/static/rb/js/models/reviewRequestEditorModel.js
          reviewboard/static/rb/js/views/tests/reviewRequestEditorViewTests.js
      
      
    2. 
        
    chipx86
    1. 
        
    2. Show all issues

      If this is HTML and not text, we should call it descriptionFieldHTML, so that it's clear we don't want to escape this.

    3. 
        
    david
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-2.5.x (f29e625)