Status Updates part 8: User Interface.

Review Request #8409 — Created Sept. 18, 2016 and submitted

Information

Review Board
release-3.0.x
8e1c099...

Reviewers

This change adds the UI for status updates in the review request page. Status
updates are shown in two places:

  • If a status update is associated with a ChangeDescription, it will be shown
    in the entry for that change description.
  • Otherwise, it's assumed that the status update is for the initial diff (or any
    other attachments, etc. that were present when the review request was first
    published). These are shown in a new entry which always appears immediately
    below the review request box.

The one thing that's missing from this is the draft banners when replying to
any comments in the reviews associated with status updates. This is because
multiple reviews can be aggregated together into one entry, and we don't yet
have the ability to deal with that. Our proposed redesign for the draft banners
will solve this (since there will always be one banner at the top of the page).

If the reviews.status_updates feature is not enabled (which is currently the
default), any reviews associated with status updates will be displayed just
like all the other reviews, in their own entries.

  • Created a variety of status updates and checked that they rendered correctly.
  • Tested the default expand/collapse state for the new initial status updates
    entry (expanded only when there are no change descriptions or draft replies).
  • Disabled the feature in my settings and saw that all the reviews were now
    shown as regular review entries.

Description From Last Updated

Missing period.

chipx86chipx86

Missing period. Can this go into what this class does? Also needs Attributes:.

chipx86chipx86

Could probably just use a collections.Counter.

chipx86chipx86

Can we use ~ before the class reference, so it just shows up as "StatusUpdate" in the docs?

chipx86chipx86

Here, too.

chipx86chipx86

Blank line between these.

chipx86chipx86

Blank line between these.

chipx86chipx86

Properties before normal methods. The model shouldn't be handling any HTML-related data, though. This should be done by the view …

chipx86chipx86

Same here.

chipx86chipx86

Won't Review always have a status_update attribute?

chipx86chipx86

Mind using keyword arguments herE? It'd help with making the length check more clear.

chipx86chipx86

How about just making finalize() part of the base API for these entries, so it's not treated specially? That way …

chipx86chipx86

Two blank lines.

chipx86chipx86

We have checking for #review in three places now. It'd be nice to have this handled in one common place …

chipx86chipx86

Can you put parens around the comparison? With fat arrow functions, I always have to re-read these expressions (especially since …

chipx86chipx86

Some of this results in duplicate logic between here and review boxes, particularly for the values/CSS properties dealing with the …

chipx86chipx86

Should be standard one-line summary, multi-line description.

chipx86chipx86

I'm thinking we really want this (and the this._reviewViews = ...) split off into some mixin.

chipx86chipx86

Can we move up by issueSummaryTableView, to try to keep the rough alphabetical order? (I know we can't always do …

chipx86chipx86

Here and further down, <h1> is probably not appropriate. The primary <h1> is the app title in the header bar. …

chipx86chipx86

This can also use {% include ... with ... %}

chipx86chipx86

Looks like we're duplicating a lot of complex stuff here. We should split this off into a utility template.

chipx86chipx86

Same comments about <h1> vs. <h3>.

chipx86chipx86

Can be {% include ... with ... %}

chipx86chipx86

This is done twice. Can we consolidate?

chipx86chipx86

This can be: {% include entry.template_name with entry=initial_status.entry %}

chipx86chipx86

Here, too.

chipx86chipx86

bool

chipx86chipx86

Can you add a trailing period here?

chipx86chipx86
chipx86
  1. 
      
  2. reviewboard/reviews/detail.py (Diff revision 1)
     
     
    Show all issues

    Missing period.

  3. reviewboard/reviews/detail.py (Diff revision 1)
     
     
    Show all issues

    Missing period.

    Can this go into what this class does?

    Also needs Attributes:.

  4. reviewboard/reviews/detail.py (Diff revision 1)
     
     
    Show all issues

    Could probably just use a collections.Counter.

  5. reviewboard/reviews/detail.py (Diff revision 1)
     
     
    Show all issues

    Can we use ~ before the class reference, so it just shows up as "StatusUpdate" in the docs?

  6. reviewboard/reviews/detail.py (Diff revision 1)
     
     
    Show all issues

    Here, too.

  7. reviewboard/reviews/detail.py (Diff revision 1)
     
     
     
    Show all issues

    Blank line between these.

  8. reviewboard/reviews/detail.py (Diff revision 1)
     
     
     
    Show all issues

    Blank line between these.

  9. reviewboard/reviews/models/status_update.py (Diff revision 1)
     
     
     
    Show all issues

    Properties before normal methods.

    The model shouldn't be handling any HTML-related data, though. This should be done by the view and probably entry stuff.

  10. Show all issues

    Same here.

  11. reviewboard/reviews/views.py (Diff revision 1)
     
     
    Show all issues

    Won't Review always have a status_update attribute?

    1. No. This is how the reverse relation for one-to-one fields is checked.

  12. reviewboard/reviews/views.py (Diff revision 1)
     
     
    Show all issues

    Mind using keyword arguments herE? It'd help with making the length check more clear.

  13. reviewboard/reviews/views.py (Diff revision 1)
     
     
     
    Show all issues

    How about just making finalize() part of the base API for these entries, so it's not treated specially? That way it's documented that any subclass can perform operations there.

  14. reviewboard/static/rb/css/pages/reviews.less (Diff revision 1)
     
     
     
     
    Show all issues

    Two blank lines.

  15. Show all issues

    We have checking for #review in three places now. It'd be nice to have this handled in one common place somehow. Maybe a utility function on ReviewBoxView or something that returns the ID for the review provided in the URL, or something. Just so we're not duplicating ourselves here and having to potentially fix something in two places down the road.

    (Ideally, we'd have something using routers and some way to register a handler, but that's perhaps a bit much for now.)

    1. I think I'd like to move this into the page view instead, but I'd rather that be a separate change.

  16. Show all issues

    Can you put parens around the comparison? With fat arrow functions, I always have to re-read these expressions (especially since Python would allow very similar statements, at first glance).

  17. Show all issues

    Some of this results in duplicate logic between here and review boxes, particularly for the values/CSS properties dealing with the animation when adding/removing labels.

    It'd be nice instead to take this bit and just turn it into a view (like a RB.BoxIssuesLabelView or something) that has methods for showing/hiding and setting text.

    1. Will add that to my list for a later change.

  18. Show all issues

    Should be standard one-line summary, multi-line description.

  19. reviewboard/static/rb/js/views/initialStatusUpdatesBoxView.es6.js (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    I'm thinking we really want this (and the this._reviewViews = ...) split off into some mixin.

  20. reviewboard/staticbundles.py (Diff revision 1)
     
     
    Show all issues

    Can we move up by issueSummaryTableView, to try to keep the rough alphabetical order? (I know we can't always do that, but if it's possible here, it'd be nice.)

  21. Show all issues

    Here and further down, <h1> is probably not appropriate. The primary <h1> is the app title in the header bar. The box title, while not a <hX>, should be considered header level 2. This should probably be <h3>.

    Same with others below.

  22. reviewboard/templates/reviews/boxes/change.html (Diff revision 1)
     
     
     
     
    Show all issues

    This can also use {% include ... with ... %}

  23. reviewboard/templates/reviews/boxes/initial_status_updates.html (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    Looks like we're duplicating a lot of complex stuff here. We should split this off into a utility template.

  24. Show all issues

    Same comments about <h1> vs. <h3>.

  25. Show all issues

    Can be {% include ... with ... %}

  26. reviewboard/templates/reviews/boxes/initial_status_updates.js (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    Show all issues

    This is done twice. Can we consolidate?

    1. I don't think there's really a good way to consolidate that isn't just a hack. I'll add comments.

  27. reviewboard/templates/reviews/review_detail.html (Diff revision 1)
     
     
     
     
    Show all issues

    This can be:

    {%   include entry.template_name with entry=initial_status.entry %}
    
  28. reviewboard/templates/reviews/review_detail.html (Diff revision 1)
     
     
     
     
    Show all issues

    Here, too.

  29. 
      
david
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/detail.py
        reviewboard/staticbundles.py
    
    Ignored Files:
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/boxes/initial_status_updates.html
        reviewboard/static/rb/js/views/changeBoxView.es6.js
        reviewboard/templates/reviews/status_update_summary.html
        reviewboard/templates/reviews/boxes/change.js
        reviewboard/static/rb/js/views/reviewView.es6.js
        reviewboard/templates/reviews/review_detail.html
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/initial_status_updates.js
        reviewboard/static/rb/js/views/initialStatusUpdatesBoxView.es6.js
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewBoxView.es6.js
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/detail.py
        reviewboard/staticbundles.py
    
    Ignored Files:
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/boxes/initial_status_updates.html
        reviewboard/static/rb/js/views/changeBoxView.es6.js
        reviewboard/templates/reviews/status_update_summary.html
        reviewboard/templates/reviews/boxes/change.js
        reviewboard/static/rb/js/views/reviewView.es6.js
        reviewboard/templates/reviews/review_detail.html
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/initial_status_updates.js
        reviewboard/static/rb/js/views/initialStatusUpdatesBoxView.es6.js
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewBoxView.es6.js
    
    
  2. 
      
david
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/detail.py
        reviewboard/staticbundles.py
    
    Ignored Files:
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/boxes/initial_status_updates.html
        reviewboard/templates/reviews/boxes/review_body.html
        reviewboard/static/rb/js/views/changeBoxView.es6.js
        reviewboard/templates/reviews/status_update_summary.html
        reviewboard/templates/reviews/boxes/change.js
        reviewboard/static/rb/js/views/reviewView.es6.js
        reviewboard/templates/reviews/review_detail.html
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/initial_status_updates.js
        reviewboard/static/rb/js/views/initialStatusUpdatesBoxView.es6.js
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewBoxView.es6.js
        reviewboard/templates/reviews/status_update_review_section.html
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/reviews/detail.py
        reviewboard/staticbundles.py
    
    Ignored Files:
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/boxes/initial_status_updates.html
        reviewboard/templates/reviews/boxes/review_body.html
        reviewboard/static/rb/js/views/changeBoxView.es6.js
        reviewboard/templates/reviews/status_update_summary.html
        reviewboard/templates/reviews/boxes/change.js
        reviewboard/static/rb/js/views/reviewView.es6.js
        reviewboard/templates/reviews/review_detail.html
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/initial_status_updates.js
        reviewboard/static/rb/js/views/initialStatusUpdatesBoxView.es6.js
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewBoxView.es6.js
        reviewboard/templates/reviews/status_update_review_section.html
    
    
  2. 
      
chipx86
  1. 
      
  2. reviewboard/reviews/detail.py (Diff revision 3)
     
     
    Show all issues

    bool

  3. reviewboard/reviews/views.py (Diff revision 3)
     
     
    Show all issues

    Can you add a trailing period here?

  4. 
      
david
Review request changed
Status:
Completed
Change Summary:
Pushed to release-3.0.x (84f97f0)