Neopets: Godori Pop-Ups Begone

Blocks the pop-up alerts in Godori

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

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

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

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

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

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         Neopets: Godori Pop-Ups Begone
// @namespace    https://github.com/saahphire/NeopetsUserscripts
// @description  Blocks the pop-up alerts in Godori
// @match       https://www.neopets.com/games/godori/*
// @exclude     https://www.neopets.com/games/godori/index.phtml
// @version     1.0.0
// @author       saahphire
// @homepageURL  https://github.com/saahphire/NeopetsUserscripts
// @icon         https://www.google.com/s2/favicons?sz=64&domain=neopets.com
// @license      The Unlicense
// @run-at      document-start
// ==/UserScript==

/*
•:•.•:•.•:•:•:•:•:•:•:••:•.•:•.•:•:•:•:•:•:•:•:•.•:•.•:
.......................................................
☆ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂✦ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂☆ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂✦
    This script removes every single pop-up in Godori.
    ✦ ⌇ saahphire
☆ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂✦ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂☆ ⠂⠄⠄⠂⠁⠁⠂⠄⠄⠂✦
......................................................
•:•.•:•.•:•:•:•:•:•:•:••:•.•:•.•:•:•:•:•:•:•:•:•.•:•.•
*/

/**
* Moves the Godori help text to a <details> element so it can be collapsed
*/
const detailize = () => {
    const title = document.querySelector(".content p");
    const details = document.createElement("details");
    const summary = document.createElement("summary");
    details.appendChild(summary);
    summary.appendChild(title.children[0]);
    let children = [...title.parentElement.childNodes];
    const cutAt = children.findIndex(child => child.tagName === "CENTER");
    children.splice(0, cutAt).forEach(child => details.appendChild(child));
    children[0].insertAdjacentElement("beforeBegin", details);
}

/**
* Adds the "_ plays first!" message to the log
* @param log {Element} the <details> element that serves as our log
*/
const addPlaysFirst = (log) => {
    if(!saahphireGodoriAlert) return;
    const p = document.createElement("p");
    p.textContent = saahphireGodoriAlert;
    document.getElementById("saahphire-godori-log").appendChild(p);
}

/**
* Creates the <details> element that will serve as a log
*/
const createLog = () => {
    const log = document.createElement("details");
    const summary = document.createElement("summary");
    log.appendChild(summary);
    summary.textContent = "Log";
    log.id = "saahphire-godori-log";
    document.getElementsByTagName("details")[0].insertAdjacentElement("afterEnd", log);
    addPlaysFirst(log);
}

/**
* Adds both <details> elements to the DOM and changes the behavior of window.alert
* @param script {Element} the <script> element
*/
const initialize = (script) => {
    detailize();
    createLog();
    script.textContent = `window.alert = (alert) => {
    const p = document.createElement("p");
    p.textContent = alert;
    document.getElementById("saahphire-godori-log").appendChild(p);
    };
    window.confirm = () => true`;
}

/**
* Creates a <script> element changing the behavior of window.alert and window.confirm so they no longer create popups
* @returns {Element} the <script> element
*/
const addScriptElement = () => {
    const script = document.createElement("script");
    script.type = "text/javascript";
    script.textContent = `let saahphireGodoriAlert; window.alert = (alert) => {saahphireGodoriAlert = alert}; window.confirm = () => true`;
    const parent = document.getElementsByTagName("head")[0] ?? document.body ?? document.documentElement;
    parent.appendChild(script);
    return script;
}

(function() {
    const script = addScriptElement();
    document.addEventListener("DOMContentLoaded", () => initialize(script));
})();