MediaWiki:Gadget-main-trivia-box.js: Difference between revisions

From Rhythm Game Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* Finds elements by a selector and executes a function for each element */
function findAndExecute(selector, callback) {
    const elements = document.querySelectorAll(selector);
    elements.forEach((element) => {
        try {
            callback(element);
        } catch (e) {
            console.error(`Error while initializing "${selector}"`, e);
        }
    });
}
/* Template:TriviaBox */
findAndExecute(".rgwiki-main-trivia-box", (div) => {
findAndExecute(".rgwiki-main-trivia-box", (div) => {
     function roll() {
     function roll() {
Line 12: Line 26:
     }
     }
     const buttons = div.querySelector(".rgwiki-main-trivia-buttons");
     const buttons = div.querySelector(".rgwiki-main-trivia-buttons");
 
     const a = buttons.querySelector(".rgwiki-main-trivia-reroll");
     const a = document.createElement("a");
    a.href = "javascript:void(0)";
     a.addEventListener("click", roll);
     a.addEventListener("click", roll);
    a.textContent = "[reroll]";
    buttons.appendChild(a);
     roll();
     roll();
});
});

Latest revision as of 22:55, 26 February 2025

/* Finds elements by a selector and executes a function for each element */
function findAndExecute(selector, callback) {
    const elements = document.querySelectorAll(selector);
    elements.forEach((element) => {
        try {
            callback(element);
        } catch (e) {
            console.error(`Error while initializing "${selector}"`, e);
        }
    });
}

/* Template:TriviaBox */

findAndExecute(".rgwiki-main-trivia-box", (div) => {
    function roll() {
        div.querySelectorAll("li.rgwiki-main-trivia-active").forEach(x => { x.classList.remove("rgwiki-main-trivia-active"); x.classList.add("rgwiki-main-trivia-previously-active"); });

        const elements = div.querySelectorAll("li:not(.rgwiki-main-trivia-previously-active");
        if (elements.length !== 0) {
            const rand = Math.floor(Math.random() * elements.length);
            elements[rand].classList.add("rgwiki-main-trivia-active");
        }

        div.querySelectorAll("li.rgwiki-main-trivia-previously-active").forEach(x => { x.classList.remove("rgwiki-main-trivia-previously-active"); });
    }
    const buttons = div.querySelector(".rgwiki-main-trivia-buttons");
    const a = buttons.querySelector(".rgwiki-main-trivia-reroll");
    a.addEventListener("click", roll);
    roll();
});