Greasy Fork

Customize Zeit Online

Entferne unerwünschte Artikel/Abschnitte aus Zeit Online

目前为 2021-03-08 提交的版本。查看 最新版本

// ==UserScript==
// @name         Customize Zeit Online
// @namespace    https://greasyfork.org/en/users/689160-georg-vogt
// @version      4.1
// @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
// ==/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 = `
            <input type="checkbox" id="${id}+" name="${id}+" ${GM_getValue(id, true)? "checked": ""}>
            <label for="${id}+">${text}</label>
        `;
        div.onclick = function () {
            GM_setValue(id, div.firstElementChild.checked);
        };
        return div;
    }
    const main = document.querySelector("main");
    const settings = document.createElement("div");
    settings.innerHTML = "<h3>Customize Zeit Online Einstellungen</h3>";
    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"));
    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[data-ct-context='headed-zplus']", "div.cp-region"], // Exklusiv für Digital-Abonnenten
        ["section[data-ct-context='wochenmarkt']", "div.cp-region"], // Wochenmarkt
        ["section.frame.frame--quiz", "div.cp-area"], //  Quiz
        ["section[data-ct-area='podcast-bar']", "div.cp-region"], // Podcasts
        ["section[data-ct-context='headed-zett']", "div.cp-region"], // ze.tt
        ["section[data-ct-context='headed-video']", "div.cp-region"], // Video
        ["section[data-ct-context='shop']", "div.cp-region"], // Shop
        ["section[data-ct-context='headed-spiele']", "div.cp-region"], // Spiele
        ["section[data-ct-context='dossier-das_beste_aus_z']", "div.cp-region"], // DAS BESTE AUS Z+
        ["section[data-ct-context='newsticker']", "div.cp-region"], // Newsticker
        ["nav.servicebox", "div.cp-region"], // Service
        ["section[data-ct-context='printkiosk']", "div.cp-region"], // Jetzt für sie am Kiosk
        ["aside.newsletter-signup", "aside"], // Newsletter
        ["aside.joblisting", "div.cp-region"], //  Stellenangebot
        ["div.zg-wiegehtesihnen", "div"], // Stimmungsumfrage
        ["figure [href^='https://www.zeit.de/serie/die-kaenguru-comics']", "div.cp-region"], //  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']");
        queries.delete("section[data-ct-context='dossier-das_beste_aus_z']");
    }
    // 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")));
    } else {
        queries.delete("section[data-ct-context='headed-zett']");
    }

    // 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));
    } else {
        queries.delete("section[data-ct-area='podcast-bar']");
    }

    // remove bad single nodes
    queries.forEach((node, query) => hideNode(main.querySelector(query)?.closest(node)));

    // remove ad regions
    main.querySelectorAll("div.cp-region.cp-region--ad").forEach(node => hideNode(node));
});

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