200 lines
8.0 KiB
JavaScript
200 lines
8.0 KiB
JavaScript
/* globals _ */
|
|
|
|
(function() {
|
|
'use strict';
|
|
|
|
var Extensions;
|
|
|
|
Extensions = (function() {
|
|
function extensions($section) {
|
|
var $gridDisplay,
|
|
ext = this;
|
|
this.$section = $section;
|
|
this.$section.data('wrapper', this);
|
|
this.$change_due_date = this.$section.find("input[name='change-due-date']");
|
|
this.$reset_due_date = this.$section.find("input[name='reset-due-date']");
|
|
this.$show_unit_ext = this.$section.find("input[name='show-unit-extensions']");
|
|
this.$show_student_ext = this.$section.find("input[name='show-student-extensions']");
|
|
this.$section.find('.request-response').hide();
|
|
this.$section.find('.request-response-error').hide();
|
|
$gridDisplay = this.$section.find('.data-display');
|
|
this.$grid_text = $gridDisplay.find('.data-display-text');
|
|
this.$grid_table = $gridDisplay.find('.data-display-table');
|
|
this.$change_due_date.click(function() {
|
|
var sendData;
|
|
ext.clear_display();
|
|
ext.$student_input = ext.$section.find("#set-extension input[name='student']");
|
|
ext.$url_input = ext.$section.find("#set-extension select[name='url']");
|
|
ext.$due_datetime_input = ext.$section.find("#set-extension input[name='due_datetime']");
|
|
ext.$reason_input = ext.$section.find("#set-extension input[name='reason']");
|
|
|
|
sendData = {
|
|
student: ext.$student_input.val(),
|
|
url: ext.$url_input.val(),
|
|
due_datetime: ext.$due_datetime_input.val(),
|
|
reason: ext.$reason_input.val()
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: ext.$change_due_date.data('endpoint'),
|
|
data: sendData,
|
|
success: function(data) {
|
|
return ext.display_response('set-extension', data);
|
|
},
|
|
error: function(xhr) {
|
|
return ext.fail_with_error('set-extension', 'Error changing due date', xhr);
|
|
}
|
|
});
|
|
});
|
|
this.$reset_due_date.click(function() {
|
|
var sendData;
|
|
ext.clear_display();
|
|
ext.$student_input = ext.$section.find("#reset-extension input[name='student']");
|
|
ext.$url_input = ext.$section.find("#reset-extension select[name='url']");
|
|
ext.$reason_input = ext.$section.find("#reset-extension input[name='reason']");
|
|
|
|
sendData = {
|
|
student: ext.$student_input.val(),
|
|
url: ext.$url_input.val(),
|
|
reason: ext.$reason_input.val()
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: ext.$reset_due_date.data('endpoint'),
|
|
data: sendData,
|
|
success: function(data) {
|
|
return ext.display_response('reset-extension', data);
|
|
},
|
|
error: function(xhr) {
|
|
return ext.fail_with_error('reset-extension', 'Error reseting due date', xhr);
|
|
}
|
|
});
|
|
});
|
|
this.$show_unit_ext.click(function() {
|
|
var sendData, url;
|
|
ext.clear_display();
|
|
ext.$grid_table.text('Loading');
|
|
ext.$url_input = ext.$section.find("#view-granted-extensions select[name='url']");
|
|
url = ext.$show_unit_ext.data('endpoint');
|
|
sendData = {
|
|
url: ext.$url_input.val()
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: url,
|
|
data: sendData,
|
|
error: function(xhr) {
|
|
return ext.fail_with_error('view-granted-extensions', 'Error getting due dates', xhr);
|
|
},
|
|
success: function(data) {
|
|
return ext.display_grid(data);
|
|
}
|
|
});
|
|
});
|
|
this.$show_student_ext.click(function() {
|
|
var sendData, url;
|
|
ext.clear_display();
|
|
ext.$grid_table.text('Loading');
|
|
url = ext.$show_student_ext.data('endpoint');
|
|
ext.$student_input = ext.$section.find("#view-granted-extensions input[name='student']");
|
|
sendData = {
|
|
student: ext.$student_input.val()
|
|
};
|
|
return $.ajax({
|
|
type: 'POST',
|
|
dataType: 'json',
|
|
url: url,
|
|
data: sendData,
|
|
error: function(xhr) {
|
|
return ext.fail_with_error('view-granted-extensions', 'Error getting due dates', xhr);
|
|
},
|
|
success: function(data) {
|
|
return ext.display_grid(data);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
extensions.prototype.onClickTitle = function() {};
|
|
|
|
extensions.prototype.fail_with_error = function(id, msg, xhr) {
|
|
var $taskError, $taskResponse, data,
|
|
message = msg;
|
|
$taskError = this.$section.find('#' + id + ' .request-response-error');
|
|
$taskResponse = this.$section.find('#' + id + ' .request-response');
|
|
this.clear_display();
|
|
data = $.parseJSON(xhr.responseText);
|
|
message += ': ' + data.error;
|
|
$taskResponse.empty();
|
|
$taskError.empty();
|
|
$taskError.text(message);
|
|
return $taskError.show();
|
|
};
|
|
|
|
extensions.prototype.display_response = function(id, data) {
|
|
var $taskError, $taskResponse;
|
|
$taskError = this.$section.find('#' + id + ' .request-response-error');
|
|
$taskResponse = this.$section.find('#' + id + ' .request-response');
|
|
$taskError.empty().hide();
|
|
$taskResponse.empty().text(data);
|
|
return $taskResponse.show();
|
|
};
|
|
|
|
extensions.prototype.display_grid = function(data) {
|
|
var $tablePlaceholder, col, columns, gridData, options;
|
|
this.clear_display();
|
|
this.$grid_text.text(data.title);
|
|
options = {
|
|
enableCellNavigation: true,
|
|
enableColumnReorder: false,
|
|
forceFitColumns: true
|
|
};
|
|
columns = (function() {
|
|
var i, len, ref, results;
|
|
ref = data.header;
|
|
results = [];
|
|
for (i = 0, len = ref.length; i < len; i++) {
|
|
col = ref[i];
|
|
results.push({
|
|
id: col,
|
|
field: col,
|
|
name: col
|
|
});
|
|
}
|
|
return results;
|
|
}());
|
|
gridData = data.data;
|
|
$tablePlaceholder = $('<div/>', {
|
|
class: 'slickgrid',
|
|
style: 'min-height: 400px'
|
|
});
|
|
this.$grid_table.append($tablePlaceholder);
|
|
return new window.Slick.Grid($tablePlaceholder, gridData, columns, options);
|
|
};
|
|
|
|
extensions.prototype.clear_display = function() {
|
|
this.$grid_text.empty();
|
|
this.$grid_table.empty();
|
|
this.$section.find('.request-response-error').empty().hide();
|
|
return this.$section.find('.request-response').empty().hide();
|
|
};
|
|
|
|
return extensions;
|
|
}());
|
|
|
|
_.defaults(window, {
|
|
InstructorDashboard: {}
|
|
});
|
|
|
|
_.defaults(window.InstructorDashboard, {
|
|
sections: {}
|
|
});
|
|
|
|
_.defaults(window.InstructorDashboard.sections, {
|
|
Extensions: Extensions
|
|
});
|
|
}).call(this);
|