allow showing only a certain section in gradebook
if they can only see 1 section (possibly the default section), they do not get the option to change it. they can only change sections they are allowed to see the setting is stored in $.store.userGet and is keyed off of the course too so it will be remembered for a given user/course/browser combo. if the page loads and tries to show only a section, but that section does not have anyone in it, or they cant see anyone in it, it will alert() reload to show all sections. fixes #3653 Change-Id: Ie6de238ac8e1d5367ae8ab961aaa0fcc1ca66c1e Reviewed-on: https://gerrit.instructure.com/2324 Tested-by: Hudson <hudson@instructure.com> Reviewed-by: Brian Whitmer <brian@instructure.com>
This commit is contained in:
parent
37b74ecc04
commit
5718b9520b
|
@ -196,142 +196,6 @@
|
||||||
:title => "New message for this submission",
|
:title => "New message for this submission",
|
||||||
:class => "new_message" %>
|
:class => "new_message" %>
|
||||||
</div>
|
</div>
|
||||||
<% js_block do %>
|
|
||||||
<script type="text/javascript">
|
|
||||||
lastGradebookUpdate = "<%= ActiveSupport::TimeWithZone.new(Time.now, Time.zone).strftime("%Y-%m-%dT%H:%M:%S") %>";
|
|
||||||
var ignoreUngradedSubmissions = true;
|
|
||||||
setTimeout(function() {
|
|
||||||
$(document).ready(function() {
|
|
||||||
$("#embed_code input[type='button']").click(function() {
|
|
||||||
$("#embed_code textarea:first").focus().select();
|
|
||||||
});
|
|
||||||
$(document).delegate('#gradebook_options', 'click', function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
event.stopPropagation();
|
|
||||||
var show = $("#hide_students_option").attr('checked');
|
|
||||||
var hide_show = "Show";
|
|
||||||
var options = {
|
|
||||||
'<span class="ui-icon ui-icon-person"> </span> Show Student Names': function() {
|
|
||||||
$("#hide_students_option").attr('checked', false).change();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!show) {
|
|
||||||
hide_show = "Hide";
|
|
||||||
options = {
|
|
||||||
'<span class="ui-icon ui-icon-person"> </span> Hide Student Names': function() {
|
|
||||||
$("#hide_students_option").attr('checked', true).change();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(!ignoreUngradedSubmissions) {
|
|
||||||
options['<span class="ui-icon ui-icon-check"> </span> Ignore Ungraded Assignments'] = function() {
|
|
||||||
ignoreUngradedSubmissions = true;
|
|
||||||
gradebook.updateAllStudentGrades();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
options['<span class="ui-icon ui-icon-check"> </span> Include Ungraded Assignments'] = function() {
|
|
||||||
ignoreUngradedSubmissions = false;
|
|
||||||
gradebook.updateAllStudentGrades();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
options['<span class="ui-icon ui-icon-carat-2-e-w"> </span> Sort Columns By...'] = function() {
|
|
||||||
$(".sort_gradebook").each(function() {
|
|
||||||
$(this).attr('disabled', false).text($(this).attr('title'));
|
|
||||||
});
|
|
||||||
$("#sort_columns_dialog").dialog('close').dialog({
|
|
||||||
autoOpen: false,
|
|
||||||
width: 400,
|
|
||||||
height: 300
|
|
||||||
}).dialog('open');
|
|
||||||
};
|
|
||||||
options['<span class="ui-icon ui-icon-carat-2-n-s"> </span> Sort Rows By...'] = function() {
|
|
||||||
$(".sort_gradebook").each(function() {
|
|
||||||
$(this).attr('disabled', false).text($(this).attr('title'));
|
|
||||||
});
|
|
||||||
$("#sort_rows_dialog").dialog('close').dialog({
|
|
||||||
autoOpen: false,
|
|
||||||
width: 400,
|
|
||||||
height: 300
|
|
||||||
}).dialog('open');
|
|
||||||
};
|
|
||||||
options['<span class="ui-icon ui-icon-pencil"> </span> Set Group Weights'] = function() {
|
|
||||||
$("#groups_data").dialog('close').dialog({
|
|
||||||
title: "Assignment Groups",
|
|
||||||
autoOpen: false
|
|
||||||
}).dialog('open').show();
|
|
||||||
};
|
|
||||||
options['<span class="ui-icon ui-icon-clock"> </span> View Grading History'] = function() {
|
|
||||||
location.href = $(".gradebook_history_url").attr('href');
|
|
||||||
};
|
|
||||||
options['<span class="ui-icon ui-icon-disk"> </span> Download Scores (.csv)'] = function() {
|
|
||||||
location.href = $(".gradebook_csv_url").attr('href');
|
|
||||||
};
|
|
||||||
options['<span class="ui-icon ui-icon-clock"> </span> Upload Scores (from .csv) '] = function() {
|
|
||||||
$("#upload_modal").dialog({
|
|
||||||
bgiframe: true,
|
|
||||||
autoOpen: false,
|
|
||||||
modal: true,
|
|
||||||
width: 410,
|
|
||||||
resizable: false,
|
|
||||||
buttons: {
|
|
||||||
'Upload Data': function() {
|
|
||||||
$(this).submit();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).dialog('open');
|
|
||||||
};
|
|
||||||
$(this).dropdownList({
|
|
||||||
options: options
|
|
||||||
});
|
|
||||||
});
|
|
||||||
$(".sort_gradebook").click(function(event) {
|
|
||||||
event.preventDefault();
|
|
||||||
var $button = $(this);
|
|
||||||
if($button.hasClass('by_grade') && !gradebook.finalGradesReady) {
|
|
||||||
$button.attr('disabled', true).text("Computing Grades...");
|
|
||||||
setTimeout(function() {
|
|
||||||
if($button.filter(":visible").length > 0) {
|
|
||||||
$button.click();
|
|
||||||
}
|
|
||||||
}, 1000);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$button.attr('disabled', false);
|
|
||||||
$button.text($button.attr('title'));
|
|
||||||
if($button.hasClass('sort_rows')) {
|
|
||||||
sortStudentRows(function(student) {
|
|
||||||
if($button.hasClass('by_secondary_identifier')) {
|
|
||||||
return [student.secondary_identifier, student.display_name, student.course_section];
|
|
||||||
} else if($button.hasClass('by_section')) {
|
|
||||||
return [student.course_section, student.display_name, student.secondary_identifier];
|
|
||||||
} else if($button.hasClass('by_grade_desc')) {
|
|
||||||
return [Math.round((1000 - student.grade) * 10.0), student.display_name, student.secondary_identifier, student.course_section];
|
|
||||||
} else if($button.hasClass('by_grade_asc')) {
|
|
||||||
return [10000 + Math.round(student.grade * 10.0), student.display_name, student.secondary_identifier, student.course_section];
|
|
||||||
} else {
|
|
||||||
return [student.display_name, student.secondary_identifier, student.course_section];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
sortAssignmentColumns(function(assignment) {
|
|
||||||
var list = [assignment.special_sort, assignment.date_sortable || "1050-12-12T99:99", assignment.title];
|
|
||||||
if($button.hasClass('by_group')) {
|
|
||||||
list.unshift(parseInt(assignment.groupData[assignment.group_id || assignment.id.toString().substring(6)], 10));
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
$("#sort_rows_dialog").dialog('close');
|
|
||||||
$("#sort_columns_dialog").dialog('close');
|
|
||||||
});
|
|
||||||
sortStudentRows
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
// only update entries that have changed since the last gradebook update!
|
|
||||||
// compare to all updates, replace value with the highest update (keep it all server-time based)
|
|
||||||
</script>
|
|
||||||
<% end %>
|
|
||||||
|
|
||||||
<div id="loading_submission_details_dialog" style="display: none;">
|
<div id="loading_submission_details_dialog" style="display: none;">
|
||||||
<a href="<%= context_url(@context, :context_assignment_submission_url, "{{ assignment_id }}", "{{ user_id }}") %>" class="submission_details_url" style="display: none;"> </a>
|
<a href="<%= context_url(@context, :context_assignment_submission_url, "{{ assignment_id }}", "{{ user_id }}") %>" class="submission_details_url" style="display: none;"> </a>
|
||||||
<div style="margin: 20px 10px; text-align: center; font-size: 1.5em; ">
|
<div style="margin: 20px 10px; text-align: center; font-size: 1.5em; ">
|
||||||
|
@ -412,7 +276,7 @@
|
||||||
<div style="display: none;">
|
<div style="display: none;">
|
||||||
<div id="submission_comment_attachment_blank">
|
<div id="submission_comment_attachment_blank">
|
||||||
<a href="<%= context_url(@context, :context_assignment_submission_url, "{{ assignment_id }}", "{{ user_id }}", :download => "{{ id }}", :comment_id => "{{ comment_id }}") %>" class="file">Download <span class="display_name"> </span></a>
|
<a href="<%= context_url(@context, :context_assignment_submission_url, "{{ assignment_id }}", "{{ user_id }}", :download => "{{ id }}", :comment_id => "{{ comment_id }}") %>" class="file">Download <span class="display_name"> </span></a>
|
||||||
</div>http://localhost:3000/courses/5/gradebook#
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<%= image_tag 'word_bubble.png', :title => "Submission Comments", :id => "information_link", :style => "position: absolute; top: 2px; right: 1px; display: none; cursor: pointer;" %>
|
<%= image_tag 'word_bubble.png', :title => "Submission Comments", :id => "information_link", :style => "position: absolute; top: 2px; right: 1px; display: none; cursor: pointer;" %>
|
||||||
|
|
||||||
|
@ -444,6 +308,12 @@
|
||||||
<button type="button" class="button sort_gradebook sort_columns by_group" title="By Assignment Group" style="width: 300px;">By Assignment Group</button>
|
<button type="button" class="button sort_gradebook sort_columns by_group" title="By Assignment Group" style="width: 300px;">By Assignment Group</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="section_to_show_dialog" title="Choose A Section To Show">
|
||||||
|
<label for="section-to-show">Section to show</label>
|
||||||
|
<select id="section-to-show">
|
||||||
|
<option value="all">All</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<div id="sort_rows_dialog" title="Sort Gradebook Rows">
|
<div id="sort_rows_dialog" title="Sort Gradebook Rows">
|
||||||
<h2>Sort Gradebook Rows:</h2>
|
<h2>Sort Gradebook Rows:</h2>
|
||||||
<div style="margin-bottom: 5px;">
|
<div style="margin-bottom: 5px;">
|
||||||
|
@ -465,3 +335,6 @@
|
||||||
<%= render :partial => "shared/message_students" %>
|
<%= render :partial => "shared/message_students" %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var lastGradebookUpdate = "<%= ActiveSupport::TimeWithZone.new(Time.now, Time.zone).strftime("%Y-%m-%dT%H:%M:%S") %>";
|
||||||
|
</script>
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
<% e = @context.course_sections.active.count > 1 && @enrollments_hash && @enrollments_hash[student.id] && @enrollments_hash[student.id].course_section && @enrollments_hash[student.id] %>
|
<% e = @context.course_sections.active.count > 1 && @enrollments_hash && @enrollments_hash[student.id] && @enrollments_hash[student.id].course_section && @enrollments_hash[student.id] %>
|
||||||
<div class="secondary_identifier <%= 'with_section' if e %>" title="<%= student.secondary_identifier %>"><%= student.secondary_identifier %></div>
|
<div class="secondary_identifier <%= 'with_section' if e %>" title="<%= student.secondary_identifier %>"><%= student.secondary_identifier %></div>
|
||||||
<% if e %>
|
<% if e %>
|
||||||
<div class="course_section" title="<%= e.course_section.display_name %>"><%= e.course_section.display_name %></div>
|
<div class="course_section" data-course_section_id="<%= e.course_section.id %>" title="<%= e.course_section.display_name %>"><%= e.course_section.display_name %></div>
|
||||||
<% end %>
|
<% end %>
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
(function(){
|
var gradebook = (function(){
|
||||||
var $loading_gradebook_progressbar = $("#loading_gradebook_progressbar"),
|
var $loading_gradebook_progressbar = $("#loading_gradebook_progressbar"),
|
||||||
$default_grade_form = $("#default_grade_form"),
|
$default_grade_form = $("#default_grade_form"),
|
||||||
$assignment_details_dialog = $("#assignment_details_dialog"),
|
$assignment_details_dialog = $("#assignment_details_dialog"),
|
||||||
|
@ -26,9 +26,33 @@
|
||||||
$message_students_dialog = $("#message_students_dialog"),
|
$message_students_dialog = $("#message_students_dialog"),
|
||||||
$information_link = $("#information_link"),
|
$information_link = $("#information_link"),
|
||||||
$total_tooltip = $("#total_tooltip"),
|
$total_tooltip = $("#total_tooltip"),
|
||||||
content_offset = $("#content").offset();
|
content_offset = $("#content").offset(),
|
||||||
|
ignoreUngradedSubmissions = true;
|
||||||
|
|
||||||
|
var possibleSections = {},
|
||||||
|
$courseSections = $(".outer_student_name .course_section").each(function(){
|
||||||
|
possibleSections[$(this).data('course_section_id')] = $(this).attr('title');
|
||||||
|
}),
|
||||||
|
contextId = $("#current_context_code").text().split("_")[1],
|
||||||
|
sectionToShow = $.store.userGet("grading_show_only_section" + contextId);
|
||||||
|
|
||||||
window.gradebook = {
|
if (sectionToShow) {
|
||||||
|
var atLeastOnePersonExistsInThisSection = false;
|
||||||
|
$courseSections.add('.gradebook_table .course_section').each(function() {
|
||||||
|
if ($(this).data('course_section_id') != sectionToShow){
|
||||||
|
$(this).closest('tr').remove();
|
||||||
|
} else {
|
||||||
|
atLeastOnePersonExistsInThisSection = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!atLeastOnePersonExistsInThisSection) {
|
||||||
|
alert("Could not find any students in that section, falling back to showing all sections.");
|
||||||
|
$.store.userRemove("grading_show_only_section"+contextId);
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var gradebook = {
|
||||||
hoverCount: -1,
|
hoverCount: -1,
|
||||||
fileIndex: 1,
|
fileIndex: 1,
|
||||||
assignmentIndexes: {},
|
assignmentIndexes: {},
|
||||||
|
@ -81,7 +105,7 @@
|
||||||
.attr('role', 'grid')
|
.attr('role', 'grid')
|
||||||
.prepend(function(){
|
.prepend(function(){
|
||||||
var topRowHtml = $("#datagrid_top .assignment_title").map(function(){
|
var topRowHtml = $("#datagrid_top .assignment_title").map(function(){
|
||||||
return "<div role='columnheader' id='th_" + $(this).parents('.assignment_header').attr('id') + "' tabindex='-1'>" + $(this).text() + "</div>"
|
return "<div role='columnheader' id='th_" + $(this).parents('.assignment_header').attr('id') + "' tabindex='-1'>" + $(this).text() + "</div>";
|
||||||
}).get().join("");
|
}).get().join("");
|
||||||
return "<div class='hidden-readable' role='row'><div role='columnheader' tabindex='-1'>Student Name</div>" + topRowHtml +"</div>";
|
return "<div class='hidden-readable' role='row'><div role='columnheader' tabindex='-1'>Student Name</div>" + topRowHtml +"</div>";
|
||||||
})
|
})
|
||||||
|
@ -101,8 +125,8 @@
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
gradebook.pointCalculations = !$("#class_weighting_policy").attr('checked');
|
gradebook.pointCalculations = !$("#class_weighting_policy").attr('checked');
|
||||||
var init = function() {
|
var init = function() {
|
||||||
|
@ -333,7 +357,7 @@
|
||||||
.find(".assignment_link").attr('href', data.url);
|
.find(".assignment_link").attr('href', data.url);
|
||||||
};
|
};
|
||||||
options['<span class="ui-icon ui-icon-newwin"> </span> SpeedGrader'] = function() {
|
options['<span class="ui-icon ui-icon-newwin"> </span> SpeedGrader'] = function() {
|
||||||
window.open(extendedGradebookURL);
|
window.location.href = extendedGradebookURL;
|
||||||
};
|
};
|
||||||
options['<span class="ui-icon ui-icon-mail-closed"> </span> Message Students Who...'] = function() {
|
options['<span class="ui-icon ui-icon-mail-closed"> </span> Message Students Who...'] = function() {
|
||||||
var data = objectData($td),
|
var data = objectData($td),
|
||||||
|
@ -380,7 +404,7 @@
|
||||||
return student.score != null && student.score !== "" && cutoff != null && student.score > cutoff;
|
return student.score != null && student.score !== "" && cutoff != null && student.score > cutoff;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return $.map(students, function(student) { return student.user_data.id });
|
return $.map(students, function(student) { return student.user_data.id; });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -910,9 +934,144 @@
|
||||||
$curve_grade_dialog.dialog('close');
|
$curve_grade_dialog.dialog('close');
|
||||||
});
|
});
|
||||||
}, 1500);
|
}, 1500);
|
||||||
|
|
||||||
|
$('#gradebook_options').live('click', function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
var options = {
|
||||||
|
'<span class="ui-icon ui-icon-carat-2-e-w" /> Sort Columns By...' : function() {
|
||||||
|
$(".sort_gradebook").each(function() {
|
||||||
|
$(this).attr('disabled', false).text($(this).attr('title'));
|
||||||
|
});
|
||||||
|
$("#sort_columns_dialog").dialog('close').dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 400,
|
||||||
|
height: 300
|
||||||
|
}).dialog('open');
|
||||||
|
},
|
||||||
|
'<span class="ui-icon ui-icon-carat-2-n-s" /> Sort Rows By...' : function() {
|
||||||
|
$(".sort_gradebook").each(function() {
|
||||||
|
$(this).attr('disabled', false).text($(this).attr('title'));
|
||||||
|
});
|
||||||
|
$("#sort_rows_dialog").dialog('close').dialog({
|
||||||
|
autoOpen: false,
|
||||||
|
width: 400,
|
||||||
|
height: 300
|
||||||
|
}).dialog('open');
|
||||||
|
},
|
||||||
|
'<span class="ui-icon ui-icon-pencil" /> Set Group Weights' : function() {
|
||||||
|
$("#groups_data").dialog('close').dialog({
|
||||||
|
title: "Assignment Groups",
|
||||||
|
autoOpen: false
|
||||||
|
}).dialog('open').show();
|
||||||
|
},
|
||||||
|
'<span class="ui-icon ui-icon-clock" /> View Grading History' : function() {
|
||||||
|
window.location.href = $(".gradebook_history_url").attr('href');
|
||||||
|
},
|
||||||
|
'<span class="ui-icon ui-icon-disk" /> Download Scores (.csv)' : function() {
|
||||||
|
window.location.href = $(".gradebook_csv_url").attr('href');
|
||||||
|
},
|
||||||
|
'<span class="ui-icon ui-icon-clock" /> Upload Scores (from .csv) ' : function() {
|
||||||
|
$("#upload_modal").dialog({
|
||||||
|
bgiframe: true,
|
||||||
|
autoOpen: false,
|
||||||
|
modal: true,
|
||||||
|
width: 410,
|
||||||
|
resizable: false,
|
||||||
|
buttons: {
|
||||||
|
'Upload Data': function() {
|
||||||
|
$(this).submit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).dialog('open');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var show = $("#hide_students_option").attr('checked');
|
||||||
|
options['<span class="ui-icon ui-icon-person" /> ' + (show ? 'Show' : 'Hide') + ' Student Names'] = function() {
|
||||||
|
$("#hide_students_option").attr('checked', !show).change();
|
||||||
|
};
|
||||||
|
|
||||||
|
options['<span class="ui-icon ui-icon-check" /> ' + (ignoreUngradedSubmissions ? 'Include' : 'Ignore') + ' Ungraded Assignments'] = function() {
|
||||||
|
ignoreUngradedSubmissions = !ignoreUngradedSubmissions;
|
||||||
|
gradebook.updateAllStudentGrades();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($.size(possibleSections) > 1) {
|
||||||
|
var sectionToShowLabel = sectionToShow ?
|
||||||
|
('Showing Section: ' + possibleSections[sectionToShow]) :
|
||||||
|
'Showing All Sections';
|
||||||
|
options['<span class="ui-icon ui-icon-search" />' + sectionToShowLabel] = function() {
|
||||||
|
var $dialog = $("#section_to_show_dialog").dialog({
|
||||||
|
modal: true,
|
||||||
|
resizable: false,
|
||||||
|
buttons: {
|
||||||
|
'Change Section': function() {
|
||||||
|
var val = $("#section_to_show_dialog select").val();
|
||||||
|
$.store[val == "all" ? 'userRemove' : 'userSet']("grading_show_only_section"+contextId, val);
|
||||||
|
window.location.reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
var $select = $dialog.find('select');
|
||||||
|
$select.find('[value != all]').remove();
|
||||||
|
for (var key in possibleSections) {
|
||||||
|
$select.append('<option value="' + key + '" ' + (sectionToShow == key ? 'selected' : '') + ' >' + possibleSections[key] + '</option>');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
$(this).dropdownList({
|
||||||
|
options: options
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".sort_gradebook").click(function(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
var $button = $(this);
|
||||||
|
if($button.hasClass('by_grade') && !gradebook.finalGradesReady) {
|
||||||
|
$button.attr('disabled', true).text("Computing Grades...");
|
||||||
|
setTimeout(function() {
|
||||||
|
if($button.filter(":visible").length > 0) {
|
||||||
|
$button.click();
|
||||||
|
}
|
||||||
|
}, 1000);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$button.attr('disabled', false);
|
||||||
|
$button.text($button.attr('title'));
|
||||||
|
if($button.hasClass('sort_rows')) {
|
||||||
|
sortStudentRows(function(student) {
|
||||||
|
if($button.hasClass('by_secondary_identifier')) {
|
||||||
|
return [student.secondary_identifier, student.display_name, student.course_section];
|
||||||
|
} else if($button.hasClass('by_section')) {
|
||||||
|
return [student.course_section, student.display_name, student.secondary_identifier];
|
||||||
|
} else if($button.hasClass('by_grade_desc')) {
|
||||||
|
return [Math.round((1000 - student.grade) * 10.0), student.display_name, student.secondary_identifier, student.course_section];
|
||||||
|
} else if($button.hasClass('by_grade_asc')) {
|
||||||
|
return [10000 + Math.round(student.grade * 10.0), student.display_name, student.secondary_identifier, student.course_section];
|
||||||
|
} else {
|
||||||
|
return [student.display_name, student.secondary_identifier, student.course_section];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
sortAssignmentColumns(function(assignment) {
|
||||||
|
var list = [assignment.special_sort, assignment.date_sortable || "1050-12-12T99:99", assignment.title];
|
||||||
|
if($button.hasClass('by_group')) {
|
||||||
|
list.unshift(parseInt(assignment.groupData[assignment.group_id || assignment.id.toString().substring(6)], 10));
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
$("#sort_rows_dialog").dialog('close');
|
||||||
|
$("#sort_columns_dialog").dialog('close');
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
function objectData($td) {
|
function objectData($td) {
|
||||||
var id = $td.data('object_id');
|
var id = $td.data('object_id');
|
||||||
|
@ -955,6 +1114,7 @@
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
function submitDataEntry(data, fromDialog) {
|
function submitDataEntry(data, fromDialog) {
|
||||||
var formData = $update_submission_form.getFormData();
|
var formData = $update_submission_form.getFormData();
|
||||||
var $div = $("#submission_" + data.student_id + "_" + data.assignment_id);
|
var $div = $("#submission_" + data.student_id + "_" + data.assignment_id);
|
||||||
|
@ -995,6 +1155,7 @@
|
||||||
$.ajaxJSON($update_submission_form.attr('action'), 'POST', formData, formSuccess, formError);
|
$.ajaxJSON($update_submission_form.attr('action'), 'POST', formData, formSuccess, formError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateSubmission(submission) {
|
function updateSubmission(submission) {
|
||||||
if(!submission) { return; }
|
if(!submission) { return; }
|
||||||
var $submission = null;
|
var $submission = null;
|
||||||
|
@ -1084,6 +1245,7 @@
|
||||||
$submission_grade.empty().append(emptySubmissionText(submission));
|
$submission_grade.empty().append(emptySubmissionText(submission));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function emptySubmissionText(submission) {
|
function emptySubmissionText(submission) {
|
||||||
var result = $("#submission_" + submission.submission_type + "_image").clone().attr('id', '');
|
var result = $("#submission_" + submission.submission_type + "_image").clone().attr('id', '');
|
||||||
if(result.length === 0) {
|
if(result.length === 0) {
|
||||||
|
@ -1091,6 +1253,7 @@
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateDataEntry($box, forceUpdate) {
|
function updateDataEntry($box, forceUpdate) {
|
||||||
var $input = $box;
|
var $input = $box;
|
||||||
var $parent = $input.parents(".table_entry");
|
var $parent = $input.parents(".table_entry");
|
||||||
|
@ -1128,6 +1291,7 @@
|
||||||
}
|
}
|
||||||
$parent.find(".grade").show().empty().append(val);
|
$parent.find(".grade").show().empty().append(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
function toggleColumn($obj, show) {
|
function toggleColumn($obj, show) {
|
||||||
var assignment_id = objectData($obj).assignment_id;
|
var assignment_id = objectData($obj).assignment_id;
|
||||||
var $list = $(".assignment_" + assignment_id);
|
var $list = $(".assignment_" + assignment_id);
|
||||||
|
@ -1137,6 +1301,7 @@
|
||||||
$list.hide().parent().addClass('hidden_column');
|
$list.hide().parent().addClass('hidden_column');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function populateSubmissionInformation($submission, submission) {
|
function populateSubmissionInformation($submission, submission) {
|
||||||
var $td = $submission,
|
var $td = $submission,
|
||||||
assignment = object_data["assignment_" + submission.assignment_id].assignment,
|
assignment = object_data["assignment_" + submission.assignment_id].assignment,
|
||||||
|
@ -1304,6 +1469,7 @@
|
||||||
autoOpen: false
|
autoOpen: false
|
||||||
}).dialog('open').dialog('option', 'title', title);
|
}).dialog('open').dialog('option', 'title', title);
|
||||||
}
|
}
|
||||||
|
|
||||||
function submissionInformation($submission) {
|
function submissionInformation($submission) {
|
||||||
var $td = $submission;
|
var $td = $submission;
|
||||||
var submission = objectData($td);
|
var submission = objectData($td);
|
||||||
|
@ -1328,6 +1494,7 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var studentsToUpdate = [];
|
var studentsToUpdate = [];
|
||||||
gradebook.finalGradesReady = true;
|
gradebook.finalGradesReady = true;
|
||||||
var studentsToInitialize = {};
|
var studentsToInitialize = {};
|
||||||
|
@ -1387,6 +1554,7 @@
|
||||||
$assignment.data('assignment_object', assignment);
|
$assignment.data('assignment_object', assignment);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function moveAssignmentColumn(assignment_id, movement, relative_assignment_id) {
|
function moveAssignmentColumn(assignment_id, movement, relative_assignment_id) {
|
||||||
if(movement == "first") {
|
if(movement == "first") {
|
||||||
movement = "before";
|
movement = "before";
|
||||||
|
@ -1409,6 +1577,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window.sortStudentRows = function(callback) {
|
window.sortStudentRows = function(callback) {
|
||||||
var $students = $(".outer_student_name");
|
var $students = $(".outer_student_name");
|
||||||
var students = [];
|
var students = [];
|
||||||
|
@ -1443,6 +1612,7 @@
|
||||||
});
|
});
|
||||||
datagrid.reorderRows(new_order);
|
datagrid.reorderRows(new_order);
|
||||||
};
|
};
|
||||||
|
|
||||||
window.reverseRows = function() {
|
window.reverseRows = function() {
|
||||||
var new_order = [0];
|
var new_order = [0];
|
||||||
for(var idx = datagrid.rows.length - 1; idx > 0; idx--) {
|
for(var idx = datagrid.rows.length - 1; idx > 0; idx--) {
|
||||||
|
@ -1450,6 +1620,7 @@
|
||||||
}
|
}
|
||||||
datagrid.reorderRows(new_order);
|
datagrid.reorderRows(new_order);
|
||||||
};
|
};
|
||||||
|
|
||||||
window.sortAssignmentColumns = function(callback) {
|
window.sortAssignmentColumns = function(callback) {
|
||||||
var $assignments = $(".outer_assignment_name");
|
var $assignments = $(".outer_assignment_name");
|
||||||
var assignments = [];
|
var assignments = [];
|
||||||
|
@ -1486,6 +1657,7 @@
|
||||||
});
|
});
|
||||||
datagrid.reorderColumns(new_order);
|
datagrid.reorderColumns(new_order);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateGroupTotal(updateGrades) {
|
function updateGroupTotal(updateGrades) {
|
||||||
var total = 0.0;
|
var total = 0.0;
|
||||||
var weighted = $("#class_weighting_policy").attr('checked');
|
var weighted = $("#class_weighting_policy").attr('checked');
|
||||||
|
@ -1515,6 +1687,7 @@
|
||||||
gradebook.updateAllStudentGrades();
|
gradebook.updateAllStudentGrades();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function setGroupData(groups, $group) {
|
function setGroupData(groups, $group) {
|
||||||
if(!$group) { return; }
|
if(!$group) { return; }
|
||||||
if($group && $group.length === 0) { return; }
|
if($group && $group.length === 0) { return; }
|
||||||
|
@ -1563,6 +1736,7 @@
|
||||||
groups[data.assignment_group_id] = groupData;
|
groups[data.assignment_group_id] = groupData;
|
||||||
return groupData;
|
return groupData;
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateStudentGrades(student_id) {
|
function updateStudentGrades(student_id) {
|
||||||
var $submissions = $(".table_entry.student_" + student_id);
|
var $submissions = $(".table_entry.student_" + student_id);
|
||||||
if($submissions.length === 0) { return; }
|
if($submissions.length === 0) { return; }
|
||||||
|
@ -1708,25 +1882,30 @@
|
||||||
.find(".score").hide().end()
|
.find(".score").hide().end()
|
||||||
.find(".pct").text(' %').show();
|
.find(".pct").text(' %').show();
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$(document).bind('update_student_grades', function(event, student_id) {
|
$(document).bind('update_student_grades', function(event, student_id) {
|
||||||
updateStudentGrades(student_id);
|
updateStudentGrades(student_id);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$.fn.gradebookLoading = function(action) {
|
$.fn.gradebookLoading = function(action) {
|
||||||
this.find(".refresh_grades_link").find(".static").showIf(action).end()
|
this.find(".refresh_grades_link").find(".static").showIf(action).end()
|
||||||
.find(".animated").showIf(!action);
|
.find(".animated").showIf(!action);
|
||||||
};
|
};
|
||||||
|
|
||||||
function updateGrades(refresh) {
|
function updateGrades(refresh) {
|
||||||
|
var url = window.location.protocol + "//" +
|
||||||
|
window.location.host +
|
||||||
|
window.location.pathname +
|
||||||
|
"?updated=" + lastGradebookUpdate;
|
||||||
|
|
||||||
$("#datagrid_topleft").gradebookLoading();
|
$("#datagrid_topleft").gradebookLoading();
|
||||||
var url = "http://" + location.host + location.pathname + "?updated=" + lastGradebookUpdate;
|
$.ajaxJSON(url, 'GET', {}, function(submissions) {
|
||||||
var options = {};
|
|
||||||
$.ajaxJSON(url, 'GET', {}, function(data) {
|
|
||||||
if(refresh) {
|
if(refresh) {
|
||||||
setTimeout(function() { updateGrades(true); }, 120000);
|
setTimeout(function() { updateGrades(true); }, 120000);
|
||||||
}
|
}
|
||||||
$("#datagrid_topleft").gradebookLoading('remove');
|
$("#datagrid_topleft").gradebookLoading('remove');
|
||||||
var submissions = data;
|
|
||||||
var newGradebookUpdate = lastGradebookUpdate;
|
var newGradebookUpdate = lastGradebookUpdate;
|
||||||
for(idx in submissions) {
|
for(idx in submissions) {
|
||||||
var submission = submissions[idx].submission;
|
var submission = submissions[idx].submission;
|
||||||
|
@ -1744,6 +1923,8 @@
|
||||||
setTimeout(function() { updateGrades(true); }, 240000);
|
setTimeout(function() { updateGrades(true); }, 240000);
|
||||||
}
|
}
|
||||||
$("#datagrid_topleft").gradebookLoading('remove');
|
$("#datagrid_topleft").gradebookLoading('remove');
|
||||||
}, options);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return gradebook;
|
||||||
})();
|
})();
|
||||||
|
|
|
@ -3131,4 +3131,12 @@
|
||||||
return decodeURIComponent(results[1].replace(/\+/g, " "));
|
return decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// tells you how many keys are in an object,
|
||||||
|
// so: $.size({}) === 0 and $.size({foo: "bar"}) === 1
|
||||||
|
$.size = function(object) {
|
||||||
|
var keyCount = 0;
|
||||||
|
$.each(object,function(){ keyCount++; });
|
||||||
|
return keyCount;
|
||||||
|
}
|
||||||
|
|
||||||
})(jQuery);
|
})(jQuery);
|
||||||
|
|
|
@ -107,7 +107,7 @@ var jsonData, visibleRubricAssessments;
|
||||||
|
|
||||||
// handle showing students only in a certain section.
|
// handle showing students only in a certain section.
|
||||||
// the sectionToShow will be remembered for a given user in a given browser across all assignments in this course
|
// the sectionToShow will be remembered for a given user in a given browser across all assignments in this course
|
||||||
sectionToShow = Number($.store.userGet("eg_show_only_section"+jsonData.context_id));
|
sectionToShow = Number($.store.userGet("grading_show_only_section"+jsonData.context_id));
|
||||||
if (sectionToShow) {
|
if (sectionToShow) {
|
||||||
var tempArray = $.grep(jsonData.studentsWithSubmissions, function(student, i){
|
var tempArray = $.grep(jsonData.studentsWithSubmissions, function(student, i){
|
||||||
return $.inArray(sectionToShow, student.section_ids) != -1;
|
return $.inArray(sectionToShow, student.section_ids) != -1;
|
||||||
|
@ -227,7 +227,7 @@ var jsonData, visibleRubricAssessments;
|
||||||
.hide()
|
.hide()
|
||||||
.menu()
|
.menu()
|
||||||
.delegate('a', 'click mousedown', function(){
|
.delegate('a', 'click mousedown', function(){
|
||||||
$.store[$(this).data('section-id') == 'all' ? 'userRemove' : 'userSet']("eg_show_only_section"+jsonData.context_id, $(this).data('section-id'));
|
$.store[$(this).data('section-id') == 'all' ? 'userRemove' : 'userSet']("grading_show_only_section"+jsonData.context_id, $(this).data('section-id'));
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue