Genesis What If?

What if you got a 45/50 on that next test? What would your grade be? This extension answers those questions without you having to manually calculate the answer. All grades are editable, and the buttons are self-explanatory. (New Jersey)

2023-09-08 या दिनांकाला. सर्वात नवीन आवृत्ती पाहा.

// ==UserScript==
// @name         Genesis What If?
// @namespace    http://tampermonkey.net/
// @version      1.01
// @description  What if you got a 45/50 on that next test? What would your grade be? This extension answers those questions without you having to manually calculate the answer. All grades are editable, and the buttons are self-explanatory. (New Jersey)
// @author       You
// @license      MIT
// @match        https://parents.*.k12.nj.us/genesis/parents?tab1=studentdata&tab2=gradebook&tab3=coursesummary*
// @icon         https://parents.robbinsville.k12.nj.us//genesis/images/newIcon2.ico
// @grant        none
// ==/UserScript==

(function() {
    'use strict';


let originalGrade = document.querySelectorAll('b')[0]

//console.log(originalGrade.textContent.trim())

let newGrade = document.createElement('b')
newGrade.textContent = " "

    let numerator = 0
    let denominator = 0

function Refresh(){
    numerator = 0
    denominator = 0
    let row = document.querySelectorAll('.listroweven, .listrowodd')
    let rowArray = Array.from(row).slice(0, -4)


    rowArray.forEach(element => {
        let cell = element.querySelectorAll('.cellLeft')[1]
        let innerGrade = cell.childNodes[2].textContent.trim().replace(/\s+/g, ' ')
        cell.childNodes[2].textContent = ' '
        let spanElement = document.createElement('span')
        spanElement.textContent = innerGrade
        //console.log(spanElement.textContent)
        const divElement = cell.querySelector('div')
        divElement.insertAdjacentElement('afterend', spanElement);
        spanElement.setAttribute('contentEditable', 'true')

        const [num, denom] = innerGrade.split('/').map(num => parseFloat(num.trim()));

        // Calculate the percentage
        const percen = ((num / denom) * 100).toFixed(2);

        // Select the bottom div element
        const bottomDivElement = cell.querySelector('div[style="font-weight: bold;"]');

        // Set the percentage as its content
        bottomDivElement.textContent = percen + '%';
        numerator += num
        denominator += denom
    })
    let percentage = ((numerator/denominator) * 100 ).toFixed(1)
newGrade.textContent = "|| " + percentage + "0% " + percentageToLetterGrade(percentage)
originalGrade.insertAdjacentElement('afterend', newGrade)
}

function percentageToLetterGrade(numberGrade){
        let letter;
      if (numberGrade >= 96.5) {
        letter = 'A+';
      } else if (numberGrade >= 92.5) {
        letter = 'A';
        return letter;
      } else if (numberGrade >= 89.5) {
        letter = 'A-';
      } else if (numberGrade >= 86.5) {
        letter = 'B+';
      } else if (numberGrade >= 82.5) {
        letter = 'B';
      } else if (numberGrade >= 79.5) {
        letter = 'B-';
      } else if (numberGrade >= 76.5) {
        letter = 'C+';
      } else if (numberGrade >= 72.5) {
        letter = 'C';
      } else if (numberGrade >= 69.5) {
        letter = 'C-';
      } else if (numberGrade >= 66.5) {
        letter = 'D+';
      } else if (numberGrade >= 59.5) {
        letter = 'D-';
      } else {
        letter = 'F';
      }
      return letter;
    };

Refresh()

const headerT = document.querySelectorAll('[colspan="15"]')[0];
const parentDiv = headerT.parentNode
let myButton = document.createElement("button")
myButton.innerHTML = "Refresh"
myButton.onclick = () => Refresh();
let myButton2 = document.createElement("button")
myButton2.innerHTML = "Add Row"
myButton2.onclick = () => addRow();

parentDiv.insertBefore(myButton, headerT)
parentDiv.insertBefore(myButton2, headerT)



function addRow(){
    let row = document.querySelectorAll('.listroweven, .listrowodd')
    let rowArray = Array.from(row).slice(0, -4)
    //const numberOfRows = rowArray.length

    let lastRow = rowArray[rowArray.length - 1];
    let secondToLastRow = rowArray[rowArray.length - 2];

    let clonedRow = secondToLastRow.cloneNode(true);
    clonedRow.querySelector('b').textContent = "Genesis What If"
    clonedRow.querySelector('b').style.color = "Green"

    clonedRow.querySelectorAll('div')[5].textContent = 'Description Placeholder'
    clonedRow.querySelectorAll('div')[5].setAttribute('contentEditable', 'true')

    lastRow.parentNode.insertBefore(clonedRow, lastRow.nextSibling);
}




})();