您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
When toggled will change grades to a combination of A's B's C's and D's dependant of the configuration (Hold backspace + <the corresponding letter grade or 'e' for a custom combination>). UI coming soon.
// ==UserScript== // @name Student Vue Grades Spoof // @namespace http://tampermonkey.net/ // @version 0.4 // @description When toggled will change grades to a combination of A's B's C's and D's dependant of the configuration (Hold backspace + <the corresponding letter grade or 'e' for a custom combination>). UI coming soon. // @author NullProgramming // @match *://*/*/PXP2_Gradebook.aspx* // @icon https://rt2.region1.k12.mn.us/RT0332/synergy.ico // @grant none // @license Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License // ==/UserScript== (function () { 'use strict'; const letterGrades = document.querySelectorAll('.mark'); const percentGrades = document.querySelectorAll('.score'); const gradesDivs = document.querySelectorAll('div:has(.mark):has(.score):not(.mark-count)'); const validGrades = [ "A", "A-", "B+", "B", "B-", "C+", "C", "C-", "D+", "D", "D-", "F" ]; let keysPressed = {}; window.onload = onPageLoad; document.addEventListener('keydown', (event) => { keysPressed[event.key] = true; if (keysPressed.Backspace && event.key == 'a') { printA(); } if (keysPressed.Backspace && event.key == 'b') { printB(); } if (keysPressed.Backspace && event.key == 'c') { printC(); } if (keysPressed.Backspace && event.key == 'd') { printD(); } if (keysPressed.Backspace && event.key == 'e') { printComb(); } }); document.addEventListener('keyup', (event) => { delete keysPressed[event.key]; }); function printA() { const letters = ["A", "A-"]; letterGrades.forEach((element) => { const randomIndex = Math.floor(Math.random() * letters.length); const randomLetter = letters[randomIndex]; element.textContent = randomLetter; }); gradesDivs.forEach((div) => { const letterGrade = div.querySelector('.mark'); const percentGrade = div.querySelector('.score'); if (letterGrade && letterGrade.textContent.trim() === 'A') { percentGrade.textContent = `${ (Math.random() * (99.9 - 94.0) + 94.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'A-') { percentGrade.textContent = `${ (Math.random() * (93.4 - 90.0) + 90.0).toFixed(1) }%`; } }); alert('Replacing grades with A\'s...'); } function printB() { const letters = ["B+", "B", "B-"]; letterGrades.forEach((element) => { const randomIndex = Math.floor(Math.random() * letters.length); const randomLetter = letters[randomIndex]; element.textContent = randomLetter; }); gradesDivs.forEach((div) => { const letterGrade = div.querySelector('.mark'); const percentGrade = div.querySelector('.score'); if (letterGrade && letterGrade.textContent.trim() === 'B+') { percentGrade.textContent = `${ (Math.random() * (89.3 - 87.0) + 87.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'B') { percentGrade.textContent = `${ (Math.random() * (86.3 - 83.0) + 83.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'B-') { percentGrade.textContent = `${ (Math.random() * (82.3 - 80.0) + 80.0).toFixed(1) }%`; } }); alert('Replacing grades with B\'s...'); } function printC() { const letters = ["C+", "C", "C-"]; letterGrades.forEach((element) => { const randomIndex = Math.floor(Math.random() * letters.length); const randomLetter = letters[randomIndex]; element.textContent = randomLetter; }); gradesDivs.forEach((div) => { const letterGrade = div.querySelector('.mark'); const percentGrade = div.querySelector('.score'); if (letterGrade && letterGrade.textContent.trim() === 'C+') { percentGrade.textContent = `${ (Math.random() * (79.3 - 77.0) + 77.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'C') { percentGrade.textContent = `${ (Math.random() * (76.3 - 73.0) + 73.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'C-') { percentGrade.textContent = `${ (Math.random() * (72.3 - 70.0) + 70.0).toFixed(1) }%`; } }); alert('Replacing grades with C\'s...'); } function printD() { const letters = ["D+", "D", "D-"]; letterGrades.forEach((element) => { const randomIndex = Math.floor(Math.random() * letters.length); const randomLetter = letters[randomIndex]; element.textContent = randomLetter; }); gradesDivs.forEach((div) => { const letterGrade = div.querySelector('.mark'); const percentGrade = div.querySelector('.score'); if (letterGrade && letterGrade.textContent.trim() === 'D+') { percentGrade.textContent = `${ (Math.random() * (69.3 - 67.0) + 67.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'D') { percentGrade.textContent = `${ (Math.random() * (66.3 - 65.0) + 65.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'D-') { percentGrade.textContent = `${ (Math.random() * (64.3 - 63.0) + 63.0).toFixed(1) }%`; } }); alert('Replacing grades with D\'s...'); } function printComb() { const lettersInput = prompt("From decending order, place the letter grades you want separated by commas and a space (Ex. A-, C, B+, A, F)\nDo NOT use + on A or -/+ on F") const letters = lettersInput.split(',').map((str) => str.trim()); if (percentGrades.length === letters.length) { let index = 0 letterGrades.forEach((element) => { if (element.parentNode.querySelector('.mark-count')) { return } if (validGrades.includes(letters[index])) { element.textContent = letters[index]; } else { alert(`'${ letters[index] }' is not a valid grade, if you think this is an issue dm jade.grey on discord.`) } index++ }); gradesDivs.forEach((div) => { const letterGrade = div.querySelector('.mark'); const percentGrade = div.querySelector('.score'); if (letterGrade && letterGrade.textContent.trim() === 'A') { percentGrade.textContent = `${ (Math.random() * (99.9 - 94.0) + 94.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'A-') { percentGrade.textContent = `${ (Math.random() * (93.4 - 90.0) + 90.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'B+') { percentGrade.textContent = `${ (Math.random() * (89.3 - 87.0) + 87.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'B') { percentGrade.textContent = `${ (Math.random() * (86.3 - 83.0) + 83.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'B-') { percentGrade.textContent = `${ (Math.random() * (82.3 - 80.0) + 80.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'C+') { percentGrade.textContent = `${ (Math.random() * (79.3 - 77.0) + 77.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'C') { percentGrade.textContent = `${ (Math.random() * (76.3 - 73.0) + 73.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'C-') { percentGrade.textContent = `${ (Math.random() * (72.3 - 70.0) + 70.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'D+') { percentGrade.textContent = `${ (Math.random() * (69.3 - 67.0) + 67.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'D') { percentGrade.textContent = `${ (Math.random() * (66.3 - 65.0) + 65.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'D-') { percentGrade.textContent = `${ (Math.random() * (64.3 - 63.0) + 63.0).toFixed(1) }%`; } else if (letterGrade && letterGrade.textContent.trim() === 'F') { percentGrade.textContent = `${ (Math.random() * (62.3 - 0.0) + 0.0).toFixed(1) }%`; } }); } else { alert(`The number of classes does not match the number of grades provided. ${ gradesDivs.length } to ${ letters.length }`); if (confirm("Would you like to try again?")) { printComb() } } } function onPageLoad() { alert("Script Loaded...") } })();