// ==UserScript== // @name Customize Zeit Online // @namespace https://greasyfork.org/en/users/689160-georg-vogt // @version 4.11 // @description Entferne unerwünschte Artikel/Abschnitte aus Zeit Online // @author Georg Vogt // @match https://www.zeit.de/* // @icon https://icons.duckduckgo.com/ip2/zeit.de.ico // @grant GM_setValue // @grant GM_getValue // @run-at document-body // @downloadURL none // ==/UserScript== "use strict"; function hideNode(node) { if (node) { node.style.display = "none"; // node.style.background = "red"; // debug } } function clearMainPage() { // Create Settings on bottom function createCheckbox(text, id, defaultValue=true) { 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: Blocke

"; const boxes = document.createElement("div"); boxes.style = "display: grid; grid-template-columns: repeat(auto-fit, minmax(100px, 175px));"; boxes.appendChild(createCheckbox("Zeit+", "tm_czo_zeitplus")); boxes.appendChild(createCheckbox("Zett", "tm_czo_zett")); boxes.appendChild(createCheckbox("Verlagsangebote", "tm_czo_verlag")); boxes.appendChild(createCheckbox("Podcasts", "tm_czo_podcast")); boxes.appendChild(createCheckbox("Videos", "tm_czo_video")); boxes.appendChild(createCheckbox("Newsletter", "tm_czo_newsletter")); boxes.appendChild(createCheckbox("Känguru Comic", "tm_czo_comic")); boxes.appendChild(createCheckbox("Offline Angebot", "tm_czo_offline")); boxes.appendChild(createCheckbox("Wochenmarkt", "tm_czo_wochenmarkt")); boxes.appendChild(createCheckbox("Quiz + anderer Artikel", "tm_czo_quiz")); settings.appendChild(boxes); main.appendChild(settings); // bad single nodes const queries = new Map([ ["div.cp-region.cp-region--kpi-table", "div"], // Beliebte Artikel ["div.cp-region.cp-region--kpi-accordion", "div"], // Beliebte Artikel mobile ["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>div.zg-wiegehtesihnen", "div"], // Stimmungsumfrage ["a[href='https://www.zeit.de/serie/die-49']", "div"], // Die 49 ]); queries.forEach((node, query) => hideNode(main.querySelector(query)?.closest(node))); // remove zeit+ if (GM_getValue("tm_czo_zeitplus", true)) { const zplusArticles = main.querySelectorAll("article svg.svg-symbol.zplus-logo:not(.invisible)"); zplusArticles.forEach(node => hideNode(node.closest("article"))); } // remove wochenmarkt if (GM_getValue("tm_czo_wochenmarkt", true)) { const wochenmarkt = main.querySelectorAll( "article[data-unique-id^='http://xml.zeit.de/zeit-magazin/wochenmarkt'], article.zon-teaser-wochenmarkt" ); wochenmarkt.forEach(node => hideNode(node)); } // remove zett if (GM_getValue("tm_czo_zett", true)) { const zettArticles = main.querySelectorAll(":scope>div>*>article>[href^='https://www.zeit.de/zett']"); zettArticles.forEach(node => hideNode(node.closest("article"))); } // remove Verlagsangebot if (GM_getValue("tm_czo_verlag", true)) { const verlagsangebotArticles = main.querySelectorAll(":scope>div>*>article.zon-teaser-standard.zon-teaser-standard--ad"); verlagsangebotArticles.forEach(node => hideNode(node)); const veranstaltungen = main.querySelectorAll(":scope>div>*>article>a[href^='https://z2x.zeit.de']"); veranstaltungen.forEach(node => hideNode(node.parentElement)); } // remove podcasts if (GM_getValue("tm_czo_podcast", true)) { const podcasts = main.querySelectorAll([ ":scope>div>*>article.zon-teaser-standard.zon-teaser-standard--podcast", ":scope>div>*>article.teaser-podcast-lead", ":scope>div>*>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(":scope>div>*>article[data-video-id]"); videos.forEach(node => hideNode(node)); } // remove newsletter if (GM_getValue("tm_czo_newsletter", true)) { const newsletters = main.querySelectorAll(":scope>div>*>article>a[href^='https://www.zeit.de/newsletter']"); newsletters.forEach(node => hideNode(node.parentElement)); main.querySelectorAll(":scope>div>div>aside.newsletter-signup").forEach(node => hideNode(node)); } // remove Känguru Comic if (GM_getValue("tm_czo_comic", true)) { const comic = main.querySelector("figure [href^='https://www.zeit.de/serie/die-kaenguru-comics'], figure [src^='https://img.zeit.de/administratives/kaenguru-comics']"); hideNode(comic?.closest("div.scrollable-wrapper, div.collapsible-wrapper")); } // remove Quiz region if (GM_getValue("tm_czo_quiz", true)) { const quiz = main.querySelector(":scope>div>div>section.frame.frame--quiz"); hideNode(quiz?.closest("div.cp-region")); } // remove offline angebote if (GM_getValue("tm_czo_offline", true)) { hideNode(main.querySelector(":scope>div>section[data-ct-context='printkiosk']")?.closest("div.cp-region")); // Jetzt für sie am Kiosk hideNode(main.querySelector(":scope>div>div>section.zon-teaser-printbox")?.closest("div.cp-region")); // Diese Woche in der ZEIT } // remove regions without articles main.querySelectorAll(":scope>div").forEach( node => node.querySelector("article:not([style*='display: none']), :scope>div>aside>div.zg-corona-dashboard, :scope>div>section>iframe")? "": hideNode(node) ); } function clearArticle() { // bad single nodes const queries = new Map([ ["aside.jobbox-ticker", "aside"], // Jobbörse ]); queries.forEach((node, query) => hideNode(document.querySelector(query)?.closest(node))); // remove sidebar Zeit+ if (GM_getValue("tm_czo_zeitplus", true)) { const possibleHeadings = ["DAS BESTE AUS Z+", "Z+"]; const sideBoxes = document.querySelectorAll("article aside.topicbox"); for (const sideBox of sideBoxes) { if (possibleHeadings.includes(sideBox.firstElementChild?.firstElementChild?.innerText)) { hideNode(sideBox); } } } // remove videos if (GM_getValue("tm_czo_video", true)) { const videos = document.querySelectorAll("figure>div.js-videoplayer"); videos.forEach(node => hideNode(node.parentElement)); } // remove newsletter if (GM_getValue("tm_czo_newsletter", true)) { hideNode(document.querySelector("aside.newsletter-signup")); hideNode(document.querySelector("[action*='community.zeit.de/newsletter']")?.closest("form")); // Newsletter inline } // offline angebote if (GM_getValue("tm_czo_offline", true)) { hideNode(document.querySelectorAll("aside.volume-teaser")); } // Anzeige const nextRead = document.querySelector("span.nextread-note__label") if (nextRead?.innerText == "ANZEIGE") { hideNode(nextRead?.closest("article")); } } document.addEventListener("DOMContentLoaded", () => { if (document.querySelector("div.cp-region")) { clearMainPage(); } else { clearArticle(); }; }); // 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});