Paywall Unblocker v2 updated

unblocks Madsack Paywall

当前为 2024-05-05 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Paywall Unblocker v2 updated
// @name:de     Paywall Unblocker v2 updated
// @license     MIT
// @namespace   http://tampermonkey.net/
// @version     0.61
// @match        https://www.allgemeine-zeitung.de/*
// @match        https://www.dnn.de/*
// @match        https://www.nw.de/*
// @match        https://www.echo-online.de/*
// @match        https://www.goettinger-tageblatt.de/*
// @match        https://www.haz.de/*
// @match        https://www.hochheimer-zeitung.de/*
// @match        https://www.kn-online.de/*
// @match        https://www.ksta.de/*
// @match        https://www.ln-online.de/*
// @match        https://www.lvz.de/*
// @match        https://www.maz-online.de/*
// @match        https://www.neuepresse.de/*
// @match        https://www.oberhessische-zeitung.de/*
// @match        https://www.op-marburg.de/*
// @match        https://www.ostsee-zeitung.de/*
// @match        https://www.paz-online.de/*
// @match        https://www.rnd.de/*
// @match        https://www.rundschau-online.de/*
// @match        https://www.siegener-zeitung.de/*
// @match        https://www.sn-online.de/*
// @match        https://www.waz-online.de/*
// @match        https://www.wiesbadener-kurier.de/*
// @match        https://www.wormser-zeitung.de/*
// @grant       GM_addStyle
// @description unblocks Madsack Paywall
// @description:de  entfernt Madsack Paywall
// @author      hazuser99
// @require     https://code.jquery.com/jquery-3.7.1.min.js
// ==/UserScript==

(function() {
    'use strict';
    var url,site,html,parser,htmlDoc,articleText,jsonText,jsonObj,locationText;
    insert();

    async function caesar(){
        var url,site,html,parser,htmlDoc,articleText,jsonText,jsonObj,locationText;
        switch (location.hostname) {
            case "www.allgemeine-zeitung.de":
            case "www.echo-online.de":
            case "www.hochheimer-zeitung.de":
            case "www.lauterbacher-anzeiger.de":
            // case "www.main-spitze.de":
            // case "www.mittelhessen.de":
            case "www.oberhessische-zeitung.de":
            case "www.wiesbadener-kurier.de":
            case "www.nw.de":
            case "www.wormser-zeitung.de":
                {
                    GM.addStyle(".loadingBanner,.adSlot {display:none!important;}");
                    breakVrmArticles();
                    setInterval(() => {if (url != null && location.href != url){GM.addStyle("div.contentWrapper.app__content.--page {display:none!important;}"); url = location.href; location.reload();}},0);
                    break;
                }
            case "www.cz.de":
                {
                    if (document.querySelector("#erasmo")){
                        GM.addStyle(".content-subscription-box,.newsletter-signup-wrapper {display:none;}");
                        document.querySelector("article").classList.remove("news-read-not-allowed");
                        site = await fetch(location.href);
                        html = await site.text();
                        parser = new DOMParser();
                        htmlDoc = parser.parseFromString(html, "text/html");
                        articleText = htmlDoc.querySelector(".field__items").innerHTML;
                        document.querySelector(".field__items").innerHTML = articleText;
                    }
                    break;
                }
            case "www.dnn.de":
            case "www.goettinger-tageblatt.de":
            case "www.haz.de":
            case "www.kn-online.de":
            case "www.ln-online.de":
            case "www.lvz.de":
            case "www.maz-online.de":
            case "www.neuepresse.de":
            case "www.op-marburg.de":
            case "www.ostsee-zeitung.de":
            case "www.paz-online.de":
            case "www.rnd.de":
            case "www.siegener-zeitung.de":
            case "www.sn-online.de":
            case "www.waz-online.de":
                {
                    if(location.href.endsWith("?outputType=valid_amp")) {
                        location.href = location.href.replace("?outputType=valid_amp","");
                    }
                    var paywall = document.querySelector('div.paywalledContent');
                    if (paywall){
                        console.log("paywall");
                        GM.addStyle('[class^="ReadProgressstyled"],[class^="ArticleContentLoaderstyled__Gradient-"],[id^="piano-home-inline-haz"],[id^="piano-lightbox-article-"],article > svg {display:none;}');
                        GM.addStyle('[class^="Adstyled__AdWrapper-sc"],[class^="Adstyled__AdWrapper-sc-"],article > svg {display:none;}');
                        GM.addStyle('[class^="HeaderWithNavBarstyled"] {position:relative !important;}');
                        GM.addStyle(".h2-pw {font-family: 'DIN Next LT Pro', Arial, Roboto, sans-serif; font-weight:700; letter-spacing:-0.25px; font-size:22px; padding-bottom:4px;}");
                        $("div[class='OUTBRAIN'").remove();
                        $("div[id^='mad_m_incontent-'").remove();
                        paywall.classList.remove(paywall.classList.item(1));
                        var articleParagraph = paywall.querySelector("div > p");
                        jsonText = document.querySelector("#fusion-metadata").innerHTML.split(/;Fusion\.globalContent.*?=/)[1];
                        jsonObj = JSON.parse(jsonText);
                        var elements = jsonObj.elements.filter(i => i.type != "ad");
                        var readAlsoIndex = elements.findIndex(i => i.text?.includes("Lesen Sie auch"));
                        if (readAlsoIndex != -1)
                            elements.splice(readAlsoIndex, 2);
                        var appAdIndex = elements.findIndex(i => i.text?.match(/Laden Sie sich jetzt hier kostenfrei unsere .*-App.* herunter:/));
                        if (appAdIndex != -1)
                            elements.splice(appAdIndex, 3);
                        appAdIndex = elements.findIndex(i => i.text?.match(/Laden Sie sich jetzt hier kostenfrei unsere .*-App.* herunter[^:]/));
                        if (appAdIndex != -1)
                            elements.splice(appAdIndex, 3);
                        articleText = [{text: articleParagraph.innerHTML},...elements.slice(1)]
                            .map(i => (i.type=="header"?`<h2 class="h2-pw ${articleParagraph.className}">`:`<p class="${articleParagraph.className}">`)
                                 + (i.text??"") + (i.type == "header"?"</h2>":"</p>")
                                 + (i.type == "image"?`<div><img alt="${i.imageInfo?.alt}" src="${i.imageInfo?.src}" width="100%"><div class=""><p class="ClTDP">${i.imageInfo?.caption}</p><p class="bIdZuO">${i.imageInfo?.credit}</p></div></div>`:"")
                                 + (i.type == "list"?"<ul>" + i.list?.items?.map(l => "<li>• " + l.text + "</li>").join("") + "</ul>":"")).join("");
                        articleParagraph.parentElement.innerHTML = articleText;

                        //Css Fixing
                        paywall.querySelectorAll('*').forEach($el => {
                            $el.style.height = "auto";
                            // $el.className='';
                            // $el.style.fontSize = "17px";
                            // $el.style.lineHeight = "26px";
                            // $el.style.fontFamily  = "Source Serif Pro, Palatino, Droid Serif, serif";
                        });
                        paywall.querySelectorAll('li').forEach($el => {
                            $el.style.fontSize = "17px";
                            $el.style.marginBottom = "0.5em";
                            $el.style.fontFamily  = "Calibri";
                        });
                        paywall.querySelectorAll('li>a').forEach($el => {
                            $el.style.color = "green";
                            $el.style.fontDecoration  = "underline";
                        });
                    }
                    break;
                }
            case "www.ksta.de":
            case "www.rundschau-online.de":
                {
                    GM.addStyle(".tm-visible,.dm-slot {display:none!important;}");
                    document.querySelector(".dm-mural.dm-paint").classList.remove("dm-mural","dm-paint");
                    break;
                }
        }
        async function breakVrmArticles(){
            url = location.href
            GM.addStyle(".div.contentWrapper.app__content.--page {display:initial!important;}");
            if (document.querySelector(".articleHeader__top .badges")){
                GM.addStyle(".quoteWrapper {display:none;}");
                document.querySelector(".storyElementWrapper__paywall > div").style.display = "none";
                document.querySelector(".storyElementWrapper__paywallContainer").classList.remove("storyElementWrapper__paywallContainer");
                document.querySelector(".storyElementWrapper__paywall").classList.replace("storyElementWrapper__paywall","storyElementWrapper");
                document.querySelector(".storyElementWrapper__paywallWrapper").classList.replace("storyElementWrapper__paywallWrapper","storyElementWrapper");
                document.querySelector(".storyElementWrapper__paywallStoryline").classList.replace("storyElementWrapper__paywallStoryline","storyElementWrapper__Storyline");
                site = await fetch(location.href);
                html = await site.text();
                parser = new DOMParser();
                htmlDoc = parser.parseFromString(html, "text/html");
                jsonText = htmlDoc.querySelector("div~script").innerText.replace(/^window\.__INITIAL_STATE__=/,"").replace(/;\(function\(\).*/,"");
                console.log(jsonText);
                jsonObj = JSON.parse(jsonText);
                articleText = jsonObj.contentPage.data.context.storylineText;

                var texts = articleText.split(/<\/p>/).map(i => i.slice(3));
                [...document.querySelectorAll(".storyElementWrapper__container > div > p:not(.multimediaIntro)")].forEach(i => {i.parentElement.parentElement.innerHTML = i.parentElement.parentElement.innerHTML.replace(/(storyElementWrapper__element)/g,"contentWrapper $1 --medium")});
                [...document.querySelectorAll(".toggleBox__content.--padding.--border")].forEach(i => {i.closest(".storyElementWrapper__container").innerHTML = i.closest(".storyElementWrapper__container").innerHTML.replace(/(style=")(background: ?linear-gradient)/g,"$1display:none;$2").replace(/(storyElementWrapper__element)/g,"contentWrapper $1 --small").replace(/(class="toggleBox__contentWrapper --medium")/g,"style=\"height:auto!important\" $1").replace(/(class="toggleBox__headline paragraph --blockIntro")/g,"style=\"display:none\" $1")});

                var paragraphs = [...document.querySelectorAll(".storyElementWrapper__container > div > p:not(.multimediaIntro) > span"),...document.querySelectorAll(".toggleBox__content.--padding.--border .infoBox__storylineElement p.--small > span")];
                paragraphs.forEach((p,i) => {
                    var cursor = 0;
                    var source = p.innerHTML;
                    if (i == 0 && source.indexOf(".") > 0 && source.indexOf(".") < 20){
                        [locationText, source] = source.split(/\. (.*)/s).filter(i => i);
                    }
                    var splittedSource = source.split(/(<.*?>)/);
                    var replaceText = texts[i];
                    var replaceTexts = [];
                    for (let splittedText of splittedSource){
                        if (splittedText.length != 0 && splittedText.slice(0,1) != "<"){
                            splittedText = replaceText.slice(cursor,cursor + splittedText.length);
                            cursor += splittedText.length;
                        }
                        replaceTexts.push(splittedText);
                    }
                    replaceText = replaceTexts.join("");
                    if (locationText != null && location.href.split("/")[3] == "lokales"){
                        var locationLinkText = document.querySelector(".storyPage__sectionLink").innerText;
                        if (locationText.length == locationLinkText.length){
                            replaceText = `${locationLinkText}. ${replaceText}`;
                        }
                    }
                    p.innerHTML = replaceText;
                });
            }
        };
    }
    async function run() {
        caesar();
    }
    async function removeADS() {
        console.log("removeADS");
        $("div[class^='Articlestyled__ArticleBodyWrapper-sc'] > svg").remove();
        $("div[class^='Adstyled__AdWrapper-sc']").remove();
    }

    function loopFunction(delay, f,callback){
        var loop = function(){
            f;
            callback();
            setTimeout(loop, delay);
        }; loop();
    };

    function insert(){
        loopFunction(100, run(),function(){
            console.time("run");
            run();
            console.timeEnd("run");
            console.log("checking for AD Stuff to Remove");
        });
        loopFunction(100, run(),function(){
            console.time("run");
            removeADS();
            console.timeEnd("run");
            console.log("checking for AD Stuff to Remove");
        });
    }
})();