Improve the style of generated e-mails.

E-mails were a bit ugly. (They still are with this change, but less so.)

The border of the review request boxes was pure black, which was a bit
heavy. It was also very boxy.

I've made the colors match what we have in Review Board, and added some
border radiuses (for clients that support it) to all the main boxes.

I've also fixed up the style for the "Review request closed" bar, which
was too large, due to default styles for the <h1>.

Reviewed at https://reviews.reviewboard.org/r/5720/
Replace the non-standard Event 'srcElement' property with the standard 'target' one

Event.srcElement is IE-specific and isn't supported in Firefox.

Testing Done:
I confirmed the following now work in Firefox:
* Issue column sorting
* Switching image diff modes
* The issue automatically expands when you click one from the issue summary

Reviewed at https://reviews.reviewboard.org/r/5703/
Add support for namespaced suites for JavaScript unit tests.

Unit tests using Jasmine consist of files each wrapping a series of
tests and definitions in one big describe() call. For organization,
we've been using the convention of namespacing these, in order to see
whether a test suite is part of, say, the API resources code, or the
diffviewer views code, allowing for easily searching on the page.
However, this still makes it hard to run a subset of tests, when they
span multiple files.

This introduces a new Jasmine utility library, jasmine.suites, which
allows us to replace that big describe() all with a suite() call. This
will generate describe() calls for us, reusing existing ones for
previously registered levels of the namespace tree. The result is that,
instead of running all tests to see if all resource tests pass, we can
now just run the "resources" suite independently. It's equivalent to
moving all tests into one big file and wrapping the resources tests in
its own big describe() call.

This utility library will be released externally as its own independent
module, but I'm putting it here for review purposes for now.

Reviewed at https://reviews.reviewboard.org/r/5727/
Use jasmine.suites for all Review Board JavaScript unit tests.

This switches all our unit tests to use the new jasmine.suites utility
library. It breaks down all the '/'-separated paths for each file's test
namespace into test suites and combines them to make it easier to suites
spread out across files.

All existing suites are placed under a 'rb/' namespace, which will make
it easier to distinguish Review Board tests from Djblets or other
modules.

Reviewed at https://reviews.reviewboard.org/r/5728/
Fix an AttributeError in the github post-receive hook.

Sometimes, the payload for the post-receive hook doesn't have a ref name. I
believe this occurs when pushing things other than refs like tags or branch
heads. In this case, we don't want to try to call None.startswith().

Trivial fix.
Trivial fix for parsing ReviewGroup payloads.

My recent change to enable parsing ReviewGroup payloads didn't
transition correctly between my repositories. I ended up placing the
'rspNamespace' on the wrong object. Now parsing works correctly again.
Fix a bunch of pyflakes warnings.

Fix up things that have snuck in over the past few months. Trivial changes.

Testing done: Ran unit tests.

Reviewed at https://reviews.reviewboard.org/r/5733/
Fix a couple hard-to-translate strings.

Strings which use multiple format operators without naming them are hard to
translate. Switch over to the dict-formatting for these instead.

Testing done: Extracted the message catalog and didn't see a warning.

Reviewed at https://reviews.reviewboard.org/r/5741/
Update locale files for Review Board.

This change bundles together three things:

* Extracted all newly-introduced strings.
* Added all translations and updated strings from transifex (including a few new
  languages that have small numbers of strings)
* Removed LANGUAGES from settings.py, so that we can just fall back on Django's
  list, which is much more comprehensive.

Reviewed at https://reviews.reviewboard.org/r/5743/
Add publishing signals

This adds "publishing" signals, executed before any data is saved.  The
intention is that an extension can block publishing if, for example, there's a
problem communicating with an outside system, by raising an exception.

I added a PublishError class and made web API publish functions turn them into
WebAPIErrors.  This is the part I'm least certain about.  I want to allow
extension to define the errors, but it doesn't make sense for the publishing
signal handlers to be throwing WebAPIErrors directly.  The compromise I came up
with was to just put the PublishError string into a generic WebAPIError with a
special user code of 999.  Other ideas welcome; I just wanted something to
start a conversation.

The ReviewRequestEditor model already had some basic error handling (a simple
alert dialog).  I added similar error handling to DraftReviewBannerView and
ReviewReplyDraftBannerView.  As far as I can tell, that covers all interfaces
to updating (publishing) reviews, review requests, and review replies.

Testing Done:
All tests pass except some VCS-specific ones, which were skipped.  I also did
some manual verification of the full system by throwing PublishError exceptions
in an extension and verifying that the message appeared in an alert box in the
UI.

Reviewed at https://reviews.reviewboard.org/r/5723/
Fix duplicate "Markdown Reference" links.

MarkdownEditor could end up creating duplicate "Markdown Reference"
links when opening the same editor more than once. An easy repro case is
to draft a reply, save, and open it again. Every time that is done,
there would be an extra link.

We now check for the existence of a link before attempting to add one.

Reviewed at https://reviews.reviewboard.org/r/5749/
Don't allow "Hide Closed" to bleed into dashboard datagrids.

The toggle for hiding closed review requests on the user and all review request
grids would set a profile flag, and then bled into the "All Outgoing" datagrid.
This change adds some plumbing to prevent this from happening.

Testing done:
Reproduced the bug, and then tried with this change. Saw that with the profile
flag set, the dashboard datagrids showed closed review requests, but the others
did not.

Fixes bug 3319.

Reviewed at https://reviews.reviewboard.org/r/5746/
Normalize filediff filenames during creation.

Some of the diff APIs that we're using for post-commit review request creation
(looking at you, GitHub) give us filenames with leading slashes. This doesn't
match what we have elsewhere, which makes things annoying if filenames don't
match.

Testing done:
Used this in conjunction with testing out the suggested reviewers feature. Saw
that when I created a post-commit review request, the filenames matched what
would have been created from rbtools.

Reviewed at https://reviews.reviewboard.org/r/5734/
Switch to more explicit CSS styles for boxes in Review Board.

Boxes in Review Board now follow the new convention in Djblets of
prefixing all related CSS classes with "box-" and wrapping the title
element in a "box-head" div.

This matches what we've been using in RBCommons, helping us to keep
things consistent, and prevents conflicts with existing "title" and
"main" CSS classes.

Reviewed at https://reviews.reviewboard.org/r/5754/
Fix UnicodeDecodeError while LDAP-authenticating when user dn contains non-ascii symbols

Some logging statements would fail because we were trying to format a
bytestring. This change adds code to decode bytes that we get from LDAP into
unicode strings before logging.

This also fixes a bunch of logging statements to use the built-in formatter,
and pass exc_info=1 to all calls that are formatting an exception.

Reviewed at https://reviews.reviewboard.org/r/5751/
Merge branch 'release-2.0.x'
Style .box-head separately from .box-title.

The .box-title class was being styled with a border and background, but
this really belongs in .box-head. By doing this, it's easier for us to
change the style of one or the other, and to add additional elements
inside of .box-head.

Reviewed at https://reviews.reviewboard.org/r/5755/
Merge branch 'release-2.0.x'
Added sandboxing to action_hooks

This change adds sandboxing to the various action hooks (which allow users to
insert buttons or menu items into various pieces of the UI), so that broken
extensions won't break everything.

Testing Done:
Unit testing done - tested all 5 different action hooks (DiffViewerActionHook,
HeaderActionHook, HeaderDropdownActionHook, ReivewRequestActionHook,
ReviewRequestDropdownActionHook) with and without the sandboxing. Ran on all
tests in extensions/tests.py

Reviewed at https://reviews.reviewboard.org/r/5710/
Merge branch 'release-2.0.x'