-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathBetterGrades.js
85 lines (74 loc) · 2.72 KB
/
BetterGrades.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
let targetNode = $('#smscMain')[0];
let callback = function(mutationsList, observer) {
for (let mutation of mutationsList) {
if (mutation.type == 'attributes') {
main()
}
}
};
let observer = new MutationObserver(callback);
observer.observe(targetNode, { attributes: true, childList: true, subtree: true });
function main() {
if ($('#gridview').length && !$('#gridview').find('input').length) {
calculateTotalGrid();
}
if ($('.courseEvals').length && !$('.courseEvals').find('input').length && !$('.courseEvals').find('.gradesList_nodata').length) {
calculateTotalList();
}
}
function calculateTotalList() {
$('<input>').attr('type', 'hidden').appendTo('.courseEvals');
let total_numerator = 0;
let total_denominator = 0;
$('.courseEvals').children().each(function (e) {
let cell = $(this).find('.evalpoint').text();
let match = cell.match(/([\d\,\.]+)\/([\d\,\.]+)/);
if (match) {
total_numerator += parseFloat(match[1].replace(',', '.'))
total_denominator += parseFloat(match[2].replace(',', '.'))
}
});
let div = $('<div>');
div.addClass('evals_eval cf');
div.append(
$('<div>').addClass('eval_data').append(
$('<div>').addClass('eval_info grades').append(
$('<div>').addClass('eval_title titleOnly').html(
' Totaal: ' + totalToStr(total_numerator, total_denominator)
)
)
)
);
$('.courseEvals').prepend(div);
}
function calculateTotalGrid() {
$('<input>').attr('type', 'hidden').appendTo('#gridview');
let rows = $('.grid_course_evals').children();
rows.each(function (e) {
let row = $(this);
let total_numerator = 0;
let total_denominator = 0;
row.children().each(function (e) {
let cell = $(this).text();
let match = cell.match(/([\d\,\.]+)\/([\d\,\.]+)/);
if (match) {
total_numerator += parseFloat(match[1].replace(',', '.'))
total_denominator += parseFloat(match[2].replace(',', '.'))
}
});
let div = $('<div>');
div.addClass('course_eval_cell');
if (total_denominator > 0) {
if (total_numerator / total_denominator < 0.5) {
div.addClass('isLow');
}
div.text(totalToStr(total_numerator, total_denominator));
div.css('font-weight', 'Bold');
}
row.append(div);
row.width(row.width() + 70)
});
}
function totalToStr(total_numerator, total_denominator) {
return (Math.round(total_numerator / total_denominator * 1000) / 10).toString() + '%';
}