kgc

grade change script

  1. // ==UserScript==
  2. // @name kgc
  3. // @namespace http://tampermonkey.net/
  4. // @license MIT
  5. // @version 1.0
  6. // @description grade change script
  7. // @author Minoa
  8. // @match https://login-learn.k12.com/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Function to get letter grade based on percentage
  16. function getLetterGrade(percent) {
  17. if (percent >= 90) return 'A';
  18. if (percent >= 80) return 'B';
  19. if (percent >= 70) return 'C';
  20. if (percent >= 60) return 'D';
  21. return 'F';
  22. }
  23.  
  24. // Function to modify grade percentage and letter
  25. function modifyGrade(gradeElement) {
  26. const percentElement = gradeElement.querySelector('.grade-percent');
  27. const letterElement = gradeElement.querySelector('.grade-letter');
  28. if (!percentElement) return;
  29.  
  30. // extract current percentage (remove % symbol if present)
  31. const currentPercent = parseFloat(percentElement.textContent.replace('%', ''));
  32. if (isNaN(currentPercent)) return;
  33.  
  34. let newPercent = currentPercent;
  35.  
  36. // handle grades above 90%
  37. if (currentPercent > 90) {
  38. const firstDigit = Math.floor(currentPercent / 10);
  39. const secondDigit = currentPercent % 10;
  40. newPercent = currentPercent - (firstDigit + secondDigit / 10);
  41. }
  42. // handle grades below 72%
  43. else if (currentPercent < 72) {
  44. newPercent = currentPercent + 3;
  45. }
  46.  
  47. // ensure grade never exceeds 100%
  48. newPercent = Math.min(100, newPercent).toFixed(1);
  49. percentElement.textContent = newPercent + '%';
  50.  
  51. // update letter grade if element exists
  52. if (letterElement) {
  53. letterElement.textContent = getLetterGrade(parseFloat(newPercent));
  54. }
  55. }
  56.  
  57. // Function to process all grade elements
  58. function processGrades() {
  59. const gradeElements = document.querySelectorAll('div.grade');
  60. gradeElements.forEach(modifyGrade);
  61. }
  62.  
  63. // Create MutationObserver to handle dynamically loaded content
  64. const observer = new MutationObserver((mutations) => {
  65. mutations.forEach((mutation) => {
  66. if (mutation.addedNodes.length) {
  67. processGrades();
  68. }
  69. });
  70. });
  71.  
  72. // Initial processing
  73. processGrades();
  74.  
  75. // Start observing document for dynamic changes
  76. observer.observe(document.body, {
  77. childList: true,
  78. subtree: true
  79. });
  80. })();