oq-ui-api/geonode/exposure/views.py:

Sort imports.
oq-ui-api/geonode/exposure/views.py:

`get_exposure_export_form` returns a 401 if the user isn't logged in.
oq-ui-client2/exposure_export.html:

Added a placeholder div for display error messages.
oq-ui-client2/src/exposure/exposure_export.js:

Added `showErrorDialog` util function.
oq-ui-client2/src/exposure/exposure_export.js:

Renamed `exposureExportFormLoaded` to `loadExposureExportForm`.
oq-ui-client2/exposure_export.html:

Capture URL params in the template, which allows them to be accessed
using the URL_PARAMS global var.
oq-ui-client2/src/exposure/exposure_export.js:

Massive refactoring, broke out things into more composable functions.

The export now requires login, and also supports workflow resumability
if login is required: after login, the app is redirected and restores
the users selection, and then attempts to do the export (so the user
doesn't have to select again).
oq-ui-client2/src/exposure/exposure_export.js:

Minor UI tweaks, related to the export popup.
geonode/exposure/util.py:

Added some custom view decorators.
geonode/exposure/views.py:

Factored out some generic view functionality into some decorators
(1 for requiring authentication, 1 for allowing only specific request
method types).
geonode/exposure/tests.py:

Added a missing test case.
geonode/exposure/tests.py:

pep8/pyflakes
geonode/exposure/tests.py:

Updated test case mock objects.
geonode/exposure/tests.py:

Added view decorator test cases.
oq-ui-client2/src/exposure/exposure_export.js:

Fix the ajax spinner image.