// ==UserScript==
// @name Customize Zeit Online
// @namespace https://greasyfork.org/en/users/689160-georg-vogt
// @version 4.2
// @description Entferne unerwünschte Artikel/Abschnitte aus Zeit Online
// @author Georg Vogt
// @match https://www.zeit.de/*
// @grant GM_setValue
// @grant GM_getValue
// @run-at document-body
// @downloadURL none
// ==/UserScript==
"use strict";
function hideNode(node) {
try {
node.style.display = "none";
// node.style.background = "red"; // debug
} catch {};
}
document.addEventListener("DOMContentLoaded", () => {
// Create Settings on bottom
function createCheckbox(text, id) {
const div = document.createElement("div");
div.innerHTML = `
`;
div.onclick = function () {
GM_setValue(id, div.firstElementChild.checked);
};
return div;
}
const main = document.querySelector("main");
const settings = document.createElement("div");
settings.innerHTML = "
Customize Zeit Online Einstellungen
";
settings.appendChild(createCheckbox("Blocke Zeit+", "tm_czo_zeitplus"));
settings.appendChild(createCheckbox("Blocke Zett", "tm_czo_zett"));
settings.appendChild(createCheckbox("Blocke Verlagsangebote", "tm_czo_verlag"));
settings.appendChild(createCheckbox("Blocke Podcasts", "tm_czo_podcast"));
settings.appendChild(createCheckbox("Blocke Videos", "tm_czo_video"));
main.appendChild(settings);
// bad single nodes
const queries = new Map([
["section.zon-teaser-printbox", "div.cp-region"], // Diese Woche in der ZEIT
["section[data-ct-context='buzzboard']", "div.cp-region"], // Beliebte Artikel
["section.frame.frame--quiz", "div.cp-area"], // Quiz
["section[data-ct-context='shop']", "div.cp-region"], // Shop
["section[data-ct-context='headed-spiele']", "div.cp-region"], // Spiele
["section[data-ct-context='newsticker']", "div.cp-region"], // Newsticker
["section[data-ct-context='printkiosk']", "div.cp-region"], // Jetzt für sie am Kiosk
["aside.newsletter-signup", "aside"], // Newsletter
["div.zg-wiegehtesihnen", "div"], // Stimmungsumfrage
["figure [href^='https://www.zeit.de/serie/die-kaenguru-comics']", "div.scrollable-wrapper"], // Känguru comic
]);
// remove Z+
if (GM_getValue("tm_czo_zeitplus", true)) {
const zplusArticles = main.querySelectorAll("article:not([data-zplus='zplus-dynamic']) svg.svg-symbol.zplus-logo");
zplusArticles.forEach(node => hideNode(node.closest("article")));
// remove sidebar Zeit+
const sideBoxes = document.querySelectorAll("article aside.topicbox");
for (const sideBox of sideBoxes) {
if (sideBox.childNodes[1]?.childNodes[1]?.innerText == "DAS BESTE AUS Z+") {
hideNode(sideBox);
}
}
} else {
queries.delete("section[data-ct-context='headed-zplus']");
}
// remove zett articles
if (GM_getValue("tm_czo_zett", true)) {
const zettArticles = main.querySelectorAll("article svg.svg-symbol.zett-logo");
zettArticles.forEach(node => hideNode(node.closest("article")));
}
// remove Verlagsangebot
if (GM_getValue("tm_czo_verlag", true)) {
const verlagsangebotArticles = main.querySelectorAll("article.zon-teaser-standard.zon-teaser-standard--ad");
verlagsangebotArticles.forEach(node => hideNode(node));
}
// remove podcasts
if (GM_getValue("tm_czo_podcast", true)) {
const podcasts = main.querySelectorAll(["article.zon-teaser-standard.zon-teaser-standard--podcast","article.zon-teaser-wide.zon-teaser-wide--podcast"]);
podcasts.forEach(node => hideNode(node));
}
// remove videos
if (GM_getValue("tm_czo_video", true)) {
const videos = main.querySelectorAll("article[data-video-id]");
videos.forEach(node => hideNode(node));
}
// remove bad single nodes
queries.forEach((node, query) => hideNode(main.querySelector(query)?.closest(node)));
// remove regions without articles
main.querySelectorAll("div.cp-region:not([style='display: none;'])").forEach(node => node.querySelector("article:not([style='display: none;'])")? "": hideNode(node));
// show corona dashbord
main.querySelector("div.zg-corona").closest("div.cp-region").style.display = "";
});
// remove paywall footer
const callback = function(mutationsList, observer) {
for(const mutation of mutationsList) {
for (const node of mutation.addedNodes) {
if (node.className?.startsWith("paywall-footer")) {
hideNode(node);
observer.disconnect();
}
}
}
};
const observerFooter = new MutationObserver(callback);
observerFooter.observe(document.body, {childList: true});