Advertisement
Guest User

Untitled

a guest
May 24th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. function getLetterGrade(grade){
  2. if(grade>=90) return 'A';
  3. else if(grade>=80) return 'B';
  4. else if(grade>=70) return 'C';
  5. else if(grade>=60) return 'D';
  6. else return 'F';
  7. }
  8. const getById = id => document.getElementById(id);
  9.  
  10. const table = getById('center_table');
  11. const rows = table.getElementsByTagName('tbody')[0].getElementsByTagName('tr');
  12.  
  13. var weightPercentTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[1];
  14. const isWeighted = !!weightPercentTable;
  15. var weightNamesTable;
  16. var weightScoreTable;
  17. var weightedGradeSlot;
  18. if(isWeighted){
  19. weightPercentTable = weightPercentTable.getElementsByTagName('td');
  20. weightNamesTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[0].getElementsByTagName('td');
  21. weightScoreTable = document.getElementsByTagName('tbody')[1].getElementsByTagName('tr')[2].getElementsByTagName('td');
  22. weightedGradeSlot = weightScoreTable[weightScoreTable.length-1].getElementsByTagName('b')[0];
  23. }
  24.  
  25. const gradeDisplay = getById('currentStudentGrade[]');
  26. const roundGrade = grade => Math.round(grade*1000)/1000;
  27. function setGrade(grade, el){
  28. const g = roundGrade(grade);
  29. el.innerText = roundGrade(g) + '% ' + getLetterGrade(g);
  30. }
  31.  
  32. var weightNames = [];
  33. var weightPercents = [];
  34.  
  35. if(weightPercentTable){
  36. for(var i=0; i<weightPercentTable.length-1; i++){
  37. const str = weightPercentTable[i].innerText;
  38. weightPercents.push(Number(str.substring(0, str.length-1))/100);
  39. weightNames.push(weightNamesTable[i].innerText);
  40. }
  41. }else weightPercents = [1];
  42.  
  43. function calculateGrades(){
  44. var totalPoints = Array(weightPercents.length).fill(0);
  45. var totalGrade = Array(weightPercents.length).fill(0);
  46.  
  47. for(var i=0; i<rows.length; i++){
  48. const cols = rows[i].getElementsByClassName('LO_field');
  49. if(cols.length < 7) continue;
  50. const gradeStr = cols[1].innerText;
  51. const assignmentStr = cols[6].innerText;
  52. const idx = gradeStr.indexOf('/');
  53. const grade = Number(cols[1].getElementsByTagName('input')[0].value);
  54.  
  55. if(!isNaN(grade)){
  56. const points = Number(gradeStr.substring(idx+1));
  57. var assignmentIdx = 0;
  58. if(isWeighted){
  59. for(var j=0; j<weightNames.length; j++){
  60. if(weightNames[j] === assignmentStr){
  61. assignmentIdx = j;
  62. break;
  63. }
  64. }
  65. }
  66. totalGrade[assignmentIdx] += grade;
  67. totalPoints[assignmentIdx] += points;
  68. setGrade(100*grade/points, cols[2]);
  69. }
  70. }
  71.  
  72. var weightedGrades = Array(weightPercents.length).fill(0);
  73. for(var i=0; i<totalPoints.length; i++){
  74. weightedGrades[i] = 100*totalGrade[i]/totalPoints[i];
  75. }
  76.  
  77. var finalGrade = 0;
  78. for(var i=0; i<weightedGrades.length; i++){
  79. if(isWeighted) setGrade(weightedGrades[i], weightScoreTable[i]);
  80. finalGrade += weightPercents[i]*weightedGrades[i];
  81. }
  82. setGrade(finalGrade, gradeDisplay);
  83. if(isWeighted) setGrade(finalGrade, weightedGradeSlot);
  84. }
  85.  
  86. for(var i=0; i<rows.length; i++){
  87. const cols = rows[i].getElementsByClassName('LO_field');
  88. if(cols.length < 7) continue;
  89. const gradeStr = cols[1].innerText;
  90. const idx = gradeStr.indexOf('/');
  91. cols[1].innerHTML = '<input onchange="calculateGrades()" type="text" size="1" value="' + gradeStr.substring(0, idx-1) + '" /> / ' + gradeStr.substring(idx+1);
  92. }
  93.  
  94. console.log('Loaded Focus Grade Estimator');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement