Moodle Optimizer

Automatisches ausfüllen der standard-Daten und Erstellung eines Gerüsts für den Hausaufgabenlog auf moodle.bbbaden.ch.

Version au 16/05/2019. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

You will need to install an extension such as Tampermonkey to install this script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         Moodle Optimizer
// @namespace    http://tampermonkey.net/
// @version      0.80
// @description  Automatisches ausfüllen der standard-Daten und Erstellung eines Gerüsts für den Hausaufgabenlog auf moodle.bbbaden.ch.
// @author       Dan6erbond
// @match        https://moodle.bbbaden.ch/*
// @grant        none
// ==/UserScript==

const tätigkeiten = ["Nichts.", "Repetition.", "Übungen."]

var editor = null;
var tätigkeitenPrompt = null;
var arbeitsaufwandPrompt = null;
var gelerntesPrompt = null;
var offeneFragenPrompt = null;

var min = 40;
var max = 200;

function getElementByXpath(path) {
  return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

setTimeout(function(){firstFunction();}, 500);

function firstFunction(){
	var hausaufgabenButton = getElementByXpath("//*[@id=\"region-main\"]/div/div[3]/div/form/div/input[1]")
    if (hausaufgabenButton != null){
        var newButton = hausaufgabenButton.cloneNode(true);
        newButton.onclick = function(){
            document.location.href = "https://moodle.bbbaden.ch/mod/journal/edit.php?id=" + new URL(document.location.href).searchParams.get("id") + "&popup=true";
        };
        newButton.value = "Eintrag hinzufügen";
        hausaufgabenButton.parentNode.parentNode.parentNode.append(newButton);
    }

    var loginButton = getElementByXpath("//*[@id=\"submit\"]");
    if (loginButton != null)
        loginButton.click();

    var confirmButton = getElementByXpath("//*[@id=\"loginbtn\"]");
    if (confirmButton != null)
        confirmButton.click();
}

setTimeout(function(){checkForEditor();}, 1000);

function checkForEditor(){
    editor = document.getElementById("id_text_editoreditable");

    if (editor != null && new URL(document.location.href).searchParams.get("popup") == "true"){
        var tätigkeit = tätigkeiten[Math.floor(Math.random() * tätigkeiten.length)];
        tätigkeitenPrompt = prompt("Tätigkeiten:", tätigkeit);
        var minutes = Math.round(Math.floor(Math.random() * max + min) / 10) * 10;

        var stunden = Math.floor(minutes / 60);
        var minuten = minutes - stunden * 60;

        var promptText = stunden != 0 ? stunden + " Stunden " + minuten + " Minuten" : minuten + " Minuten"

        arbeitsaufwandPrompt = prompt("Arbeitsaufwand:", promptText);
        gelerntesPrompt = prompt("Gelerntes:", "Nichts.");
        offeneFragenPrompt = prompt("Offene Fragen:", "Keine.");

        if (tätigkeitenPrompt == null || arbeitsaufwandPrompt == null || gelerntesPrompt == null || offeneFragenPrompt == null)
            return;
		
        fillOutLog();		
    }
}

function fillOutLog(){
    var d = new Date();
    var dateString = d.getDate() + "." + (d.getMonth()+1) + "." + d.getFullYear();

    var header = document.createElement("p");
    var headerChild = document.createElement("b");
    headerChild.innerHTML = "Hausaufgabenlog vom " + dateString;
    header.appendChild(headerChild);

    var text = document.createElement("p");
    var list = document.createElement("ul");

    var tätigkeiten = document.createElement("li");
    var tätigkeitenTitel = document.createElement("b");
    tätigkeitenTitel.innerHTML = "Tätigkeiten: ";
    var tätigkeitenText = document.createTextNode(tätigkeitenPrompt);
    tätigkeiten.appendChild(tätigkeitenTitel);
    tätigkeiten.appendChild(tätigkeitenText);

    var arbeitsaufwand = document.createElement("li");
    var arbeitsaufwandTitel = document.createElement("b");
    arbeitsaufwandTitel.innerHTML = "Arbeitsaufwand: ";
    var arbeitsaufwandText = document.createTextNode(arbeitsaufwandPrompt);
    arbeitsaufwand.appendChild(arbeitsaufwandTitel);
    arbeitsaufwand.appendChild(arbeitsaufwandText);

    var gelerntes = document.createElement("li");
    var gelerntesTitel = document.createElement("b");
    gelerntesTitel.innerHTML = "Gelerntes: ";
    var gelerntesText = document.createTextNode(gelerntesPrompt);
    gelerntes.appendChild(gelerntesTitel);
    gelerntes.appendChild(gelerntesText);

    var offeneFragen = document.createElement("li");
    var offeneFragenTitel = document.createElement("b");
    offeneFragenTitel.innerHTML = "Offene Fragen: ";
    var offeneFragenText = document.createTextNode(offeneFragenPrompt);
    offeneFragen.appendChild(offeneFragenTitel);
    offeneFragen.appendChild(offeneFragenText);

    list.appendChild(tätigkeiten);
    list.appendChild(arbeitsaufwand);
    list.appendChild(gelerntes);
    list.appendChild(offeneFragen);
    text.appendChild(list);
    
    editor.insertBefore(text, editor.firstChild);
    editor.insertBefore(header, editor.firstChild);
}