Files
edx-platform/lms/static/js/staff_debug_actions.js
Eric Fischer 5bc6b31e29 eslint --fix
2017-12-08 14:38:41 -05:00

175 lines
6.4 KiB
JavaScript

// Build StaffDebug object
var StaffDebug = (function() {
/* global getCurrentUrl:true */
var getURL = function(action) {
var pathname = this.getCurrentUrl();
return pathname.substr(0, pathname.indexOf('/courseware')) + '/instructor/api/' + action;
};
var sanitizeString = function(string) {
return string.replace(/[.*+?^:${}()|[\]\\]/g, '\\$&');
};
var getUser = function(locationName) {
var sanitizedLocationName = sanitizeString(locationName);
var uname = $('#sd_fu_' + sanitizedLocationName).val();
if (uname === '') {
uname = $('#sd_fu_' + sanitizedLocationName).attr('placeholder');
}
return uname;
};
var getScore = function(locationName) {
var sanitizedLocationName = sanitizeString(locationName);
var score = $('#sd_fs_' + sanitizedLocationName).val();
if (score === '') {
score = $('#sd_fs_' + sanitizedLocationName).attr('placeholder');
}
return score;
};
var doInstructorDashAction = function(action) {
var pdata = {
problem_to_reset: action.location,
unique_student_identifier: getUser(action.locationName),
delete_module: action.delete_module,
only_if_higher: action.only_if_higher,
score: action.score
};
$.ajax({
type: 'POST',
url: getURL(action.method),
data: pdata,
success: function(data) {
var text = _.template(action.success_msg, {interpolate: /\{(.+?)\}/g})(
{user: data.student}
);
var html = _.template('<p id="idash_msg" class="success">{text}</p>', {interpolate: /\{(.+?)\}/g})(
{text: text}
);
$('#result_' + sanitizeString(action.locationName)).html(html);
},
error: function(request, status, error) {
var responseJSON;
try {
responseJSON = $.parseJSON(request.responseText);
} catch (e) {
responseJSON = 'Unknown Error Occurred.';
}
var text = _.template('{error_msg} {error}', {interpolate: /\{(.+?)\}/g})(
{
error_msg: action.error_msg,
error: gettext(responseJSON)
}
);
var html = _.template('<p id="idash_msg" class="error">{text}</p>', {interpolate: /\{(.+?)\}/g})(
{text: text}
);
$('#result_' + sanitizeString(action.locationName)).html(html);
},
dataType: 'json'
});
};
var reset = function(locname, location) {
this.doInstructorDashAction({
locationName: locname,
location: location,
method: 'reset_student_attempts',
success_msg: gettext('Successfully reset the attempts for user {user}'),
error_msg: gettext('Failed to reset attempts for user.'),
delete_module: false
});
};
var deleteStudentState = function(locname, location) {
this.doInstructorDashAction({
locationName: locname,
location: location,
method: 'reset_student_attempts',
success_msg: gettext('Successfully deleted student state for user {user}'),
error_msg: gettext('Failed to delete student state for user.'),
delete_module: true
});
};
var rescore = function(locname, location) {
this.doInstructorDashAction({
locationName: locname,
location: location,
method: 'rescore_problem',
success_msg: gettext('Successfully rescored problem for user {user}'),
error_msg: gettext('Failed to rescore problem for user.'),
only_if_higher: false
});
};
var rescoreIfHigher = function(locname, location) {
this.doInstructorDashAction({
locationName: locname,
location: location,
method: 'rescore_problem',
success_msg: gettext('Successfully rescored problem to improve score for user {user}'),
error_msg: gettext('Failed to rescore problem to improve score for user.'),
only_if_higher: true
});
};
var overrideScore = function(locname, location) {
this.doInstructorDashAction({
locationName: locname,
location: location,
method: 'override_problem_score',
success_msg: gettext('Successfully overrode problem score for {user}'),
error_msg: gettext('Could not override problem score for {user}.'),
score: getScore(locname)
});
};
getCurrentUrl = function() {
return window.location.pathname;
};
return {
reset: reset,
deleteStudentState: deleteStudentState,
rescore: rescore,
rescoreIfHigher: rescoreIfHigher,
overrideScore: overrideScore,
// export for testing
doInstructorDashAction: doInstructorDashAction,
getCurrentUrl: getCurrentUrl,
getURL: getURL,
getUser: getUser,
getScore: getScore,
sanitizeString: sanitizeString
};
}());
// Register click handlers
$(document).ready(function() {
var $courseContent = $('.course-content');
$courseContent.on('click', '.staff-debug-reset', function() {
StaffDebug.reset($(this).parent().data('location-name'), $(this).parent().data('location'));
return false;
});
$courseContent.on('click', '.staff-debug-sdelete', function() {
StaffDebug.deleteStudentState($(this).parent().data('location-name'), $(this).parent().data('location'));
return false;
});
$courseContent.on('click', '.staff-debug-rescore', function() {
StaffDebug.rescore($(this).parent().data('location-name'), $(this).parent().data('location'));
return false;
});
$courseContent.on('click', '.staff-debug-rescore-if-higher', function() {
StaffDebug.rescoreIfHigher($(this).parent().data('location-name'), $(this).parent().data('location'));
return false;
});
$courseContent.on('click', '.staff-debug-override-score', function() {
StaffDebug.overrideScore($(this).parent().data('location-name'), $(this).parent().data('location'));
return false;
});
});