Expands programming exercises with keyboard
目前為
// ==UserScript==
// @name Gradescope assignment expander
// @namespace https://gist.github.com/isaacl/86d5121ede0eeac3eb6a4016555ad70e
// @version 0.1.3
// @description Expands programming exercises with keyboard
// @author Isaac Levy
// @match *://*.gradescope.com/*
// @grant none
// @license MIT
// ==/UserScript==
/* jshint esversion: 6 */
(function() {
'use strict';
let expanded = 0;
let allToggles = [];
let autograderToggle = null;
const UP_CODE = 38;
const DOWN_CODE = 40;
const X_CODE = 88; // Cycle through.
const C_CODE = 67; // Toggle autograder.
const ALL_CODES = [UP_CODE, DOWN_CODE, X_CODE, C_CODE];
document.addEventListener('keydown', (e) => {
const code = e.keyCode;
if (!ALL_CODES.includes(code)) return;
// Cache toggles query.
if (allToggles.length === 0) {
allToggles = document.querySelectorAll('button.fileViewerHeader--toggleButton');
}
if (autograderToggle === null) {
autograderToggle = document.querySelector('div.autograderResultsContainer button');
console.log(autograderToggle);
}
const numToggles = allToggles.length;
if (code === DOWN_CODE && expanded < numToggles - 1) {
expanded++;
} else if (code === UP_CODE && expanded > 0) {
expanded--;
} else if (code === X_CODE) {
if (e.shiftKey) {
expanded = (expanded - 1 + numToggles) % numToggles;
} else {
expanded = (expanded + 1) % numToggles;
}
} else if (code === C_CODE) {
if (autograderToggle !== null) autograderToggle.click();
return;
}
allToggles.forEach((e, i) => {
const shouldExpand = expanded === i;
const isExpanded = e.getAttribute('aria-expanded') === 'true';
if (shouldExpand !== isExpanded) e.click();
});
});
})();