[TNL-4029] Show error if server returns customised error message
This commit is contained in:
@@ -34,6 +34,9 @@ var edx = edx || {};
|
||||
// Emit an event when the 'course title link' is clicked.
|
||||
edx.dashboard.trackCourseTitleClicked = function($courseTitleLink, properties){
|
||||
var trackProperty = properties || edx.dashboard.generateTrackProperties;
|
||||
if (!window.analytics) {
|
||||
return;
|
||||
}
|
||||
window.analytics.trackLink(
|
||||
$courseTitleLink,
|
||||
'edx.bi.dashboard.course_title.clicked',
|
||||
@@ -102,6 +105,10 @@ var edx = edx || {};
|
||||
};
|
||||
|
||||
edx.dashboard.xseriesTrackMessages = function() {
|
||||
if (!window.analytics) {
|
||||
return;
|
||||
}
|
||||
|
||||
$('.xseries-action .btn').each(function(i, element) {
|
||||
var data = edx.dashboard.generateProgramProperties($(element));
|
||||
|
||||
|
||||
33
lms/static/js/edxnotes/plugins/store_error_handler.js
Normal file
33
lms/static/js/edxnotes/plugins/store_error_handler.js
Normal file
@@ -0,0 +1,33 @@
|
||||
(function (define, undefined) {
|
||||
'use strict';
|
||||
|
||||
define(['annotator_1.2.9'], function (Annotator) {
|
||||
/**
|
||||
* Modifies Annotator.Plugin.Store.prototype._onError to show custom error message
|
||||
* if sent by server
|
||||
*/
|
||||
var originalErrorHandler = Annotator.Plugin.Store.prototype._onError;
|
||||
Annotator.Plugin.Store.prototype._onError = function (xhr) {
|
||||
var serverResponse;
|
||||
|
||||
// Try to parse json
|
||||
if (xhr.responseText) {
|
||||
try {
|
||||
serverResponse = JSON.parse(xhr.responseText);
|
||||
} catch (exception) {
|
||||
serverResponse = null;
|
||||
}
|
||||
}
|
||||
|
||||
// if response includes an error message it will take precedence
|
||||
if (serverResponse && serverResponse.error_msg) {
|
||||
Annotator.showNotification(serverResponse.error_msg, Annotator.Notification.ERROR);
|
||||
return console.error(Annotator._t("API request failed:") + (" '" + xhr.status + "'"));
|
||||
}
|
||||
|
||||
// Delegate to original error handler
|
||||
originalErrorHandler(xhr);
|
||||
};
|
||||
});
|
||||
}).call(this, define || RequireJS.define);
|
||||
|
||||
@@ -4,7 +4,8 @@ define([
|
||||
'jquery', 'underscore', 'annotator_1.2.9', 'js/edxnotes/utils/logger',
|
||||
'js/edxnotes/views/shim', 'js/edxnotes/plugins/scroller',
|
||||
'js/edxnotes/plugins/events', 'js/edxnotes/plugins/accessibility',
|
||||
'js/edxnotes/plugins/caret_navigation'
|
||||
'js/edxnotes/plugins/caret_navigation',
|
||||
'js/edxnotes/plugins/store_error_handler'
|
||||
], function ($, _, Annotator, NotesLogger) {
|
||||
var plugins = ['Auth', 'Store', 'Scroller', 'Events', 'Accessibility', 'CaretNavigation', 'Tags'],
|
||||
getOptions, setupPlugins, getAnnotator;
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
define([
|
||||
'jquery', 'underscore', 'annotator_1.2.9',
|
||||
'common/js/spec_helpers/ajax_helpers',
|
||||
'js/spec/edxnotes/helpers',
|
||||
'js/edxnotes/views/notes_factory'
|
||||
], function ($, _, Annotator, AjaxHelpers, Helpers, NotesFactory) {
|
||||
'use strict';
|
||||
describe('Store Error Handler Custom Message', function () {
|
||||
beforeEach(function () {
|
||||
spyOn(Annotator, 'showNotification');
|
||||
loadFixtures('js/fixtures/edxnotes/edxnotes_wrapper.html');
|
||||
this.wrapper = document.getElementById('edx-notes-wrapper-123');
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
_.invoke(Annotator._instances, 'destroy');
|
||||
});
|
||||
|
||||
it('can handle custom error if sent from server', function () {
|
||||
var requests = AjaxHelpers.requests(this);
|
||||
var token = Helpers.makeToken();
|
||||
NotesFactory.factory(this.wrapper, {
|
||||
endpoint: '/test_endpoint',
|
||||
user: 'a user',
|
||||
usageId: 'an usage',
|
||||
courseId: 'a course',
|
||||
token: token,
|
||||
tokenUrl: '/test_token_url'
|
||||
});
|
||||
|
||||
var errorMsg = 'can\'t create more notes';
|
||||
AjaxHelpers.respondWithError(requests, 400, {error_msg: errorMsg});
|
||||
expect(Annotator.showNotification).toHaveBeenCalledWith(errorMsg, Annotator.Notification.ERROR);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -705,6 +705,7 @@
|
||||
'lms/include/js/spec/edxnotes/plugins/events_spec.js',
|
||||
'lms/include/js/spec/edxnotes/plugins/scroller_spec.js',
|
||||
'lms/include/js/spec/edxnotes/plugins/caret_navigation_spec.js',
|
||||
'lms/include/js/spec/edxnotes/plugins/store_error_handler_spec.js',
|
||||
'lms/include/js/spec/edxnotes/collections/notes_spec.js',
|
||||
'lms/include/js/spec/search/search_spec.js',
|
||||
'lms/include/js/spec/navigation_spec.js',
|
||||
|
||||
Reference in New Issue
Block a user