Sorryops

Skip the half of the fun!

2024-04-11 يوللانغان نەشرى. ئەڭ يېڭى نەشرىنى كۆرۈش.

// ==UserScript==
// @name         Sorryops
// @namespace    sorryops
// @version      20240410.4
// @description  Skip the half of the fun!
// @icon         https://orioks.miet.ru/favicon.ico
// @author       electromagneticcyclone & angelbeautifull
// @license      Unlicense
// @supportURL   https://git.disroot.org/electromagneticcyclone/sorryops
// @match        https://orioks.miet.ru/student/student/test*
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_addStyle
// @grant        GM_registerMenuCommand
// @require      https://openuserjs.org/src/libs/sizzle/GM_config.js
// @run-at       document-start
// ==/UserScript==

var config = new GM_config({
    id: 'config',
    title: 'Script Settings',
    fields: {
        auto_answer: {
            label: "Auto answer",
            type: 'select',
            options: [ 'No', 'Click', 'Click + Display' ],
            default: 'No',
        },
    },
});

GM_registerMenuCommand('Script Settings', () => {
    config.open();
})

window.addEventListener('load', actionFunction);

// https://stackoverflow.com/a/15710692
function hashCode(s) {
    return s.split("").reduce(function(a, b) {
        a = ((a << 5) - a) + b.charCodeAt(0);
        return a & a;
    }, 0);
}

function actionFunction() {
    var i;
    var objects = new Object();
    var boxes = document.getElementsByTagName('input');
    var answers = [];
    var form = document.getElementById('testform-answer');
    for (i = 0; i < boxes.length; i++) {
        if (boxes[i].type === 'checkbox' | boxes[i].type === 'radio') {
            answers.push(boxes[i]);
            var span = document.createElement('span');
            span.innerHTML =
              boxes[i].type === 'radio' && boxes[i].value == "1"
                ? "<b>" + boxes[i].value + ")</b> "
                : boxes[i].value + ") ";
            boxes[i].parentNode.insertBefore(span, boxes[i]);
            objects[boxes[i].value] = boxes[i].parentNode;
        }
    }
    const sorted_objects = Object.keys(objects).sort().reduce(
        (obj, key) => {
            obj[key] = objects[key];
            return obj;
        }, {}
    );
    for (var key in sorted_objects) {
        sorted_objects[key].remove();
        form.appendChild(sorted_objects[key]);
    }
    const auto_answer = config.get('auto_answer');
    var randansw;
    if (auto_answer != 'No') {
        randansw = Math.floor(Math.random() * answers.length);
        answers[randansw].click();
    }
    var variant = document.getElementById('w0').parentNode.textContent;
    variant = variant.slice(variant.indexOf("Вопрос:"));
    var pboxes = document.getElementsByTagName('p');
    for (i = 0; i < pboxes.length; i++) {
        var pbox = pboxes[i];
        if (pbox.textContent == "Вопрос:") {
            pbox.innerHTML = "<i>(Вариант <input onfocus='this.select();' id='variant' value='" + hashCode(variant) + (auto_answer == 'Click + Display' ? (" " + answers[randansw].value) : "") + "' readonly>)</i><br>" + pbox.textContent;
            break;
        }
    }
}