// ==UserScript== // @name Bypass "Calculation of totals has been disabled" for canvas // @namespace https://boehs.org // @match https://*.instructure.com/courses/*/grades // @grant none // @version 1.0.1 // @author Evan Boehs // @description Calculates totals when canvas doesn't want to // @supportURL https://gist.github.com/boehs/883fda113facb902ac440cab26b09cb9 // @license GPL-3.0-only // @downloadURL none // ==/UserScript== function update() { let totalCurrent = 0 let totalPossible = 0 const assignments = document.querySelectorAll("tr.student_assignment:not(.group_total)") assignments.forEach(assignment => { const possible = Number((assignment.querySelector(".possible.points_possible").textContent || "").trim()) const current = Number((assignment.querySelector(".assignment_score .grade").textContent.replace(/((hat-)|[^0-9-])/g,"") || "").trim()) if (!isNaN(possible + current)) { totalPossible += possible totalCurrent += current } }) const percent = (totalCurrent / totalPossible) * 100 document.getElementById("student-grades-final").innerHTML = `${percent}% (Bypassed)
NOTE: This script does not support weights yet
` } if (document.getElementById("student-grades-final").textContent.trim() == 'Calculation of totals has been disabled') { const observer = new MutationObserver(update) observer.observe(document.getElementById("grades_summary"), { childList:true, subtree:true }) update() }