ElLutzo / Remove Ads On Spiegel.de

// ==UserScript==
// @name           Remove Ads On Spiegel.de
// @namespace      *
// @include        http://www.spiegel.de/*
// @include        https://www.spiegel.de/*
// @grant          none
// @license        GPL-3.0-or-later
// ==/UserScript==

/**
 * (en) Removes node by its attribute value
 * (de) Entfernt einen Knoten anhand des Wertes eines Attributs
 */
function removeNodeByAttributeValue(tag, attr, val) {
  var es = document.getElementsByTagName(tag);

  /* (en) walk through the list of elements with this tag name
   *      and remove the ones with this attribute and value from its parent
   */
  /* (de) gehe die Liste der Elemente durch, die den angegebenen Tag-Namen
   *      besitzen, und entferne diejenigen Elemente, die das angegebene Attribut
   *      und den angegebenen Wert besitzen, aus der Liste der Kinderknoten des
   *      Vaterknotens
   */
  for (var i = 0; i <= (es.length - 1); i++) {
    if (es[i].getAttribute(attr) == val) {
      es[i].parentNode.removeChild(es[i]);
    }
  }
}

/* (en) remove outbrain advertisement imgs */
/* (de) entferne die Outbrain-Werbe-Bilder */
function removeOutbrainImgs() {
  var es = document.querySelectorAll('[referrerpolicy="unsafe-url"]');
  for (var i = 0; i <= (es.length - 1); i++) {
    es[i].parentNode.removeChild(es[i]);
  }
}

/* (en) remove ad divs (where its class ends with a space) */
/* (de) entfernt Werbe-Divs (divs, deren Klasse mit einem Leerzeichen endet) */
function removeAdDivs() {
  var es = document.getElementsByTagName('div');

  /* (en) walk through the list of div elements
   *      and remove the ones with a class value that ends with a space
   */
  /* (de) gehe die Liste der Div-Elemente durch und entferne diejenigen Elemente,
   *      deren Klassenwert mit einem Leerzeichen endet.
   */
  for (var i = 0; i <= (es.length - 1); i++) {
    if (es[i].getAttribute('class') != null &&
      es[i].getAttribute('class') != '') {
      var l = es[i].getAttribute('class').length;
      if (es[i].getAttribute('class')[l - 1] == ' ') {
        es[i].parentNode.removeChild(es[i]);
      }
    }
  }
}

/* (en) remove ad imgs from spiegel.de */
/* (de) entferne die Werbebilder von */

/* (en) remove outbrain advertisement imgs and vi video */
/* (de) entferne die Outbrain-Werbe-Bilder und das vi-Video */
function removeAds() {
  removeOutbrainImgs();
  removeAdDivs();
  removeNodeByAttributeValue('div', 'data-area', 'vouchers');
  removeNodeByAttributeValue('div', 'class', 'vi-stories-top-div viUnit2');
  removeNodeByAttributeValue('div', 'class', 'vr-vpaid-container');
  removeNodeByAttributeValue('div', 'class', 'advertisement-filled:mb-24 advertisement-filled:clear-both');
  removeNodeByAttributeValue('div', 'class', 'iqdcontainer md:advertisement-filled:overflow-hidden sm:advertisement-filled:overflow-hidden lg:advertisement-filled:py-8 md:advertisement-filled:py-8 sm:advertisement-filled:py-4');
  removeNodeByAttributeValue('div', 'class', 'iqdcontainer md:advertisement-filled:overflow-hidden sm:advertisement-filled:overflow-hidden relative z-10 lg:advertisement-filled:py-8 md:advertisement-filled:py-8');
  removeNodeByAttributeValue('div', 'class', 'iqdcontainer md:advertisement-filled:overflow-hidden sm:advertisement-filled:overflow-hidden lg:advertisement-filled:py-8 md:advertisement-filled:py-8 sm:advertisement-filled:py-4 iqdad');
  removeNodeByAttributeValue('div', 'class', 'iqdcontainer md:advertisement-filled:overflow-hidden sm:advertisement-filled:overflow-hidden relative z-10 lg:advertisement-filled:py-8 md:advertisement-filled:py-8 iqdad');
  removeNodeByAttributeValue('div', 'class', 'advertisement-filled:mb-24 advertisement-filled:clear-right lg:advertisement-filled:float-right md:advertisement-filled:float-right lg:advertisement-filled:mr-1/12 md:advertisement-filled:mr-1/12 lg:advertisement-filled:ml-24 md:advertisement-filled:ml-24 lg:advertisement-filled:px-24 md:advertisement-filled:px-24');
  removeNodeByAttributeValue('div', 'class', 'relative w-full group lg:advertisement-filled:my-16 md:advertisement-filled:my-16 sm:advertisement-filled:my-8');
  removeNodeByAttributeValue('section', 'class', 'relative w-full group lg:advertisement-filled:my-16 md:advertisement-filled:my-16 sm:advertisement-filled:my-8');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm0 sfaobjp0');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm1 sfaobjp1');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm2 sfaobjp2');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm3 sfaobjp3');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm4 sfaobjp4');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm5 sfaobjp5');
  removeNodeByAttributeValue('div', 'class', 'sfaobjm6 sfaobjp6');
}

/* (en) remove outbrain advertisement imgs and vi video */
/* (de) entferne die Outbrain-Werbe-Bilder und das vi-Video */
setInterval(removeAds, 5000);