-
Notifications
You must be signed in to change notification settings - Fork 1
/
contentscript.js
124 lines (104 loc) · 3.44 KB
/
contentscript.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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
var ects=[],
grades=[],
sumGrades=0,
sumEcts=0,
average=0,
table;
var AVRG_ROW = [
'<tr id="averageRow">',
'<th class="tabelleheader" style="background:#53BE81" colspan="5">Noten Durchschnitt</th>',
'<th class="tabelleheader average" style="background:#53BE81" colspan="6"></th>',
'<th class="tabelleheader" style="background:#53BE81" colspan="1">',
'<input id="scenario" type="submit" value="Note eintragen(Simulation)"/>',
'</th>',
'</tr>'].join('');
var HYP_ROW = [
'<tr>',
'<td class="tabelle1">00000</td><td class="tabelle1">OJH</td>',
'<td class="tabelle1">WPM 75: Reine Hypothese</td>',
'<td align="center" class="tabelle1">O</td>',
'<td class="tabelle1"></td>',
'<td align="center" class="tabelle1 gradeHyp">',
'<input style="height: 10px; width:25px; font-weight:bold; font-size: 12px;" type="text" class="gradeInput" value="1.0"/>',
'</td>',
'<td align="center" class="tabelle1">(vllt.) bestanden </td>',
'<td align="center" class="tabelle1 ectsHyp">',
'<input style="height: 10px; width:25px; font-weight:bold; font-size: 12px;" type="text" class="ectsInput" value="5"/>',
'</td>',
'<td align="center" class="tabelle1"> </td>',
'<td align="center" class="tabelle1"> </td>',
'<td align="center" class="tabelle1"> </td>',
'<td align="center" class="tabelle1"><input class="removeHyp" type="submit" value="entfernen"/></td>',
'</tr>'].join('');
prepareContent();
calculateAverage();
function prepareContent() {
table = $('.content').find('table').eq(1);
table.find('tr').each(function(i, value) {
var rowContents = $(value).find('td');
if ( rowContents && rowContents.length >= 7 && rowContents.eq(6).html().match(/(bestanden)/gi) != null && parseGradeFloat(rowContents.eq(5).html()) != 0 ) {
rowContents.eq(5).addClass('grade');
rowContents.eq(7).addClass('ects');
}
});
if ( $('.grade').length > 0 ) {
table.append(AVRG_ROW);
}
$('#scenario').click(function() {
$('#averageRow').before(HYP_ROW);
$('.gradeInput').last().bind('onchange keyup', hypChanged);
$('.ectsInput').last().bind('onchange keyup', hypChanged);
$('.removeHyp').last().click(function() {
$(this).parent().parent().remove();
calculateAverage();
});
calculateAverage();
});
}
function calculateAverage() {
sumGrades = sumEcts = 0;
grades = [];
ects = [];
$('.grade').each(function(i, obj) {
grades.push(parseGradeFloat($(obj).html()));
});
$('.ects').each(function(i, obj) {
ects.push(parseGradeFloat($(obj).html()));
});
$('.gradeInput').each(function(i, obj) {
grades.push(parseGradeFloat($(obj).attr('value')));
});
$('.ectsInput').each(function(i, obj) {
ects.push(parseGradeFloat($(obj).attr('value')));
});
for (i in grades) {
sumGrades += grades[i]*ects[i];
sumEcts += ects[i];
}
average = sumGrades/sumEcts;
average = Math.round(average*100)/100;
$('.average').html(' '+average);
}
function hypChanged() {
var sPos = $(this).caret().start;
var ePos = $(this).caret().end;
$('.gradeInput').each(function(i, obj) {
validateInput(obj, /[0-9]|\./g);
});
$('.ectsInput').each(function(i, obj) {
validateInput(obj, /[0-9]/g);
});
$(this).caret(sPos,ePos);
calculateAverage();
}
function parseGradeFloat(value) {
value = value.replace(/ /g,'');
value = value.replace(/,/g,'.');
return parseFloat(value) || 0;
}
function validateInput(obj, regx) {
var val = $(obj).attr('value');
val = val.replace(/,/g,'.');
val = val.match(regx).join('');
$(obj).attr('value',val);
}