moodlehero / Moodle Hero

// ==UserScript==
// @name         Moodle Hero
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  Vágólapra másolja a kérdéseket, válaszlehetőségeket, és a helyes válaszokat egy moodle teszt megnyitásakor.
// @author       Aron
// @include      https://*moodle*mod/quiz/attempt*
// @include      https://*moodle*mod/quiz/review*
// @grant        GM_setClipboard
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';

    runMe();
})();


function runMe() {
    let kerdesek = new Array();
    let valaszok = new Array();
    let bejeloltek = new Array();
    let teszt = $('title').text();
    let targy = $('h1').text();
    let helyesValaszok = new Array();

    $('div.formulation').each(function(index, value) {

        //kiolvassuk a kérdéseket
        let kerdesDiv = $(this).find("div.qtext");
        let altKerdesP = $(this).find("p");
        if(kerdesDiv.length) {
            kerdesek.push(kerdesDiv.eq(0).text().replace(/\s+/g, ' ').trim());
        } else if (altKerdesP.length) {
            kerdesek.push(altKerdesP.eq(0).contents().filter(function(){if ( $( this ).is( "span" ) ) {return false;} else {return true;}}).text().replace(/\s+/g, ' ').trim());
        } else {
            kerdesek.push("Nem sikerült kiolvasni a kérdést.");
        }

        //kiolvassuk a vákaszokat
        let valaszDiv = $(this).find(".answer");
        let valaszTomb;
        if(valaszDiv.length) {
            valaszDiv.each(function(index, value) {
                let szoveg = $(this).find("label").text();
                let selectek = $(this).find("select");
                if(szoveg.substring(0,3) == "a. ") {
                    valaszTomb = new Array();
                    $(this).find("label").each(function(a, b) {
                        valaszTomb[a] = $(this).text().slice(3).trim();
                    });
                } else if (szoveg.substring(0,3) == "Iga") {
                    valaszTomb = new Array();
                    valaszTomb.push("Igaz");
                    valaszTomb.push("Hamis");
                } else if (szoveg.length > 1) {
                    valaszTomb = new Array();
                    $(this).find("label").each(function(a, b) {
                        valaszTomb[a] = $(this).text().trim();
                    });
                } else {
                    valaszTomb = [];
                }
            });
        } else {
           valaszTomb = [];
        }
        valaszok.push(valaszTomb);

        //kiolvassuk a helyes válaszokat
        let helyesValaszDiv = $(this).parent().find("div.rightanswer");
        let altHelyesValaszSpan = $(this).find("span.feedbackspan");
        if(helyesValaszDiv.length) {
            helyesValaszok.push(helyesValaszDiv.text().replace("A helyes válasz: ", "").replace("A helyes válasz: ", ""));
        } else if(altHelyesValaszSpan.length) {
            let helyesvalaszBuilder = "";
            altHelyesValaszSpan.each(function(index, value) {
                helyesvalaszBuilder += $(this).html().split("<br")[0].replace("A helyes válasz: ", "").replace("A helyes válaszok: ", "") + ", ";
            });
            helyesValaszok.push(helyesvalaszBuilder);
        } else {
            helyesValaszok.push('');
        }
    });


    //végleges formára hozzuk a kiolvasottakat
    let clipboard = "";

    let abc = "abcdefghijklmnopqrstuvwxyz";
    for(let i = 0; i < Math.min(kerdesek.length, valaszok.length, helyesValaszok.length); i++) {
        let valaszOpciok = "\r\n";
        for (let j = 0; j < valaszok[i].length; j++) {
            valaszOpciok += abc[j] + ") " + valaszok[i][j] + "\r\n";
        }
        clipboard += (i+1)+". kérdés: " + kerdesek[i] + valaszOpciok + "Helyes válasz: " + helyesValaszok[i]+ "\r\n\r\n";
    }
    if(clipboard) GM_setClipboard(clipboard);
}