Commit 78a61c1f by Ehtesham Committed by muzaffaryousaf

[TNL-4029] Show error if server returns customised error message

parent d226b55b
...@@ -34,6 +34,9 @@ var edx = edx || {}; ...@@ -34,6 +34,9 @@ var edx = edx || {};
// Emit an event when the 'course title link' is clicked. // Emit an event when the 'course title link' is clicked.
edx.dashboard.trackCourseTitleClicked = function($courseTitleLink, properties){ edx.dashboard.trackCourseTitleClicked = function($courseTitleLink, properties){
var trackProperty = properties || edx.dashboard.generateTrackProperties; var trackProperty = properties || edx.dashboard.generateTrackProperties;
if (!window.analytics) {
return;
}
window.analytics.trackLink( window.analytics.trackLink(
$courseTitleLink, $courseTitleLink,
'edx.bi.dashboard.course_title.clicked', 'edx.bi.dashboard.course_title.clicked',
...@@ -102,6 +105,10 @@ var edx = edx || {}; ...@@ -102,6 +105,10 @@ var edx = edx || {};
}; };
edx.dashboard.xseriesTrackMessages = function() { edx.dashboard.xseriesTrackMessages = function() {
if (!window.analytics) {
return;
}
$('.xseries-action .btn').each(function(i, element) { $('.xseries-action .btn').each(function(i, element) {
var data = edx.dashboard.generateProgramProperties($(element)); var data = edx.dashboard.generateProgramProperties($(element));
......
(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([ ...@@ -4,7 +4,8 @@ define([
'jquery', 'underscore', 'annotator_1.2.9', 'js/edxnotes/utils/logger', 'jquery', 'underscore', 'annotator_1.2.9', 'js/edxnotes/utils/logger',
'js/edxnotes/views/shim', 'js/edxnotes/plugins/scroller', 'js/edxnotes/views/shim', 'js/edxnotes/plugins/scroller',
'js/edxnotes/plugins/events', 'js/edxnotes/plugins/accessibility', '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) { ], function ($, _, Annotator, NotesLogger) {
var plugins = ['Auth', 'Store', 'Scroller', 'Events', 'Accessibility', 'CaretNavigation', 'Tags'], var plugins = ['Auth', 'Store', 'Scroller', 'Events', 'Accessibility', 'CaretNavigation', 'Tags'],
getOptions, setupPlugins, getAnnotator; getOptions, setupPlugins, getAnnotator;
......
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 @@ ...@@ -705,6 +705,7 @@
'lms/include/js/spec/edxnotes/plugins/events_spec.js', 'lms/include/js/spec/edxnotes/plugins/events_spec.js',
'lms/include/js/spec/edxnotes/plugins/scroller_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/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/edxnotes/collections/notes_spec.js',
'lms/include/js/spec/search/search_spec.js', 'lms/include/js/spec/search/search_spec.js',
'lms/include/js/spec/navigation_spec.js', 'lms/include/js/spec/navigation_spec.js',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment