// ==UserScript==
// @name spiegel.de: entferne störende Elemente
// @description Entfernt ausgewählte Elemente von Spiegel Online
// @namespace https://greasyfork.org/de/users/541444-critias
// @match https://www.spiegel.de/
// @match https://www.spiegel.de/*
// @version 4.0
// @grant none
// ==/UserScript==
var hauptteil = document.querySelector('.lg\\:pt-8');
//entfernt versteckte Elemente von der Startseite, damit diese später nicht stören
if(window.location.href === "https://www.spiegel.de/"){
if (hauptteil) {
var links10 = hauptteil.querySelectorAll('.lg\\:hidden, .hidden');
for(var link10 of links10) {
entfernen(link10);
}
}
};
var candidateSelectors = [
'article.py-16',
'div [data-area^="article_teaser"]',
'li.py-16',
'article > article.lg\\:py-24',
'div.sm\\:-mt-16',
'div.pb-16',
'ul > li',
'div.mb-16',
'div.z-10',
'a.swiper-slide',
'div.mb-4',
];
//Liste mit Elementen, die entfernt werden
var unnuetzes = [
'[data-flag-name="Spplus-paid"]', //Spiegel Plus Artikel
'[data-flag-name="Spaudio-paid"]', //Spiegel Plus Podcasts
'[data-target-id="content-marketing"]', //Werbung für Eigenprodukte
'div [aria-label^=Anzeige]', //Werbung, die der Adblocker nicht erkennt
'div [aria-label="Die Bilder des Tages"]', //Bilder des Tages
'div [data-target-id="digital-abo-ew"]', //Newsletter Angebote
'path[d^="M7.103 4.003c1.144 0 1.776.816"]', //manager magazin Artikel
'a[href^=\'https://www.spiegel.de/tests\']', //Testbericht-"Artikel" (also eigentlich Produktwerbung)
'a[href^=\'https://www.spiegel.de/thema/test_und_produkte\']', //Testbericht-"Artikel" (also eigentlich Produktwerbung)
'a[href^=\'https://www.spiegel.de/fotostrecke/bilder-des-tages\']', //Bilder des Tages
'a[href^=\'https://www.spiegel.de/deinspiegel/\']', //Dein SPIEGEL Artikel für Kinder
'a[href^=\'https://www.bento.de\']', //Bento Artikel
'a[href^=\'http://www.bento.de\']', //Bento Artikel
'a[href^=\'https://www.manager-magazin.de\']', //manager magazin Artikel
];
var links55 = document.querySelectorAll(unnuetzes);
for(var link0 of links55) {
var containerElement55 = link0.closest(candidateSelectors);
if (containerElement55) {
containerElement55.classList.add("markiert");
}
}
//Sorgt für eine gute Reihenfolge / schließt Lücken, die von entfernten Elementen zurückgelassen würden
var linksll = document.querySelectorAll(unnuetzes);
for(var linkl of linksll) {
var containerElement = linkl.closest(candidateSelectors);
var areal = linkl.closest('[data-area^="block>topic"]');
if (areal) {
if(containerElement && containerElement.parentElement){
var vierzwoelf = areal.querySelectorAll('.lg\\:w-4\\/12:not([data-area="article_teaser>news-s"]):not([data-area^="article_teaser>external"]):not(.markiert):not(.md\\:pl-24):not(.md\\:px-24):not(.lg\\:p-24):not(.lg\\:pl-24)');
var sechszwoelf = areal.querySelectorAll('.lg\\:w-6\\/12:not([data-area="article_teaser>news-s"]):not(.markiert):not(.md\\:pl-24):not(.md\\:px-24)');
var achtzwoelf = areal.querySelectorAll('.lg\\:w-8\\/12:not(.md\\:pl-24):not(.md\\:px-24)');
if (containerElement.classList.contains("lg:w-8/12")){
if (vierzwoelf && achtzwoelf){
if (vierzwoelf.length > 1) {
containerElement.classList.add("markiert2");
vierzwoelf[vierzwoelf.length- 1].classList.add("markiert2");
vierzwoelf[vierzwoelf.length- 2].classList.add("markiert2");
var erster2 = areal.querySelectorAll('.markiert2');
if (erster2[0] === containerElement) {
containerElement.replaceWith(vierzwoelf[vierzwoelf.length- 1]);
swapElements(vierzwoelf[vierzwoelf.length- 1],vierzwoelf[vierzwoelf.length- 2]);
}
if (erster2[1] === containerElement) {
containerElement.replaceWith(vierzwoelf[vierzwoelf.length- 1]);
}
if (containerElement) {
containerElement.classList.remove("markiert2");
}
vierzwoelf[vierzwoelf.length- 1].classList.remove("markiert2");
vierzwoelf[vierzwoelf.length- 2].classList.remove("markiert2");
}}}
if (containerElement.classList.contains("lg:w-4/12")){
if (!(containerElement.getAttribute("data-area") === 'article_teaser>news-s')){
if (vierzwoelf){
if (vierzwoelf.length > 0) {
containerElement.classList.add("markiert2");
vierzwoelf[vierzwoelf.length- 1].classList.add("markiert2");
var erster = areal.querySelectorAll('.markiert2');
if (erster[0] === containerElement) {
containerElement.replaceWith(vierzwoelf[vierzwoelf.length- 1]);
}
if (containerElement) {
containerElement.classList.remove("markiert2");
}
vierzwoelf[vierzwoelf.length- 1].classList.remove("markiert2");
}}}}
if (containerElement.classList.contains("lg:w-6/12")){
if (sechszwoelf){
if (sechszwoelf.length > 0) {
containerElement.classList.add("markiert2");
sechszwoelf[sechszwoelf.length- 1].classList.add("markiert2");
var erster1 = areal.querySelectorAll('.markiert2');
if (erster1[0] === containerElement) {
containerElement.replaceWith(sechszwoelf[sechszwoelf.length- 1]);
}
if (containerElement) {
containerElement.classList.remove("markiert2");
}
sechszwoelf[sechszwoelf.length- 1].classList.remove("markiert2");
}}}
}}
}
function swapElements(elm1, elm2) {
var parent1, next1;
parent1 = elm1.parentNode;
next1 = elm1.nextElementSibling;
parent1.insertBefore(elm2, next1);
}
//Sorgt dafür, dass die Suche-Funktion weiterhin funktioniert
if(window.location.href.indexOf("https://www.spiegel.de/suche/")== -1){
cleaner();
}else{
function suche_cleaner() {
var artikel7 = document.querySelectorAll('.lg\\:py-24');
let index = 1;
for( index=1; index < artikel7.length; index++ ) {
var test1 = artikel7[index].querySelector(unnuetzes);
if (test1){
if (artikel7[index] && artikel7[index].parentElement){
artikel7[index].parentElement.remove();
}
}
}
}
setTimeout(suche_cleaner, 800);
history.pushState = ( f => function pushState(){
var ret = f.apply(this, arguments);
window.dispatchEvent(new Event('pushstate'));
window.dispatchEvent(new Event('locationchange'));
return ret;
})(history.pushState);
history.replaceState = ( f => function replaceState(){
var ret = f.apply(this, arguments);
window.dispatchEvent(new Event('replacestate'));
window.dispatchEvent(new Event('locationchange'));
return ret;
})(history.replaceState);
window.addEventListener('popstate',()=>{
window.dispatchEvent(new Event('locationchange'))
});
window.addEventListener('locationchange', function(){
setTimeout(suche_cleaner, 600);
setTimeout(suche_cleaner, 1500);
})
}
//Funktion zum Entfernen störender Elemente
function cleaner() {
var links = document.querySelectorAll(unnuetzes);
for(var link of links) {
var containerElement = link.closest(candidateSelectors);
if(containerElement && containerElement.parentElement){
var nextS = containerElement.nextElementSibling;
var previousS = containerElement.previousElementSibling;
if(window.location.href === "https://www.spiegel.de/"){
if (nextS && nextS.parentElement){
if ((nextS.classList.contains("border-separator-b")|| nextS.classList.contains("border-separator-r"))&&!(!containerElement.classList.contains("w-full")&& !containerElement.classList.contains("lg:w-full")&& nextS.classList.contains("w-full"))) {
nextS.parentElement.removeChild(nextS);
var deleted = 1;
}
}
if (!deleted) {
if (previousS && previousS.parentElement){
if ((previousS.classList.contains("border-separator-b")|| previousS.classList.contains("border-separator-r"))&&!(!containerElement.classList.contains("w-full")&& !containerElement.classList.contains("lg:w-full")&& previousS.classList.contains("w-full"))) {
previousS.parentElement.removeChild(previousS);
var deleted1 = 1;
}
}}
if (!deleted && !deleted1) {
var parent1 = containerElement.parentElement;
var parent1S = parent1.previousElementSibling;
if (parent1S && parent1S.parentElement){
if ((parent1S.classList.contains("border-separator-b")|| parent1S.classList.contains("border-separator-r"))&& !containerElement.classList.contains("border-separator-b")) {
parent1S.parentElement.removeChild(parent1S);
var deleted2 = 1;
}}}
if (!deleted && !deleted1 && !deleted2) {
var parent1N = parent1.nextElementSibling;
if (parent1N && parent1N.parentElement){
if (parent1N.classList.contains("border-separator-b")|| parent1N.classList.contains("border-separator-r")) {
parent1N.parentElement.removeChild(parent1N);
}}}
deleted = null;
deleted1 = null;
deleted2 = null;
}else{
if (nextS && nextS.parentElement){
if (nextS.classList.contains("border-separator-b")&& !nextS.classList.contains("py-16")&& !nextS.classList.contains("pb-16")) {
nextS.parentElement.removeChild(nextS);
var deleted3 = 1;
}
}
if (!deleted3) {
if (previousS && previousS.parentElement){
if (previousS.classList.contains("border-separator-b")&& !previousS.classList.contains("py-16")&& !previousS.classList.contains("pb-16")) {
previousS.parentElement.removeChild(previousS);
}
}}
}
deleted3 = null;
containerElement.parentElement.removeChild(containerElement);
}
}
}
//Liste mit Abschnitten, die entfernt werden
(function() {
'use strict';
var abschnitte = [
'div [data-settings*="newsletter"]', //Newsletter Angebote
'div [data-component="AffiliateBox"]', //Werbung
'div [data-area^="block>topic:spiegel-bestseller"]', //Spiegel Bestseller
'div [data-area^="block>bestsellerslider"]', //Spiegel Bestseller Menü
'div [data-area^="block>podlove"]', //Podcasts
'div [data-area="block>stocks"]', //Börse
'div [data-area="block>topic:produkte_im_test"]', //Testbericht-"Artikel" (also eigentlich Produktwerbung)
'div [data-area="group:manager_magazin"]', //Manager Magazin Artikel
'div [data-area*="_spiegel+"]', //Spiegel Plus Artikel
'div [data-area^="block>podcastbox"]', //Podcast Menü
'section[data-area="block>highlight:bild_des_tages"]', //Bilder des Tages
'section[data-area^="block>podlove"]', //Podcasts
'section[data-area="block>DeinSPIEGEL"]', //DEIN SPIEGEL (Spiegel Artikel für Kinder)
'section[data-area="latest-news"]', //Extra Hinweis auf neue Artikel
'section[data-area*="Podcast von bento"]', //Bento Podcast
'[data-area="block>sportdaten"]', //Sportdaten bzw. Spielergebnisse
'[data-contains-flags^="Spplus-conditional"]', //Spiegel Plus Symbol bei kostenlosen Artikeln
'[data-area^="block>podcastslider"]', //Podcast Menü
];
var badSpans = document.querySelectorAll(abschnitte)
badSpans.forEach((s) => {
if(s !== undefined) {
s.remove()
}
})
})();
//entfernt den Abschnitt "Top bei SPIEGEL+"
var elList = document.querySelectorAll("div.leading-tight");
elList.forEach(function(el) {
if (el.innerHTML.indexOf("Top bei SPIEGEL+") !== -1) {
var containerElement3 = el.closest(candidateSelectors);
var nextS2 = containerElement3.nextElementSibling;
if(containerElement3 && containerElement3.parentElement){
if (nextS2 && nextS2.parentElement){
if (nextS2.classList.contains("border-separator-b")) {
nextS2.parentElement.removeChild(nextS2);
}
}
containerElement3.parentElement.removeChild(containerElement3);
}
}
});
//entfernt Hyperlinks, die auf Spiegel Plus Artikel / HBM Plus Artikel / die generische Thema-Seite verlinken, ohne den Text zu entstellen.
var links4 = document.querySelectorAll(".RichText a");
links4.forEach(function(el) {
if (el.getAttribute("data-link-flag") === 'sponpaid' || el.getAttribute("data-link-flag") === 'paid') {
el.replaceWith(...el.childNodes);
}
if (el.getAttribute("data-link-flag") === 'hbmpaid') {
el.replaceWith(...el.childNodes);
}
if (el.getAttribute("href").indexOf ("www.spiegel.de/thema/")!== -1) {
el.replaceWith(...el.childNodes);
}
});
//entfernt den "Mehr ztum Thema" Abschnitt aus Artikeln, wenn alle vorgeschlagenen Artikel von Spiegel Plus sind. Selbst dann, wenn der Abschnitt irgend einen anderen Namen trägt.
var links5 = document.querySelectorAll("span.leading-tight");
for(var link5 of links5) {
if ((link5.innerHTML.indexOf("Mehr lesen über") == -1)&&(link5.innerHTML.indexOf("Verwandte Artikel") == -1)&&(link5.innerHTML !== null)) {
var group = link5.closest(".mx-auto");
var artikel = group.querySelector(".items-center");
if (!artikel){
entfernen(group);
}
}
};
//entfernt den "Verwandte Artikel" Abschnitt aus Artikeln, wenn alle vorgeschlagenen Artikel von Spiegel Plus sind und daher bereits entfernt wurden.
var links6 = document.querySelectorAll("span.leading-tight");
for(var link6 of links6) {
if (link6.innerHTML.indexOf("Verwandte Artikel") !== -1) {
var group2 = link6.closest(".w-full");
var artikel2 = group2.querySelector(".pl-12");
if (!artikel2){
entfernen(link6);
}
}
};
if(window.location.href === "https://www.spiegel.de/"){
// entfernt etwaige Abschnitte von der Hauptseite, wenn alle enthaltenen Artikel von Spiegel Plus sind und daher bereits entfernt wurden.
var links8 = document.querySelectorAll('[data-area^="block>topic"]');
for(var link8 of links8) {
var artikel4 = link8.querySelector('div [data-area^="article_teaser"]');
if (!artikel4){
entfernen(link8);
}
};
// entfernt etwaige Rubriken unter "Alle Rubriken", wenn alle enthaltenen Artikel von Spiegel Plus sind und daher bereits entfernt wurden.
var links9 = document.querySelectorAll('div[data-area^="group:"]');
for(var link9 of links9) {
var artikel5 = link9.querySelector(".font-bold");
if (!artikel5){
entfernen(link9);
}
};
//entfernt eine Linie, mehr nicht
var links11 = document.querySelector('div[data-area="group:wirtschaft"]');
if (links11){
var linie = links11.querySelector(".border-r");
entfernen(linie);
}
// behebt einen kleinen Fehler
var anfang = document.querySelectorAll('.lg\\:top-32');
if (anfang) {
for(var anfang1 of anfang) {
anfang1.classList.remove("lg:top-32");
}
}
}
//entfernt Menü unterhalb der Video-Sektion
var links12 = document.querySelectorAll(' a[href^=\'https://www.spiegel.de/thema/auto-tests-im-video/\']');
for(var link12 of links12) {
var containerElement6 = link12.closest('div.swiper-container');
var linie2 = containerElement6.previousElementSibling;
if(containerElement6 && containerElement6.parentElement){
if (linie2 && linie2.parentElement){
if (linie2.classList.contains("border-separator-b")) {
linie2.parentElement.removeChild(linie2);
}
}
containerElement6.parentElement.removeChild(containerElement6);
}
};
//räumt ein paar übriggebliebene Linien auf
var links13 = document.querySelectorAll("div.border-separator-b");
for(var link13 of links13) {
if (link13 && link13.parentElement){
if (link13.classList.contains("w-full")) {
var prev13 = link13.previousElementSibling;
if ((!link13.nextElementSibling || !prev13) && !link13.classList.contains("h-px")) {
link13.parentElement.removeChild(link13);
var deleted5 = 1;
}
if (!deleted5 && prev13) {
if (prev13.classList.contains("z-20")|| prev13.classList.contains("top-0")){
link13.parentElement.removeChild(link13);
}
}
}
deleted5 = null;
}
}
function entfernen(el1) {
if(el1 && el1.parentElement){
el1.parentElement.removeChild(el1);
}};