Auto-accept modal popups
Jump to navigation
Jump to search
This is a userscript that automatically closes frequently shown popups, such as NSFW warnings, age verification, and Discord server reminders. It also automatically expands details such as the inputs and outputs in the cost breakdown, and collapses Example worlds on the main page.
// ==UserScript==
// @name Auto-close modal popups and expand/collapse details
// @namespace https://infiniteworlds.app/
// @version 1.0
// @description Automatically close frequent popups and expand/collapse details
// @match https://infiniteworlds.app/
// @icon https://infinite-worlds-images.us-east-1.linodeobjects.com/00000__logo_square_on_background_512.jpg
// @grant none
// ==/UserScript==
(function() {
'use strict';
const checkedClass = "userscript-checked";
function hasDesiredText(target, desiredText) {
for (let desired of desiredText) {
if (target.includes(desired)) {
return true;
}
}
return false;
}
function closeModal() {
const selector = "#alert-modal button.btn-success";
const button = document.querySelector(selector);
if (button === null) {
return;
}
const desiredText = [
"18 years",
"Changes discarded",
"Changes saved",
"Discord server",
"NSFW",
];
const text = button.closest("#alert-modal").textContent;
if (hasDesiredText(text, desiredText)) {
button.click();
}
}
const observer1 = new MutationObserver(closeModal);
observer1.observe(document.body, {characterData: true, childList: true, subtree: true});
// Inside modals
function expandDetails() {
const desiredText = [
"Latest details",
"Inputs",
"Outputs",
];
const selector = ".modal-content button > .left.fa-angle-right";
Array.from(document.querySelectorAll(selector))
.filter(e => !e.classList.contains(checkedClass))
.filter(e => hasDesiredText(e.closest("button").textContent, desiredText))
.forEach(e => e.click());
Array.from(document.querySelectorAll(selector))
.filter(e => !e.classList.contains(checkedClass))
.forEach(e => e.classList.add(checkedClass));
}
const observer2 = new MutationObserver(expandDetails);
observer2.observe(document.body, {characterData: true, childList: true, subtree: true});
// Outside of modals
function collapseDetails() {
const desiredText = [
"Example worlds",
];
const selector = "#appGoesHere .left.fa-angle-down";
Array.from(document.querySelectorAll(selector))
.filter(e => !e.classList.contains(checkedClass))
.filter(e => hasDesiredText(e.closest("button").textContent, desiredText))
.forEach(e => e.click());
Array.from(document.querySelectorAll(selector))
.filter(e => !e.classList.contains(checkedClass))
.forEach(e => e.classList.add(checkedClass));
}
const observer3 = new MutationObserver(collapseDetails);
observer3.observe(document.body, {characterData: true, childList: true, subtree: true});
})();