Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function getLetterGrade(grade){
- if(grade>=90) return 'A';
- else if(grade>=80) return 'B';
- else if(grade>=70) return 'C';
- else if(grade>=60) return 'D';
- else return 'F';
- }
- const getById = id => document.getElementById(id);
- const table = getById('center_table');
- const rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
- var weightPercentTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[1];
- const isWeighted = !!weightPercentTable;
- var weightNamesTable;
- var weightScoreTable;
- var weightedGradeSlot;
- if(isWeighted){
- weightPercentTable = weightPercentTable.getElementsByTagName('td');
- weightNamesTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[0].getElementsByTagName('td');
- weightScoreTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[2].getElementsByTagName('td');
- weightedGradeSlot = weightScoreTable[weightScoreTable.length-1].getElementsByTagName('b')[0];
- }
- const gradeDisplay = getById('currentStudentGrade[]');
- const roundGrade = grade => Math.round(grade*1000)/1000;
- function setGrade(grade, el){
- const g = roundGrade(grade);
- el.innerText = roundGrade(g) + '% ' + getLetterGrade(g);
- }
- var weightNames = [];
- var weightPercents = [];
- if(weightPercentTable){
- for(var i=0; i<weightPercentTable.length-1; i++){
- const str = weightPercentTable[i].innerText;
- weightPercents.push(Number(str.substring(0, str.length-1))/100);
- weightNames.push(weightNamesTable[i].innerText);
- }
- }else weightPercents = [1];
- function calculateGrades(){
- var totalPoints = Array(weightPercents.length).fill(0);
- var totalGrade = Array(weightPercents.length).fill(0);
- for(var i=0; i<rows.length; i++){
- const cols = rows[i].getElementsByClassName('LO_field');
- if(cols.length < 7) continue;
- const gradeStr = cols[1].innerText;
- const assignmentStr = cols[6].innerText;
- const idx = gradeStr.indexOf('/');
- const grade = Number(cols[1].getElementsByTagName('input')[0].value);
- if(!isNaN(grade)){
- const points = Number(gradeStr.substring(idx+1));
- var assignmentIdx = 0;
- if(isWeighted){
- for(var j=0; j<weightNames.length; j++){
- if(weightNames[j] === assignmentStr){
- assignmentIdx = j;
- break;
- }
- }
- }
- totalGrade[assignmentIdx] += grade;
- totalPoints[assignmentIdx] += points;
- setGrade(100*grade/points, cols[2]);
- }
- }
- var weightedGrades = Array(weightPercents.length).fill(0);
- for(var i=0; i<totalPoints.length; i++){
- weightedGrades[i] = 100*totalGrade[i]/totalPoints[i];
- }
- var finalGrade = 0;
- for(var i=0; i<weightedGrades.length; i++){
- if(isWeighted) setGrade(weightedGrades[i], weightScoreTable[i]);
- finalGrade += weightPercents[i]*weightedGrades[i];
- }
- setGrade(finalGrade, gradeDisplay);
- if(isWeighted) setGrade(finalGrade, weightedGradeSlot);
- }
- for(var i=0; i<rows.length; i++){
- const cols = rows[i].getElementsByClassName('LO_field');
- if(cols.length < 7) continue;
- const gradeStr = cols[1].innerText;
- const idx = gradeStr.indexOf('/');
- cols[1].innerHTML = '<input onchange="calculateGrades()" type="text" size="1" value="' + gradeStr.substring(0, idx-1) + '" /> / ' + gradeStr.substring(idx+1);
- }
- console.log('Loaded Focus Grade Estimator');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement