Greasy Fork

spiegel.de: entferne störende Elemente

Entfernt ausgewählte Elemente von Spiegel Online

目前为 2021-07-14 提交的版本。查看 最新版本

// ==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);
      }};