Gets rid of ads and sponsor stuff on Aternos
// ==UserScript==
// @name CleanifyAternos
// @namespace https://soluzid.github.io/
// @version 1.0
// @description Gets rid of ads and sponsor stuff on Aternos
// @author Luz
// @match *://*.aternos.org/*
// @grant none
// @run-at document-start
// @license MIT
// ==/UserScript==
(function() {
'use strict';
const removeSelectors = [
'[data-gamera-placement-container]',
'.placement',
'#placement-right-skyscraper',
'.responsive-leaderboard',
'.server-b-tutorials',
'.exaroton-header-leaderboard',
'.boost-cta-box',
'.ad-label-wrapper',
'.ad-label',
'.ad-replacement',
'iframe[id^="google_ads_iframe_"]',
'[data-google-query-id]',
'[data-integralas-id]'
];
const hideSelectors = [
'.responsive-sky-scraper'
];
const removeSelector = removeSelectors.join(',');
const hideSelector = hideSelectors.join(',');
function removeAds(root) {
if (root.nodeType !== Node.ELEMENT_NODE) {
return;
}
if (root.matches(removeSelector)) {
root.remove();
return;
}
root.querySelectorAll(removeSelector).forEach(function(element) {
element.remove();
});
}
function hideAdContainers(root) {
if (root.nodeType !== Node.ELEMENT_NODE) {
return;
}
if (root.matches(hideSelector)) {
root.style.setProperty('display', 'none', 'important');
}
root.querySelectorAll(hideSelector).forEach(function(element) {
element.style.setProperty('display', 'none', 'important');
});
}
function clean(root) {
if (root.nodeType !== Node.ELEMENT_NODE) {
return;
}
removeAds(root);
hideAdContainers(root);
}
function cleanExisting() {
document.querySelectorAll(removeSelector).forEach(function(element) {
element.remove();
});
document.querySelectorAll(hideSelector).forEach(function(element) {
element.style.setProperty('display', 'none', 'important');
});
}
function addHideStyle() {
if (!document.documentElement) {
return;
}
if (document.getElementById('cleanify-aternos-style')) {
return;
}
const style = document.createElement('style');
style.id = 'cleanify-aternos-style';
style.textContent =
hideSelector + ' { display: none !important; }';
document.documentElement.appendChild(style);
}
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
mutation.addedNodes.forEach(function(node) {
if (node.nodeType === Node.ELEMENT_NODE) {
clean(node);
}
});
});
});
function start() {
addHideStyle();
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
cleanExisting();
setInterval(function() {
cleanExisting();
}, 3000);
}
if (document.documentElement) {
start();
} else {
const startupObserver = new MutationObserver(function() {
if (!document.documentElement) {
return;
}
startupObserver.disconnect();
start();
});
startupObserver.observe(document, {
childList: true,
subtree: true
});
}
})();