Autocomplete_Moodle_section_SCORM

Automatically completes SCORM sections and shows logs in a non-blocking popup

// ==UserScript==
// @name         Autocomplete_Moodle_section_SCORM
// @version      1.3.4
// @description  Automatically completes SCORM sections and shows logs in a non-blocking popup
// @author       ElenaCorner
// @match       https://*/scorm/*
// @grant        none
// @run-at       document-end
// @license MIT
// @namespace https://greasyfork.org/users/1429342
// ==/UserScript==

(function completeCourse(win) {
    let logMessages = []; // Array per memorizzare i log delle funzioni di completamento

    function createPopup() {
        let popup = document.createElement("div");
        popup.id = "scorm-popup";
        popup.style.position = "fixed";
        popup.style.bottom = "20px";
        popup.style.right = "20px";
        popup.style.background = "rgba(0, 0, 0, 0.8)";
        popup.style.color = "#fff";
        popup.style.padding = "15px";
        popup.style.borderRadius = "8px";
        popup.style.fontSize = "14px";
        popup.style.zIndex = "9999";
        popup.style.maxWidth = "250px";
        popup.style.boxShadow = "0px 4px 8px rgba(0, 0, 0, 0.2)";
        popup.style.display = "none"; // Inizialmente nascosto

        let closeButton = document.createElement("span");
        closeButton.innerHTML = "✖";
        closeButton.style.position = "absolute";
        closeButton.style.top = "5px";
        closeButton.style.right = "10px";
        closeButton.style.cursor = "pointer";
        closeButton.style.fontSize = "16px";

        closeButton.onclick = function () {
            popup.style.display = "none"; // Nasconde il popup
        };

        popup.appendChild(closeButton);
        document.body.appendChild(popup);
        return popup;
    }

    function showPopupLog() {
        if (logMessages.length > 0) {
            let popup = document.getElementById("scorm-popup") || createPopup();
            popup.innerHTML = logMessages.join("<br>"); // Inserisce i messaggi
            popup.appendChild(popup.firstChild); // Mantiene il pulsante di chiusura
            popup.style.display = "block"; // Mostra il popup
        }
    }

    function logMessage(message) {
        console.log(message);
        logMessages.push(message);
        showPopupLog();
    }

    function completeScorm2004(api) {
        api.SetValue("cmi.completion_status", "completed");
        api.Commit("");
        api.Terminate("");
        logMessage("✅ section completed");
    }

    function completeScorm12(api) {
        api.LMSSetValue("cmi.core.lesson_status", "completed");
        api.LMSCommit("");
        api.LMSFinish("");
        logMessage("✅ section completed");
    }

    function findScormAPI(win) {
        if (win.API_1484_11) {
            completeScorm2004(win.API_1484_11);
        } else if (win.API) {
            completeScorm12(win.API);
        }
    }

    // Esegui la funzione automaticamente dopo 10 secondi
    setTimeout(() => findScormAPI(win), 10000);
})(window);