Redesign the look and feel of the review requests page.

Review Request #7240 — Created April 22, 2015 and submitted

Information

Review Board
release-2.5.x
1c8a76e...

Reviewers

The review request page was, in many ways, largely unchanged from the
1.0 days. We've had tweaks here and there, and some layout changes, but
the actual review portion has hardly been touched in years.

This is the first big redesign of this page we've had. It substantially
changes the look and feel, removing a lot of the boxes, toning down
gradients, tightening some spacing and expanding others, and bringing a
more modern look to the page. There are also usability enhancements over
what we had in the past.

In terms of style polish, the big highlights are that there's more
breathing room between reviews, between comments, and between the
content and the browser's boundaries. There are no longer an extra set
of borders within each review for the content, but rather the body of the
review is flat white, providing a cleaner feel. The action bar at the
top no longer has borders separating each action, opting instead to have
appropriate spacing between the items.

There are a few other major changes added on to this as well.

First, the actions on the page no longer include the page views (View
Diff, View Reviews, etc.). Those have been moved just to the right of
the action bar, as a set of tabs. The current page always has an entry
now, making it clear where you are and where you can go.

There are now gravatars shown to the left of the reviews, and to the
left of any comments. The ones on the reviews also contain the
"Ship it!" label, rather than having that appear on reviews. If there
are any issues opened, a "Fix it!" label will show instead. If it's in a
"Fix it, then ship it!" stage, we show a "Fix it!" label sitting on top
of a "Ship it!" label. Any changes to these labels (as the result of
closing/reopening issues) animates the label state, providing a clean,
cute transition.

The border around the gravatars are faintly dotted, with the color
matching the Ship It or Fix It state. This also transitions when the
labels do.

The green reply draft banners now extend up to the top of the review
box. This is quite nice when looking at a collapsed or expanded box.

The timestamps in the page now show only the relative times, as hovering
over them already shows the absolute times. That removes a lot of visual
noise from the page.

The "Add Comment" links on the right have been replaced with "Reply" or
"Comment" buttons on the left. The difference in text depends on whether
there's existing content being replied to.

The "Expand All"/"Collapse All" links (and equivalent links in the diff
viewer) no longer sit in the bottom-right of the review request box, but
rather are prominent btutons separating the review request and reviews.
Likewise, for the diff viewer, they separate the box and the diffs.

Tested all the functionality and browsed through all affected pages in
Chrome and Firefox. My IE VM has been nuked, so I'll be testing that once
I get that going again.

This functionality included:

  • Expanding/collapsing reviews.
  • Replying to comments.
  • Toggling issue states and watching what the labels did (in both the "Fix It" and
    the "Fix it, then ship it" states.
  • Invoking actions from the action bar.
  • Navigating between tabs for review requests, diffs, and file attachments.
  • The floating reply draft banners.
  • The Expand All/Collapse All buttons.
  • The various view buttons for diffs (Show Whitespace Changes, etc.).
  • Expanding diffs in the review comments.

(Note that the animation image attached has some color palette goofiness, due
to being a gif, so ignore that aspect of it.)


Description From Last Updated

Can we use the same + and - icons as in the review boxes?

daviddavid

The height of the gravatars means that these boxes are pretty tall, which makes it less obvious at a glance …

daviddavid

'django_reset' imported but unused

reviewbotreviewbot

'from settings_local import *' used; unable to detect undefined names

reviewbotreviewbot

'PIPELINE_CSS' imported but unused

reviewbotreviewbot

'PIPELINE_JS' imported but unused

reviewbotreviewbot

Should start with a capital I. This whole comment is a little bit confusing, though. How about: If there are …

daviddavid

Mind attaching a screenshot of the file review UI?

daviddavid

'django_reset' imported but unused

reviewbotreviewbot

'from settings_local import *' used; unable to detect undefined names

reviewbotreviewbot

'PIPELINE_JS' imported but unused

reviewbotreviewbot

'PIPELINE_CSS' imported but unused

reviewbotreviewbot
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/settings.py
        reviewboard/reviews/templatetags/reviewtags.py
    
    Ignored Files:
        reviewboard/templates/reviews/review_detail.html
        reviewboard/templates/reviews/review_reply_section.html
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/ui/base.html
        reviewboard/templates/base.html
        reviewboard/static/rb/js/pages/views/reviewRequestPageView.js
        reviewboard/static/rb/css/ui/datagrids.less
        reviewboard/templates/reviews/review_issue_summary_table.html
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/floatingBannerView.js
        reviewboard/templates/reviews/review_reply.html
        reviewboard/templates/diffviewer/view_diff.html
        reviewboard/static/rb/css/pages/base.less
        reviewboard/static/rb/css/ui/boxes.less
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/static/rb/js/views/reviewBoxView.js
        reviewboard/static/rb/js/views/reviewReplyEditorView.js
        reviewboard/static/rb/css/defs.less
        reviewboard/static/rb/js/models/userSessionModel.js
        reviewboard/static/rb/js/pages/views/diffViewerPageView.js
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/settings.py
        reviewboard/reviews/templatetags/reviewtags.py
    
    Ignored Files:
        reviewboard/templates/reviews/review_detail.html
        reviewboard/templates/reviews/review_reply_section.html
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/templates/reviews/ui/base.html
        reviewboard/templates/base.html
        reviewboard/static/rb/js/pages/views/reviewRequestPageView.js
        reviewboard/static/rb/css/ui/datagrids.less
        reviewboard/templates/reviews/review_issue_summary_table.html
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/floatingBannerView.js
        reviewboard/templates/reviews/review_reply.html
        reviewboard/templates/diffviewer/view_diff.html
        reviewboard/static/rb/css/pages/base.less
        reviewboard/static/rb/css/ui/boxes.less
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/static/rb/js/views/reviewBoxView.js
        reviewboard/static/rb/js/views/reviewReplyEditorView.js
        reviewboard/static/rb/css/defs.less
        reviewboard/static/rb/js/models/userSessionModel.js
        reviewboard/static/rb/js/pages/views/diffViewerPageView.js
    
    
  2. reviewboard/settings.py (Diff revision 1)
     
     
    Show all issues
     'django_reset' imported but unused
    
  3. reviewboard/settings.py (Diff revision 1)
     
     
    Show all issues
     'from settings_local import *' used; unable to detect undefined names
    
  4. reviewboard/settings.py (Diff revision 1)
     
     
    Show all issues
     'PIPELINE_CSS' imported but unused
    
  5. reviewboard/settings.py (Diff revision 1)
     
     
    Show all issues
     'PIPELINE_JS' imported but unused
    
  6. 
      
david
  1. 
      
  2. Show all issues

    Can we use the same + and - icons as in the review boxes?

    1. I had that originally, and it looked ugly. I tried using these instead for the review boxes, but then they didn't stand out.

      I think in this context, it's clear that the whole thing is a button. On the review, it's clear that that's a button. The "+" and "-" are consistent between the two. Putting a button look on another button is probably not going to benefit us in any way, I don't think.

  3. Show all issues

    The height of the gravatars means that these boxes are pretty tall, which makes it less obvious at a glance that there's hidden content. I wonder if we can use that extra vertical space and give the bottom a jagged edge (excuse my crummy ascii art):

    ----------------------------------
    | + Christian Hammond            |
    vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    

    This way it would be more immediately obvious that something was hidden.

    1. Hmm, I'm not really sure how we'd do that.

      This is why I went with a different color scheme for collapsed boxes (though the green doesn't take advantage of it), to help differentiate from expanded ones.

      I'll think about what I can do here.

    2. I've tried a handful of things, and I don't like any of them, implementation-wise. CSS doesn't make it easy. People have discovered hacky ways to make the jagged edges work, but you can't give them borders or proper shadows, so they look crappy.

      I also tried using dotted and dashed lines. It looks more broken/flawed than helpful.

      I'll continue to think about this. For now, can we defer this as future work?

    3. Sure. Please make sure that's tracked somewhere.

  4. Show all issues

    Should start with a capital I. This whole comment is a little bit confusing, though.

    How about:

    If there are open issues, there will be a "Fix it!" label.
    
    If there's a Ship It, there will be a "Ship it!" label.
    
    If there's both a Ship It and open issues, the "Fix it!" label will be shown overlaid on top of the "Ship it!" label, and will go away once the issues are resolved.
    
  5. reviewboard/templates/reviews/ui/base.html (Diff revision 1)
     
     
     
     
     
     
     
     
     
     
    Show all issues

    Mind attaching a screenshot of the file review UI?

  6. 
      
gmyers
  1. Christian, a couple of comments from toying with the new UI:

    1. Very cool!
    2. The gravatar's do not seem to respect the "Use Gravatar images" config setting, in that when I disable the setting I still see gravatars. This applies to the datagrid changes in 7216 too.
    3. In Firefox (Windows 37.0.1 or Linux 31.3.0) I do not see the faintly dotted border around the gravatar's, but rather a solid line. In IE 11 I do see faintly dotted. FWIW, I think I prefer the solid line, especially for yellow (ship it) where my eyes have a hard time distinguishing yellow from the gray background.
    4. With the significant increase in amount of gravatar's displayed, I'd like to suggest an admin config setting to select the default gravatar type. It looks like you have set the default to mystery-man, but in an environment where many users have not set up their gravatar I'd prefer to set the default to wavatar or one of the other "dynamic" default types to create a visual distinction between users.
    1. Thanks for the feedback!

      I'll makee sure to address #2 in an update.

      For #3, I'll play with it more. I was intentionally going for a very subtle approach of the dots (given that the labels are the more visually-noticeable elements for the status, I wasn't too concerned about the dots standing out), but I can toy with it. None of this is set in stone, and I expect some of it will change after beta 2 anyway.

      For #4, the default can be set in settings_local.py. I think it makes sense to have some UI around this, but I'd want to do that as part of a larger change that reduces the reliability on gravatars, and instead allows companies to link up with whatever internal service they're already using for avatars/employee pictures.

  2. 
      
chipx86
reviewbot
  1. Tool: Pyflakes
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/settings.py
        reviewboard/reviews/templatetags/reviewtags.py
    
    Ignored Files:
        reviewboard/templates/reviews/review_detail.html
        reviewboard/templates/reviews/review_reply_section.html
        reviewboard/templates/reviews/ui/base.html
        reviewboard/templates/base.html
        reviewboard/static/rb/js/pages/views/reviewRequestPageView.js
        reviewboard/templates/reviews/review_reply.html
        reviewboard/static/rb/js/views/reviewBoxView.js
        reviewboard/templates/reviews/review_issue_summary_table.html
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/static/rb/js/views/floatingBannerView.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        reviewboard/templates/diffviewer/view_diff.html
        reviewboard/static/rb/css/pages/base.less
        reviewboard/static/rb/css/ui/boxes.less
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewReplyEditorView.js
        reviewboard/static/rb/css/defs.less
        reviewboard/static/rb/js/models/userSessionModel.js
        reviewboard/static/rb/js/pages/views/diffViewerPageView.js
    
    
    
    Tool: PEP8 Style Checker
    Processed Files:
        reviewboard/reviews/views.py
        reviewboard/settings.py
        reviewboard/reviews/templatetags/reviewtags.py
    
    Ignored Files:
        reviewboard/templates/reviews/review_detail.html
        reviewboard/templates/reviews/review_reply_section.html
        reviewboard/templates/reviews/ui/base.html
        reviewboard/templates/base.html
        reviewboard/static/rb/js/pages/views/reviewRequestPageView.js
        reviewboard/templates/reviews/review_reply.html
        reviewboard/static/rb/js/views/reviewBoxView.js
        reviewboard/templates/reviews/review_issue_summary_table.html
        reviewboard/templates/reviews/boxes/review.html
        reviewboard/static/rb/js/views/floatingBannerView.js
        reviewboard/static/rb/js/views/reviewRequestEditorView.js
        reviewboard/templates/diffviewer/view_diff.html
        reviewboard/static/rb/css/pages/base.less
        reviewboard/static/rb/css/ui/boxes.less
        reviewboard/static/rb/css/pages/reviews.less
        reviewboard/templates/reviews/boxes/change.html
        reviewboard/static/rb/js/views/reviewReplyEditorView.js
        reviewboard/static/rb/css/defs.less
        reviewboard/static/rb/js/models/userSessionModel.js
        reviewboard/static/rb/js/pages/views/diffViewerPageView.js
    
    
  2. reviewboard/settings.py (Diff revision 2)
     
     
    Show all issues
     'django_reset' imported but unused
    
  3. reviewboard/settings.py (Diff revision 2)
     
     
    Show all issues
     'from settings_local import *' used; unable to detect undefined names
    
  4. reviewboard/settings.py (Diff revision 2)
     
     
    Show all issues
     'PIPELINE_JS' imported but unused
    
  5. reviewboard/settings.py (Diff revision 2)
     
     
    Show all issues
     'PIPELINE_CSS' imported but unused
    
  6. 
      
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to release-2.5.x (a8168fd)