commit 8f86ca2bd6579c8b663efe85105a72ca6c0f1060 Author: magnolia1234 <7676006-magnolia1234@users.noreply.gitlab.com> Date: Sat Aug 10 08:46:14 2024 +0200 Release latest diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ab20918 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020, magnolia1234 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..65fde55 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# Bypass Paywalls Clean filters + +Adblocker list which allows you to read articles from (supported) sites that implement a paywall (for a lot of sites you also need to install an userscript).\ +For some sites it will log you out (or block you to log in); caused by removing cookies or blocking general paywall-scripts. + +Disclaimer: the list doesn't support as many sites as the extension/add-on does though (and even less on iOS).\ +On iOS you can also use [Shortcuts](https://apps.apple.com/us/app/shortcuts/id915249334) app with [Unpaywall](https://www.icloud.com/shortcuts/71648f5ad34f4d8f972718e5f3621ffe) shortcut for some unsupported sites. + +### Installation + +#### adblocker filters + +Use a browser which supports extensions/add-ons and install an adblocker (like uBlock Origin or AdGuard).\ +Now add custom (content)filter (copy link): +[Bypass Paywalls Clean filters](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=bpc-paywall-filter.txt)\ +Or subscribe: +[subscribe on filterlists.com](https://filterlists.com/lists/bypass-paywalls-clean-filter) - +[subscribe for AdGuard](https://subscribe.adblockplus.org/?location=https%3A%2F%2Fgitflic.ru%2Fproject%2Fmagnolia1234%2Fbypass-paywalls-clean-filters%2Fblob%2Fraw%3Ffile%3Dbpc-paywall-filter.txt&title=Bypass%20Paywalls%20Clean%20filters) + +Brave browser has only incorporated the filterlist (many sites also need userscript): enable it in [settings](brave://adblock)\ +On Android you can use [Via Browser](https://play.google.com/store/apps/details?id=mark.via.gp) which supports custom filterlists & userscripts. + +You can also install an app like AdGuard* (on Android & iOS/macOS) or [AdLock](https://apps.apple.com/us/app/adlock-ads-blocker-privacy/id1506604517) (on iOS).\ +This way you can use it with Chrome/Firefox (on Android) or Safari (on iOS/macOS). + +\* [AdGuard Content Blocker](https://play.google.com/store/apps/details?id=com.adguard.android.contentblocker) (on Android) only works with Yandex Browser or Samsung Internet Browser when you add the filter (url) to user rules (manual update of filter required).\ +Or use [AdGuard app](https://adguard.com/adguard-android/overview.html) (from their site) which works for all apps (and automatically updates filter). + +An external app may work less effective (timing/refresh issues).\ +On iOS there may be no support for scriptlets (for removing cookies, attributes and/or classes), but works with for example AdGuard Premium (paid feature). + +#### userscripts + +Some fixes also require an app to run an additional userscript to work.\ +For example amp-redirect (also disable amp-to-html extension for these sites), unhide text/images and more. + +Example apps or extensions/add-ons you can use: + +* Android: [AdGuard app](https://adguard.com/adguard-android/overview.html) (load as extension) +* iOS: [Hyperweb](https://apps.apple.com/us/app/hyperweb/id1581824571) or [Userscripts](https://apps.apple.com/us/app/userscripts/id1463298887) +* macOS: [AdGuard app](https://adguard.com/en/adguard-mac/overview.html) +* Windows/ChromeOS: Tampermonkey [Chrome extension](https://chromewebstore.google.com/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo) or [Firefox add-on](https://addons.mozilla.org/firefox/addon/tampermonkey) + +Userscripts for different languages: + +[English (& other)](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.en.user.js) - +[Dutch](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.nl.user.js) - +[Finnish/Swedish/Danish](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fi.se.user.js) - +[French](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fr.user.js) - +[German](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.de.user.js) - +[Italian](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.it.user.js) - +[Polish](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.pl.user.js) - +[Spanish/Portugese](https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.es.pt.user.js) diff --git a/bpc-paywall-filter.txt b/bpc-paywall-filter.txt new file mode 100644 index 0000000..a78feb3 --- /dev/null +++ b/bpc-paywall-filter.txt @@ -0,0 +1,764 @@ +! Title: Bypass Paywalls Clean filter +! Expires: 1 day (update frequency) +! Description: Filters for news sites (supports less sites than the extension/add-on) +! Homepage: https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +! License: MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +! Last modified: +! Version: 4.1.1.0 + +! General + +||amplitude.com^$xmlhttprequest,third-party +||axate.io$script,third-party +||loader.*.com/prod/*/loader.min.js$script +||cdn.*.com/prod/*/loader.min.js$script +||blueconic.net^$third-party +/[a-z]{1}\d{2,3}\.\w+\.(co(m|\.uk)|net|org)\/script\.js/$script,~third-party +||cxense.com^$script,third-party,domain=~journaldemontreal.com|~journaldequebec.com|~wsj.com +||cxense.com^$script,domain=bizjournals.com,important +||ensighten.com/*/Bootstrap.js$script,third-party +||evolok.net^$third-party +||fewcents.co/*/paywall*.js$script,third-party +||hadrianpaywall.com^$third-party +.de/sub/js/pc-offer-west.js$script,~third-party +||js.matheranalytics.com^$script,third-party +||newsmemory.com?meter$third-party +||olytics.omeda.com^$third-party +||onecount.net^$third-party +||js.pelcro.com^$script,third-party +/xbuilder/experience/execute$xmlhttprequest,~third-party +||piano.io/xbuilder/experience/execute$xmlhttprequest,third-party +@@||piano.io^$domain=hbr.org|japantimes.co.jp +@@||cdn.tinypass.com/api/tinypass.min.js$script,domain=ajc.com +||api.pico.tools/client/query/*$xmlhttprequest,~third-party +||api.pico.tools/popup/null/*$xmlhttprequest,~third-party +gadget.pico.tools##+js(json-prune, locked) +||poool.fr^$third-party +||qiota.com^$xmlhttprequest,third-party +||sophi.io^$third-party +||steadyhq.com^$script,third-party +||wallkit.net/js/$script,third-party +||zephr.com/zephr-browser/$script,third-party +/arc/subs/p.min.js$script,~third-party,domain=~nzherald.co.nz +/c/assets/pigeon.js$script,~third-party +/evolok/*ev-em.min.js$script,domain=~vikatan.com +/evolok/*ev-widgets.min.js$script +/paywall/evercookie_get.js$script,~third-party +/shared-content/art/tncms/api/access.*.js$script,~third-party +/wp-content/plugins/leaky-paywall/js/leaky-paywall-cookie.js$script,~third-party +/wp-content/*/plugins/rcp-view-limit/$script,~third-party +/zephr/feature$xmlhttprequest + +||abril.com.br/*/abril-paywall/$script,~third-party +adweek.com##+js(cookie-remover, blaize_session) +ajc.com##+js(ra, class, div.story-paygate_placeholder, stay) +ajc.com##div.video-blocker +ajc.com##+js(set, window.Fusion.globalContent._id, 0) +ajc.com##+js(set, window.Fusion.globalContent.content_restrictions.content_code, 0) +alternatives-economiques.fr###temp-paywall +alternatives-economiques.fr##+js(ra, style, div[data-ae-poool], stay) +ambito.com##+js(cookie-remover, TDNotesRead) +||americanaffairsjournal.org/wp-content/mu-plugins/app/src/paywall/paywall.js$script,~third-party +apollo-magazine.com##+js(cookie-remover, blaize_session) +apollo-magazine.com,spectator.co.uk###subscribe-ribbon,div.ad-slot +artforum.com##+js(cookie-remover, /^/) +||artnet.com/paywall-ajax.php$xmlhttprequest,~third-party +artnet.com##div.article-body:style(display:block !important;) +artnet.com##div[id^="issuem-leaky-paywall-"] +asia.nikkei.com##div.tp-modal,div.tp-backdrop +asia.nikkei.com##+js(rc, tp-modal-open, body.tp-modal-open, stay) +magazine.atavist.com##+js(set-local-storage-item, /^/, $remove$) +||tonos.gjirafa.tech/init/access$xmlhttprequest,domain=atlantico.fr +||automobilwoche.de/sites/camw/files/js/js_-YBiL*.js$script,~third-party +axios.com##div[data-cy="pro-paywall"],div[class^="Modal_paywall"],div[class^="Modal_cta"] +axios.com##+js(ra, style, html[style], stay) +berlingske.dk##div#paywall +bhaskar.com##div.paywallBlockedContent~div:remove() +bhaskar.com##article div:empty +bhaskar.com##+js(ra, class, div.paywallBlockedContent, stay) +bizjournals.com##+js(ra, style, .paywall-content[style], stay) +bizjournals.com##+js(ra, style, html, stay) +bizjournals.com##+js(rc, is-overlaid, html.is-overlaid, stay) +bizjournals.com##+js(rc, is-overlaid, body.is-overlaid, stay) +bizjournals.com##+js(ra, inert, div#__nuxt[inert]) +bizjournals.com##div[id^="headlessui-dialog-"],div.sheet-overlay +! bloomberg.com: disable Dark Reader extension +||cm.bloomberg.com^$xmlhttprequest,~third-party +||assets.bwbx.io/s3/javelin/public/javelin/js/foundation/transporter/foundation_transporter-*.js$script,domain=bloomberg.com +bloomberg.com##+js(ra, data-paywall-overlay-status, body[data-paywall-overlay-status], stay) +bloomberg.com##div[id^="fortress-"] +bloomberg.com##+js(set-local-storage-item, history, $remove$) +||bloombergadria.com/*/news/$inline-script +bloombergadria.com##+js(ra, style, article[style]) +||meter.bostonglobe.com/js/meter.js$script,~third-party +/\.businessinsider\.com\/chunks\/scripts\/\d.+\.js/$script,domain=businessinsider.com,~third-party +businessinsider.jp##+js(ra, hidden, div.piano-paywall-container[hidden]) +||businessoffashion.com/arc-platform-proxy.js$script,~third-party +||businesspost.ie/api/tinypass.min.js$script,~third-party +||cambiocolombia.com/_next/static/chunks/1036.*.js$script,~third-party +cartacapital.com.br##+js(rc, contentSoft, div.contentSoft) +cartacapital.com.br##div[class^="s-freemium"],div.maggazine-add +cen.acs.org##+js(cookie-remover, cenLoginP) +cen.acs.org##.meteredBar +challenges.fr##div.amorce.manual +challenges.fr##+js(ra, class|hidden, .user-paying-content) +charliehebdo.fr##+js(ra, style, div.ch-paywalled-content) +charliehebdo.fr##div#poool-widget +||cdn.piano.io/api/tinypass.min.js$script,domain=clicrbs.com.br +||clicrbs.com.br/paywall-api/count/$xmlhttprequest,~third-party +cnbc.com##div.ArticleGate-proGate +cnbc.com##+js(ra, class|hidden, span[hidden]) +cnn.com##div[data-component-id="subwall"] +cnn.com##+js(ra, style, html[style], stay) +cnn.com##+js(ra, style, body[style], stay) +cnn.com##+js(set-local-storage-item, /reg_?wall/i, $remove$) +columbian.com##+js(cookie-remover, blaize_session) +chronicle.com,philanthropy.com##div[data-content-summary] +chronicle.com,philanthropy.com##+js(ra, hidden|ppajfrg86rdhoubtirllb2bf1xsaknzus, div[class~="contentBody" i][hidden], stay) +! cicero.de: url+?amp +cicero.de##+js(rc, teasered-content, .teasered-content) +cicero.de##.teasered-content-fader +citywire.com##+js(rc, article-locked, .article-locked) +citywire.com##+js(rc, m-article--locked, .m-article--locked) +citywire.com##+js(rc, m-media-container--locked, .m-media-container--locked) +citywire.com##+js(rc, m-article__body--locked, .m-article__body--locked) +citywire.com##registration-widget,div.alert--locked +||zonda.clarin.com^$script,domain=clarin.com|lavoz.com.ar|ole.com.ar +||codesports.com.au/*/news-story/$inline-script +||commentary.org/*/js/dg-locker-public.js$script,~third-party +||connaissancedesarts.com/wp-content/*/vendor/iptools-jquery-inview.min.js$script,~third-party +||paywall.correiodopovo.com.br$script,~third-party +||corriereobjects.it/*/js/_paywall.sjs$script,domain=corriere.it +||cronista.com/files/cachefiles/987*.js$script,~third-party +csmonitor.com##+js(set-local-storage-item, /^/, $remove$) +csmonitor.com##.paywall +cyclingnews.com##+js(rc, paywall-locker, div.paywall-locker) +dagsavisen.no##+js(set, window.Fusion.globalContent.content_restrictions.content_code, 0) +dailywire.com###post-body-text > div > div:style(height: auto !important;) +||denik.cz/*.html$inline-script +discovermagazine.com##body:style(overflow: auto !important;) +discovermagazine.com##div.fIkXwQ,div[style*="fadeIn"],div[role="button"][aria-label="Dismiss Dialog"] +||dn.se/check-paywall-v2.js,~third-party +||dnevnik.bg/api/auth*/callback/credentials$xmlhttprequest,~third-party +||dwell.com/article/*?rel=plus$inline-script +eastwest.eu##+js(ra, style, .paywall) +eastwest.eu##+js(rc, paywall, .paywall) +eastwest.eu###testo_articolo > p, #testo_articolo > h3 +eastwest.eu##.offerta_abbonamenti +||economist.com/latest/wall-ui.js$script,~third-party +||editorialedomani.it/pelcro.js$script,~third-party +elespanol.com##+js(rc, content-not-granted-paywall, div.content-not-granted-paywall) +elespanol.com##div.full-suscriptor-container +elconfidencial.com##+js(rc, newsType__content--closed, div.newsType__content--closed) +||elobservador.com.uy/shares$xmlhttprequest,~third-party +||elpais.com.uy/user/authStatus$script,~third-party +||verne.elpais.com/*.html$inline-script +elpais.com##div#ctn_freemium_article:remove() +elpais.com##div#ctn_premium_article:remove() +eltiempo.com##+js(rc, modulos, div.modulos) +||eltribuno.com/scripts/Bellhop/dist/bellhop.min.js$script,~third-party +em.com.br##+js(rc, compress-text, .div.compress-text) +enotes.com##section#enotes-paywall +enotes.com##+js(ra, class, div.u-paywall) +||estadao.com.br/paywall/$script,~third-party +||estadao.com.br/access.js$script,~third-party +etc.se##+js(rc, teaser-section, section.teaser-section) +etc.se##+js(rc, hidden, section.prose-feature .hidden) +etc.se##article section.font-sans +euobserver.com##+js(rc, show, div.membership-upsell.show) +exame.com##+js(set-local-storage-item, pywllcount, $remove$) +fieldandstream.com##div[class^="mailmunch-"] +fieldandstream.com##+js(ra, class, html[class]) +||financialexpress.com/*/min/premiumStoryContent.js$script,~third-party +financialexpress.com##+js(rc, paywall, .paywall) +financialexpress.com##div.pcl-wrap +||folha.uol.com.br/paywall/js/$script,~third-party +||paywall.folha.uol.com.br^$script,xmlhttprequest,~third-party +forbes.com##+js(ra, class, html[class], stay) +forbes.com##+js(ra, class, body[class], stay) +forbes.com.au##+js(cookie-remover, blaize_session) +||foreignaffairs.com/modules/custom/fa_paywall_js/js/paywall.js$script,~third-party +||foreignaffairs.com/sites/default/files/assets/css/css_*.css*delta=0$stylesheet,~third-party +foreignaffairs.com##.article-dropcap:style(height: auto !important;) +foreignaffairs.com##.paywall,.loading-indicator,.messages--container--bottom +foreignpolicy.com##body:not(.is-fp-insider) div.content-ungated +foreignpolicy.com##+js(rc, content-gated, body:not(.is-fp-insider) div.content-gated.content-gated--main-article) +fortune.com##+js(ra, class, div.paywallActive) +foxnews.com##+js(ra, class, div[class*="gated-overlay"]) +foxnews.com##div.article-gating-wrapper +||ftm.eu/js/routing$script,~third-party +||ftm.nl/js/routing$script,~third-party +ftm.eu,ftm.nl##+js(rc, foldable, div.foldable) +ftm.eu,ftm.nl##div.banner-pp +groene.nl##+js(cookie-remover, rlist) +harpers.org##+js(cookie-remover, hr_session) +||harpers.org/wp-content/themes/timber/static/js/modal*.js +||cdn.tinypass.com/api/tinypass.min.js$script,domain=hbr.org +||hilltimes.com/*/js/loadingoverlay/loadingoverlay.min.js$script,~third-party +hindustantimes.com##.freemium-card,.closeStory +hindustantimes.com##+js(rc, freemiumText, .freemiumText) +hindustantimes.com##+js(rc, open-popup, body.open-popup) +ilfattoquotidiano.it##+js(rc, cropped, article[id].cropped) +ilfattoquotidiano.it##div#ifq-paywall-metered +ilsole24ore.com##+js(ra, style, body[style], stay) +ilsole24ore.com##div.s24_adb +||inc42.com/wp-admin/admin-ajax.php|$xmlhttprequest,~third-party +indianexpress.com##+js(ra, style, div.ev-meter-content[style]) +indianexpress.com##+js(ra, class, p.first_intro_para) +indianexpress.com##ev-engagement +||liveapp.inews.co.uk/*/content.html$inline-script +inkl.com##+js(ra, class, div.paywall) +inkl.com##div.gradient-container +interestingengineering.com##+js(rc, blurFilter, div.blurFilter, stay) +interestingengineering.com##div.paywall-main-wrapper:remove() +||irishexaminer.com/pu_examiner/scripts/engage/$script,~third-party +japantimes.co.jp##+js(cookie-remover, xbc) +journaldemontreal.com,journaldequebec.com##+js(rc, composer-content, div.article-main-txt.composer-content) +journaldunet.com##div.reg_wall +journaldunet.com##+js(ra, style, div.entry_reg_wall[style]) +||jpost.com/js/js_article.min.js$script,~third-party +||internazionale.it/templates_js_ajax.inc.php$xmlhttprequest,~third-party +krautreporter.de##.js-article-paywall,.js-paywall-divider,#steady-checkout +krautreporter.de##+js(rc, blurred, .blurred) +krautreporter.de##+js(rc, json-ld-paywall-marker, .json-ld-paywall-marker, stay) +ksta.de,rundschau-online.de##+js(cookie-remover, anon_cookie) +ksta.de,rundschau-online.de##+js(ra, style, div[data-article-content], stay) +ksta.de,rundschau-online.de##div.dm-paywall-wrapper,div.dm-slot,div.dm-zephr-banner +||cdn.tinypass.com/api/tinypass.min.js$script,domain=kurier.at +kurier.at##+js(ra, class|style, div.paywall) +kurier.at##div#cfs-paywall-container +||glanacion.com/*/metering/*.js$script,domain=lanacion.com.ar +lanacion.com.ar##+js(cookie-remover, /^metering_arc/) +lanacion.com.ar##+js(set-local-storage-item, /^/, $remove$) +||latimes.com/meteringjs/$script,~third-party +||ev.lavanguardia.com$xmlhttprequest,~third-party +lavanguardia.com,mundodeportivo.com##span.content-ad,span.hidden-ad,span.ad-unit,div.ad-div +ledevoir.com##+js(cookie-remover, pw6) +legrandcontinent.eu##+js(rc, paywall|pw|softwall, body) +lejdd.fr,parismatch.com,public.fr###poool-container,#poool-widget-content,#poool-widget,.forbidden +lejdd.fr,parismatch.com,public.fr##+js(ra, data-poool-mode, .cnt[data-poool-mode="hide"]) +||livemint.com/lm-img/subscription/$script,~third-party +livemint.com##+js(rc, paywall, div.paywall) +labusinessjournal.com##+js(cookie-remover, /^/) +labusinessjournal.com###css-only-modals +||lavoz.com.ar/sites/*/paywall/*/pw.js$script,third-party +letelegramme.fr##+js(rc, tlg-paywalled, div.tlg-paywalled) +loebclassics.com##+js(cookie-remover, /^/) +||cdn.loeildelaphotographie.com/wp-content/*/hague-child/js/script-$script,~third-party +loeildelaphotographie.com##+js(ra, class, .paywall) +loeildelaphotographie.com##.premium-pic-box,.membership-promo-container,.login_form_litle +loeildelaphotographie.com##+js(ra, style, img[style*="blur"]) +||lrb.co.uk$inline-script +marketwatch.com##+js(cookie-remover, cX_P) +||medscapestatic.com/*/medscape-library.js$script,domain=medscape.com +||wbmdstatic.com/*/chunk-vendors.*.js$script,domain=medscape.com +medscape.com##.AdUnit,div[id^="ads-"] +mexiconewsdaily.com##+js(rc, tdb-block-inner, body.single div.td-post-content > div.tdb-block-inner) +||motorsportmagazine.com/wp-admin/admin-ajax.php$xmlhttprequest,~third-party +||ev.mundodeportivo.com$xmlhttprequest,~third-party +mv-voice.com##+js(cookie-remover, /^/) +||cdn.registerdisney.go.com$script,domain=nationalgeographic.com +nautil.us##+js(cookie-remover, /^(arc|sfa)$/) +||loader.newsday.com$script,~third-party +newsday.com##+js(ra, class, html[class]) +newrepublic.com##div.article-scheduled-modal +||blink.net/*/blink-sdk.js$script,domain=newrepublic.com|thebaffler.com +||townnews.com/*/tncms/*/scripts/engage.min.js$script,third-party,domain=nola.com|shreveportbossieradvocate.com|theadvocate.com +nrc.nl##+js(cookie-remover, counter) +||nrc.nl/paywall-api/api/zephr$xmlhttprequest,~third-party +nrc.nl##div[id$="modal__overlay"],div.header__subscribe-bar,div.banner +||nsctotal.com.br/wp-content/themes/nsctotal/js/paywall.js$script,~third-party +||nybooks.com/wp-admin/admin-ajax.php$xmlhttprequest,~third-party +nybooks.com##+js(rc, paywall-article, .paywall-article) +nybooks.com##div.toast-cta +||nysun.com/zephr/$xmlhttprequest,~third-party +||meter-svc.nytimes.com/meter.js$xmlhttprequest,~third-party +||nytimes.com/svc/onsite-messaging/query$xmlhttprequest,~third-party +||mwcm.nyt.com/$script,domain=nytimes.com +nytimes.com##div[data-testid="inline-message"],div[id^="ad-"],div#dock-container,div.pz-ad-box +||cooking.nytimes.com/api/*/access$xmlhttprequest,~third-party +||nzherald.co.nz/sales/public/v*/entitlements$xmlhttprequest,~third-party +nzherald.co.nz##+js(set, window.Fusion.globalContent.isPremium, false) +nzz.ch,themarket.ch##+js(rc, nzzinteraction, .nzzinteraction) +/\/observador\.pt\/(\d{4}|especiais|opiniao)\//$inline-script,domain=observador.pt +paloaltoonline.com##+js(cookie-remover, /^/) +||pastemagazine.com/wp-content/cache/autoptimize/js/autoptimize_*.js$script,~third-party +pb.pl##+js(ra, class, section.o-article-content) +pb.pl##div.o-piano-template-loader-box +pourleco.com##+js(ra, style, div[class*="article-"][style]) +pourleco.com##div[data-pleco-poool^="paywall"],div[data-pleco-transition="fade"] +philosophynow.org##+js(cookie-remover, /^/) +profil.at##+js(ra, class|style, div.paywall) +profil.at##div#cfs-paywall-container,div.consentOverlay +||kinja-static.com/assets/*/regwalled-content.*.js$script,domain=qz.com +||reviewjournal.com/wp-content/plugins/*/loader_prod.min.js$script,~third-party +||revistaoeste.com/wp-content/*/js/app.*.js$script,~third-party +||revistaoeste.com/revista/$inline-script +revistaoeste.com##+js(ra, class, div.loading_content) +revistaoeste.com##+js(rc, expandable, div.expandable) +revistaoeste.com##svg.spinner-eclipse +/\.rugbypass\.com\/plus\/\w/$inline-script,domain=rugbypass.com +rugbypass.com##.plus-article-offer +rugbypass.com##+js(rc, premium-fold-bottom, .premium-fold-bottom) +rugbypass.com##+js(rc, fade, .fade) +scholastic.com##+js(ra, class, body.modal-open, stay) +scholastic.com##div.paywallModalElement,div.modal-backdrop +schwaebische.de##+js(ra, style, body[style], stay) +science.org##div.alert-read-limit +science.org##+js(rc, alert-read-limit__overlay, body.alert-read-limit__overlay, stay) +sciencenews.org##+js(cookie-remover, blaize_session) +sciencesetavenir.fr##div.amorce.manual +sciencesetavenir.fr##+js(ra, class|hidden, .user-paying-content) +||scientificamerican.com/api/tinypass.min.js$script,~third-party +scientificamerican.com##+js(cookie-remover, article_meter) +scotsman.com,yorkshirepost.co.uk##+js(rc, premium|no-entitlement, div.premium.no-entitlement) +||seattletimes.com/wp-content/*/st-advertising-bundle.js$script,~third-party +||seattletimes.com/wp-content/*/st-user-messaging-main-bundle.js$script,~third-party +sfstandard.com##+js(cookie-remover, zephr-session) +sfstandard.com##div.sticky +slideshare.net##+js(rc, limit-overlay, .limit-overlay) +slideshare.net##+js(set-local-storage-item, /^/, $remove$) +sofrep.com##+js(cookie-remover, sofrep_news_ids) +sofrep.com##+js(ra, class, div.paywall) +sofrep.com##+js(rc, fader, div.fader) +sofrep.com##div.non-paywall,div#paywall_wrap +spektrum.de##+js(rc, pw-premium, article.pw-premium) +spglobal.com##+js(cookie-remover, count) +staradvertiser.com##div.fade +staradvertiser.com##+js(ra, style, div#hsa-paywall-content[style]) +staradvertiser.com##+js(rc, overflow-hidden, body.overflow-hidden) +startribune.com##div.modal-backdrop +startribune.com##body[class]:style(overflow: auto !important; position: static !important;) +study.com##+js(ra, class, div.faded-content) +study.com##+js(ra, class, div.hidden[ng-non-bindable]) +study.com##div.article-cutoff-div +||suomensotilas.fi/wp-content/plugins/epflpw/js/pw.js$script,~third-party +suomensotilas.fi##+js(rc, epfl-pw-obscured, div.epfl-pw-obscured) +||telegraph.co.uk/martech/js/$script,~third-party +tes.com##+js(cookie-remover, /tg_paywall/) +tes.com##+js(ra, class, div.tg-paywall-body-overlay) +tes.com##div.js-paywall-info,div.tg-paywall-message +||texasmonthly.com/script.js$script,~third-party +texasmonthly.com##div.promo-in-body +the-scientist.com##+js(rc, paywall, div.paywall) +the-scientist.com##div.gated-fader,div#Modal +||theartnewspaper.com/_next/static/chunks/pages/access-allowed-*.js$script,~third-party +||theatlantic.com/zephr/decision-engine$xmlhttprequest,~third-party +theatlantic.com##aside#paywall,div[class^="LostInventoryMessage_"] +||cloudfunctions.net/gated-countView$xmlhttprequest,domain=thediplomat.com +thediplomat.com##+js(rc, h-96, article>section.h-96) +thediplomat.com##aside.bg-gradient-to-b +theglobeandmail.com##+js(set, window.Fusion.globalContent._id, 0) +thehindu.com,thehindubusinessline.com##+js(set, window.Adblock, false) +thehindu.com,thehindubusinessline.com##+js(set, window.isNonSubcribed, false) +theimpression.com##+js(rc, blureffect, div.blureffect) +theimpression.com##div#modalpostsubscribe +||theintercept.com$inline-script +thelampmagazine.com##+js(ra, class, div.paywall-gradient) +thelampmagazine.com##section.p-8 +||thenewatlantis.com/*/thenewatlantis/js/gate.js$script,~third-party +||thenewatlantis.com/*/thenewatlantis/js/donate.js$script,~third-party +theneweuropean.co.uk##div[data-show-fade-on-noaccess],div[data-show-subs-blocked] +theneweuropean.co.uk##+js(ra, data-show-has-access, div[data-show-has-access]) +thepointmag.com##+js(cookie-remover, monthly_history) +thepointmag.com##div.overlay,div#tpopup- +thequint.com##div.zsqcu +thequint.com##+js(ra, class|style, div#story-body-wrapper, stay) +||thesaturdaypaper.com.au/sites/all/modules/custom/node_meter/pw.js$~third-party +/\.thesaturdaypaper\.com\.au\/.+\/(\w+-){3,}/$inline-script,domain=thesaturdaypaper.com.au +thesaturdaypaper.com.au##div.paywall-hard-always-show +||thespectator.com/wp-content/themes/spectator/js/tinypass.js$script,~third-party +thespectator.com##+js(rc, ev-meter-content-class, div.ev-meter-content-class) +thetimes.com##html:style(overflow: auto !important;) +thetimes.com##body:style(overflow: auto !important;) +theweek.com##+js(rc, paywall-locker, div.paywall-locker) +theweek.com##div.kiosq-main-layer +thewrap.com##+js(cookie-remover, blaize_session) +timeshighereducation.com##+js(rc, paywall-fade, div.paywall-fade) +timeshighereducation.com##div.paywall-active +tt.com##+js(rc, exclusive-elem, .exclusive-elem) +tt.com##div.adblock-warning +unherd.com##+js(ra, id, div#premiumcontent) +unherd.com##div#premiumpreview +||news.google.com/swg/_/api/v1/publication/$xmlhttprequest,domain=vice.com +/\.vn\.at\/.+\/\d{4}\//$inline-script,domain=vn.at +||washingtonpost.com/subscribe/static/tetro-client/fusion/tetro.min.js$script,~third-party +||account.winnipegfreepress.com/api/v*/auth/identify$xmlhttprequest,~third-party +winnipegfreepress.com##.billboard-ad-space,.ad,.article-ad,.fixed-sky + +! Advance Local +al.com,cleveland.com,lehighvalleylive.com,masslive.com,mlive.com,nj.com,oregonlive.com,pennlive.com,silive.com,syracuse.com##+js(set, window.adiData.entryTags, 0) + +! Australian Community Media +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(rc, subscribe-truncate, .subscribe-truncate) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(rc, subscriber-hider, .subscriber-hider) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(rc, hidden, div.flex-col div.hidden, stay) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(ra, style, html[style], stay) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(ra, style, body[style], stay) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##+js(ra, class, div[class^="gradient-mask-"], stay) +bendigoadvertiser.com.au,bordermail.com.au,canberratimes.com.au,centralwesterndaily.com.au,dailyadvertiser.com.au,dailyliberal.com.au,examiner.com.au,illawarramercury.com.au,newcastleherald.com.au,northerndailyleader.com.au,standard.net.au,theadvocate.com.au,thecourier.com.au,westernadvocate.com.au##div.blocker,.story-generic__iframe,div.transition-all,div[id^="headlessui-dialog"] + +! Arizent +accountingtoday.com,americanbanker.com,benefitnews.com,bondbuyer.com,dig-in.com,financial-planning.com,nationalmortgagenews.com##+js(set, window.contentGating.ungate, true) + +! Condé Nast +/\.com\/[-\w]+/$script,~third-party,domain=architecturaldigest.com|bonappetit.com|cntraveler.com|epicurious.com|gq.com|newyorker.com|vanityfair.com|vogue.com|wired.com +/www\.vogue\.co\.uk\/[-\w]+/$script,~third-party +||voguebusiness.com/journey/compiler/build-*.js$script,~third-party +voguebusiness.com##+js(cookie-remover, userId) + +! Crain Communications +.com/profiles/*/crain_pelcro_user.js$script,~third-party,domain=360dx.com|adage.com|chicagobusiness.com|crainscleveland.com|crainsdetroit.com|crainsgrandrapids.com|crainsnewyork.com|genomeweb.com|modernhealthcare.com|plasticsnews.com|precisionmedicineonline.com|sustainableplastics.com|tirebusiness.com|utech-polyurethane.com +.com/*/js_$script,~third-party,domain=pionline.com|rubbernews.com +pionline.com,rubbernews.com##+js(ra, class, body[class], stay) +european-rubber-journal.com##+js(rc, truncated, div.truncated) +european-rubber-journal.com##div.article-overlay,div.gradient +modernhealthcare.com##+js(rc, sponsored-article, div.sponsored-article) + +! GEDI.it sites +||huffingtonpost.it/*/news/$inline-script +||lastampa.it/*/news/$inline-script +huffingtonpost.it,lastampa.it##+js(cookie-remover, blaize_session) +huffingtonpost.it,lastampa.it##aside#widgetDP,div[id^="adv"] +||scripts.repubblica.it/pw/pw.js$script,domain=italian.tech|moda.it +italian.tech,moda.it##div#ph-paywall:remove() +italian.tech,moda.it##+js(ra, style, div#article-body, stay) + +! Groupe La Dépêche +centrepresseaveyron.fr,journaldemillau.fr,ladepeche.fr,lindependant.fr,midilibre.fr,nrpyrenees.fr,petitbleu.fr,rugbyrama.fr##+js(ra, style|data-state, div.p402_premium) +centrepresseaveyron.fr,journaldemillau.fr,ladepeche.fr,lindependant.fr,midilibre.fr,nrpyrenees.fr,petitbleu.fr,rugbyrama.fr##div.paywall + +! Groupe SudOuest.fr +sudouest.fr,charentelibre.fr,larepubliquedespyrenees.fr##div.article-premium-footer,div.footer-premium,div.article-body-wrapper.visible-not-premium,div.pub,div.ph-easy-subscription +sudouest.fr,charentelibre.fr,larepubliquedespyrenees.fr##+js(rc, visible-premium, div.visible-premium) + +! Groupe Nice-Matin +||nicematin.com/build/js/viewpay.*.js$script,domain=monacomatin.mc|nicematin.com|varmatin.com + +! Grupo El Comercio +||diariocorreo.pe/pf/dist/engine/react.js$script,~third-party +||elcomercio.pe/pf/dist/engine/react.js$script,~third-party +||gestion.pe/pf/dist/engine/react.js$script,~third-party +diariocorreo.pe,elcomercio.pe,gestion.pe##+js(ra, class|style, .paywall) +diariocorreo.pe,elcomercio.pe,gestion.pe##+js(rc, story-contents--fade, p.story-contents--fade) +diariocorreo.pe,elcomercio.pe,gestion.pe##div[class^="content_gpt"] + +! Grupo El Mercurio +||elmercurio.com/assets/js/merPramV2.js$script,~third-party +||elmercurio.com/assets/js/vendor/modal.js$script,~third-party +||emol.cl/assets/js/merPramV2.js$script,domain=elmercurio.com +||emol.cl/assets/js/vendor/modal.js$script,domain=elmercurio.com +elmercurio.com##+js(rc, lessreadmore, article.lessreadmore, stay) +elmercurio.com##div[id*="bt_readmore_"] +||australvaldivia.cl/impresa/*/assets/vendor.js$script,~third-party +||mercuriovalpo.cl/impresa/*/assets/vendor.js$script,~third-party +||pasedigital.cl/API/User/Status$script,domain=australvaldivia.cl|mercuriovalpo.cl + +! Grupo Prensa Ibérica +diaridegirona.cat,diariocordoba.com,diariodeibiza.es,diariodemallorca.es,elcorreogallego.es,elcorreoweb.es,eldia.es,elperiodico.com,elperiodicodearagon.com,elperiodicoextremadura.com,elperiodicomediterraneo.com,epe.es,farodevigo.es,informacion.es,laopinioncoruna.es,laopiniondemalaga.es,laopiniondemurcia.es,laopiniondezamora.es,laprovincia.es,levante-emv.com,lne.es,mallorcazeitung.es,regio7.cat,superdeporte.es##+js(ra, class, div.ft-helper-closenews, stay) + +! Gruppo SAE +gazzettadimodena.it,gazzettadireggio.it,iltirreno.it,lanuovaferrara.it,lanuovasardegna.it##+js(cookie-remover, /__mtr$/) +gazzettadimodena.it,gazzettadireggio.it,iltirreno.it,lanuovaferrara.it,lanuovasardegna.it##div.MuiSnackbar-root + +! Hearst Communications (magazines) +.com/_assets/jam/$script,~third-party,domain=bicycling.com|cosmopolitan.com|countryliving.com|delish.com|elle.com|elledecor.com|esquire.com|goodhousekeeping.com|harpersbazaar.com|housebeautiful.com|menshealth.com|oprahdaily.com|popularmechanics.com|prevention.com|roadandtrack.com|runnersworld.com|townandcountrymag.com|womenshealthmag.com + +! Il Messaggero (+ regional) +||cedscdn.it/*/PaywallMeter.js$script,domain=corriereadriatico.it|ilgazzettino.it|ilmattino.it|ilmessaggero.it|quotidianodipuglia.it +||cedsdigital.it/*/PaywallMeter.js$script,domain=corriereadriatico.it|ilgazzettino.it|ilmattino.it|ilmessaggero.it|quotidianodipuglia.it +corriereadriatico.it,ilgazzettino.it,ilmattino.it,ilmessaggero.it,quotidianodipuglia.it##+js(ra, subscriptions-section, [subscriptions-section="content"]) +corriereadriatico.it,ilgazzettino.it,ilmattino.it,ilmessaggero.it,quotidianodipuglia.it##[subscriptions-section="content-not-granted"] + +! Industry Dive +||*dive.com/static/js/dist/contentGate.bundle.js$script,~third-party +.com/static/js/dist/contentGate.bundle.js$script,~third-party,domain=cfo.com|pharmavoice.com|proformative.com|socialmediatoday.com + +! Landwirtschaftsverlag +profi.de,topagrar.com,wochenblatt.com##+js(ra, class|style, div.paywall-full-content[style]) +profi.de,wochenblatt.com##div.m-paywall__textFadeOut,div[id^="paymentprocess-"] +||topagrar.com/*/news/$inline-script +topagrar.com##div.paywall-package + +! Madsack sites +cz.de,dewezet.de,dieharke.de,dnn.de,gnz.de,goettinger-tageblatt.de,haz.de,kn-online.de,landeszeitung.de,ln-online.de,lvz.de,maz-online.de,ndz.de,neuepresse.de,op-marburg.de,ostsee-zeitung.de,paz-online.de,remszeitung.de,rga.de,rnd.de,saechsische.de,siegener-zeitung.de,szlz.de,sn-online.de,solinger-tageblatt.de,tah.de,torgauerzeitung.de,waz-online.de##+js(set, window.Fusion.globalContent.isPaid, false) + +! Maine Trust for Local News +||bc.*.com/script.js$script,~third-party,domain=centralmaine.com|pressherald.com|sunjournal.com + +! McClatchy Group +||mcclatchy.com/mcc-paywall.js$script,third-party + +! Mediahuis Belgie +/extra/assets/resources/js/zephrIntegration.js$script,~third-party,domain=gva.be|hbvl.be|nieuwsblad.be|standaard.be + +! Mediahuis Noord +||ndcmediagroep.nl/js/evolok/$script,third-party +.nl/_/zh/worker$xmlhttprequest,~third-party + +! MediaNews Group & Tribune Publishing Company +.com/wp-content/plugins/loader-wp/static/loader.min.js$script,~third-party +bostonherald.com,denverpost.com,eastbaytimes.com,mercurynews.com,ocregister.com,pressenterprise.com,sandiegouniontribune.com,twincities.com##+js(ra, subscriptions-section, [subscriptions-section="content"]) +bostonherald.com,denverpost.com,eastbaytimes.com,mercurynews.com,ocregister.com,pressenterprise.com,sandiegouniontribune.com,twincities.com##[subscriptions-section="content-not-granted"] + +! Motor Presse Stuttgart +.de/thenewsbar/config/$xmlhttprequest,~third-party,domain=aerokurier.de|auto-motor-und-sport.de|flugrevue.de|motorradonline.de|womenshealth.de + +! NHST Media Group +||subscription-static-global.nhst.tech$script,domain=tradewindsnews.com + +! Persgroep +/temptation/resolve$xmlhttprequest,~third-party,domain=demorgen.be|flair.nl|humo.be|libelle.nl|margriet.nl|parool.nl|trouw.nl|volkskrant.nl +||temptation.*/temptation.js$script,~third-party,domain=demorgen.be|flair.nl|humo.be|libelle.nl|margriet.nl|parool.nl|trouw.nl|volkskrant.nl +@@||myprivacy-static.dpgmedia.net/consent.js$script,third-party +@@/wrapperMessagingWithoutDetection.js$script,~third-party,domain=demorgen.be|flair.nl|humo.be|libelle.nl|margriet.nl|parool.nl|trouw.nl|volkskrant.nl + +! DPG ADR (no scroll) +||temptation.*/temptation.js$script,~third-party,domain=ad.nl|bd.nl|bndestem.nl|destentor.nl|ed.nl|gelderlander.nl|pzc.nl|tubantia.nl|hln.be + +! Private Media Australia +crikey.com.au,smartcompany.com.au,themandarin.com.au##+js(cookie-remover, blaize_session) + +! Ringier Axel Springer Polska +auto-swiat.pl,businessinsider.com.pl,forbes.pl,komputerswiat.pl,newsweek.pl,onet.pl##+js(ra, class|style, div.contentPremium[style]) +businessinsider.com.pl##div#content-premium-offer + +! Roularta Media Groep +||artsenkrant.com/js/responsive/rmgModal.js$script,~third-party +||artsenkrant.com/js/responsive/rmgPaywall.js$script,~third-party +artsenkrant.com##div.article-body > p +artsenkrant.com##+js(ra, class, div.article-body > div) +artsenkrant.com##+js(rc, locked, body.locked) +artsenkrant.com,femmesdaujourdhui.be,flair.be,knack.be,kw.be,levif.be,libelle.be##div[id*="wall-modal"] +artsenkrant.com,femmesdaujourdhui.be,flair.be,knack.be,kw.be,levif.be,libelle.be##+js(ra, class|style, html, stay) +beleggersbelangen.nl##+js(rc, no-account, div.no-account) +beleggersbelangen.nl##+js(ra, style, div.content-inner[style]) +beleggersbelangen.nl##div.unlimited-access +!#if (env_firefox) +/\.(femmesdaujourdhui|flair|knack|levif|libelle)\.be\/.+\/(\w+-){2,}/$inline-script +!#endif + +! Tamedia.ch Group +24heures.ch,bazonline.ch,derbund.ch,tagesanzeiger.ch,tdg.ch##+js(cookie-remover, xbc) + +! TechTarget sites +computerweekly.com,lemagit.fr,techtarget.com##+js(rc, paywall, div.paywall, stay) +computerweekly.com,lemagit.fr,techtarget.com##p#firstP,div#inlineRegistrationWrapper + +! The Epoch Times sites (main + cz|de|fr|il|jp|ro) +||theepochtimes.com/rules/get$xmlhttprequest,~third-party +||epochbase.com/libs/paywall*.js$script,third-party +||epochbase.com/rules/get$xmlhttprequest,third-party +||epochbase.eu/rules/get$xmlhttprequest,third-party +/\/epoch\.org\.il\/.+\/\d{5,}\//$inline-script,domain=epoch.org.il + +! additional adblocker-fix +||flowerstreatment.com^$third-party +||guidecent.com^$script,third-party +||memberstack.com/scripts/v*/memberstack.js$script,third-party +||assets.guim.co.uk/assets/SignInGate*.js$script,domain=theguardian.com +theguardian.com##[name="SlotBodyEnd"],div[data-cy="contributions-liveblog-epic"] +||btmessage.com/script/rlink.js$script,domain=telegraaf.nl + +@@||consentmanager.net$script,third-party +#@#.cmpwrapper +@@||sdk.privacy-center.org^$script,third-party +@@/wrapperMessagingWithoutDetection.js$script,~third-party,domain=handelsblatt.com +!##div#didomi-host +##+js(rc, didomi-popup-open, body.didomi-popup-open) + +! flip-pay +||flip-pay.com/*/flip-pay.js$script,third-party,domain=clareecho.ie|thedailymash.co.uk +clareecho.ie##+js(rc, td-post-content, div.td-post-content) + +! custom sites +.com/webfiles/*/js/metering.js$script,third-party,domain=hbook.com|libraryjournal.com|slj.com +20minutes.fr##+js(rc, qiota_reserve, div.qiota_reserve) +||20minutes.fr/v-ajax/subscribe-modal$xmlhttprequest,~third-party +aaii.com##+js(rc, fadeout, .fadeout) +aaii.com##.greybox-signup +aftenposten.no##div.hyperion-css-1cc2qe9,div[class^="advertory-"],button[aria-controls="summary-details"] +aftenposten.no##body:style(overflow: auto !important) +aftenposten.no##+js(ra, class, div#summary-details) +amboss.com##+js(cookie-remover, ssobma) +amboss.com##div#optly-remaining-articles-banner,div[class^="InfoBanner_InfoBanner"] +||arktimes.com/wp-content/plugins/newspack-plugin/dist/memberships-gate-metering.js$script,~third-party +||artsprofessional.co.uk/*/js/content_paywall.js$script,~third-party +||atribuna.com.br/assets/js-v*/story.js$script,~third-party +babi.sh##+js(ra, style, div[style*="filter:blur"], stay) +babi.sh##+js(ra, style, div[style*="; overflow: hidden"][style*="; height:"], stay) +babi.sh##div[style="width: 100%; opacity: 1; transform: none;"] +bisnow.com##+js(ra, style, div.story-container > p[style], stay) +bisnow.com##div.storyLogin +bizwest.com##div.fp-paywall +bizwest.com##+js(ra, class, div.fp-content) +boredpanda.com##+js(rc, open-list-items, div.open-list-items) +boredpanda.com##div#show-all-images-block-premium +brainly.com,brainly.com.br##+js(set-local-storage-item, /^/, $remove$) +||account.brandonsun.com/api/v*/auth/identify$xmlhttprequest,~third-party +brusselstimes.com##+js(ra, style, div[style*="height: 0;"], stay) +businessden.com,richmondbizsense.com##+js(ra, class, div.cp-paywall-user) +businessden.com,richmondbizsense.com##div#copperpress-paywall +cmcmarkets.com##+js(rc, activePaywall, .activePaywall) +||cnv-medien.de$inline-script +connexionfrance.com##+js(cookie-remover, /^/) +connexionfrance.com##div#subscribe-banner +||dailymail.co.uk/static/mol-adverts/$script +divisare.com##div.blocker +divisare.com##+js(ra, style, body[style], stay) +dominionpost.com##+js(rc, entry-content, article > div.entry-content) +elfinancierocr.com##+js(ra, style, div.article-body-wrapper__styled[style]) +elfinancierocr.com##div.post +energy-storage.news,pv-tech.org##+js(ra, class, div.wkwp-paywall) +energy-storage.news,pv-tech.org##div.wkwp-paywall-block +epaper.indiatimes.com##div.epaperBlockerWrap +||eviemagazine.com/api/trpc/post.paywall$xmlhttprequest,~third-party +expressandstar.com,shropshirestar.com##+js(set, window.Fusion.globalContent.paywallStatus, false) +||fokus.se/app/plugins/sesamy-fpg/assets/js/sesamy-fpg.js$script,~third-party +||golf.com/wp-content/themes/golf/compiled/js/wsumApp.js$script,~third-party +gothamist.com##+js(rc, leadin, div.leadin, stay) +gothamist.com##div.wall-wrapper +hcn.org##+js(ra, content, meta[name="UID"]) +heatmap.news##+js(ra, style, div.body-description, stay) +heatmap.news##div.regwall-container +inman.com##+js(rc, paywalled-block, .paywalled-block) +inman.com##+js(ra, class, div.entry-content-inner) +inman.com##div.content-wrap > div:not([class]):style(margin: 5% !important) +inman.com##.ism-article-block +||cloudfront.net/imonkey-blog-*.min.js$script,domain=insidermonkey.com +ipsoa.it##+js(ra, style, div.paywall) +||jewishinsider.com/wp-content/themes/jewish-insider/js/owl.carousel.min.js$script,~third-party +||jornaldocomercio.com/*/json/paywall.json$xmlhttprequest,~third-party +jornaljoca.com.br##+js(acis, $, paywall) +kunststoffe.de,qz-online.de##+js(ra, style, div[style^="filter: blur"], stay) +kunststoffe.de,qz-online.de##dialog#paywall-dialog +||lapost.com$inline-script +lapost.com##+js(ra, style, div.article-content, stay) +||lasvegasadvisor.com/opt/*.js$script,~third-party +||lasvegasadvisor.com/js/access.min.js$script,~third-party +lavialibera.it##+js(ra, class, div.text-preview) +lavialibera.it##div.save_modal +legalbites.in##+js(ra, class, div.hide.paywall-content) +legalbites.in##div#subscription_paid_message,div.restricted_message > div.story +lepetitjournal.net##.message-restricted-woocommerce +lepetitjournal.net##+js(rc, excerpt, div.excerpt) +lydogbillede.dk,lydogbilde.no##+js(rc, thecontent, div.thecontent) +lydogbillede.dk,lydogbilde.no##+js(ra, style, div#MoreLink_content-container[style]) +lydogbillede.dk,lydogbilde.no##div.paywallbox,div#MoreLink_fade-out-div +marketnews.com##+js(ra, class, div.body-description) +||cloudfront.net/js/prometeo-media/$script,domain=menorca.info|ultimahora.es +meritnation.com##.view-full-answer +meritnation.com##+js(rc, maxHeight75px, div.exp_content.maxHeight75px) +||moscout.com$inline-script +museumsassociation.org##+js(rc, paywall, body.paywall) +museumsassociation.org##+js(ra, style, body[style], stay) +museumsassociation.org##div#paywall-wrapper,div.advertising +nacion.com##+js(ra, style, div.article-body-wrapper__styled[style], stay) +nacion.com##div.post +narcity.com##+js(ra, style, div.body-description[style], stay) +narcity.com##div#login-wall,div#overlay,div.brid-container,div.brandsnippet-article,div[class$='ad-wrapper'] +||newbostonpost.com/*/paywall/js/main.js$script,~third-party +newoxfordreview.org##+js(rc, not-viewable, div.not-viewable) +nu.nl##+js(rc, authorized-content, div.authorized-content, stay) +nu.nl##+js(rc, semi-authorized-content, div.semi-authorized-content, stay) +nu.nl##article#LOGIN +||odt.co.nz/bwtw/scripts/tw.js$script,~third-party +odt.co.nz##+js(ra, property, div[property="content:encoded"]) +||opovo.com.br/*/js/auth/auth_new_menu.min.js$script,~third-party +||pebmed.com.br/wp-content/*/paywall/dist/js/app.js$script,~third-party +||perspectivemedia.com/wp-admin/admin-ajax.php$xmlhttprequest,~third-party +perspectivemedia.com##div.hustle-ui +popbitch.com##+js(ra, class, div[class*="-premium"]) +psypost.org##+js(cookie-remover, issuem_lp) +publishersweekly.com##+js(ra,class|style,div#contentdiv.loggedInOnly,stay) +publishersweekly.com##div#contentdiv.loggedOutOnly +||rdhmag.com$inline-script +rockdelux.com##+js(ra, class|style, body, stay) +rockdelux.com##+js(ra, style, div#body, stay) +rockdelux.com##div.bg-paywall +rotowire.com##+js(ra, class, div.pw-content) +rotowire.com##div.paywall-full,div.article-preview-fader +||theschooloflife.com/app/plugins/*/woocommerce.min.js$script,~third-party +||shrm.org/*/js/paywall*.js$script,~third-party +skepticalinquirer.org##+js(rc, google-bot, div.google-bot, stay) +/\.solicitorsjournal\.com\/_next\/static\/chunks\/\d.+\.js/$script,domain=solicitorsjournal.com,~third-party +||spectrejournal.com/wp-content/plugins/elementor/*/dialog.min.js$script,~third-party +splainer.in##+js(rc, hide-section, .hide-section) +splainer.in##.subscription-prompt +||splinter.com/wp-content/themes/pastemagazine/js/pm_custom.js$script,~third-party +standcolumbia.org##+js(ra, class, div.stu-lock-content, stay) +standcolumbia.org##div.stu-blur-overlay +stateaffairs.com##div.c-memberships-message +stateaffairs.com##+js(rc, access-restricted, body.access-restricted) +strangematters.coop##+js(cookie-remover, pmpro_lpv_count) +subscriptioninsider.com##+js(rc, dialog-prevent-scroll, body.dialog-prevent-scroll, stay) +subscriptioninsider.com##div.dialog-widget +!#if (adguard_app_ios) +/\.subscriptioninsider\.com\/.+\/(\w+-){3,}/$inline-script,domain=subscriptioninsider.com +!#endif +thecore.in##+js(ra, class, div.paywall-content) +thecore.in##div.story,div#subscription_paid_message,div#footer_login_wall +thecountersignal.com##+js(ra, class, body.single div.elementor-widget-container) +||thedriftmag.com/wp-content/plugins/drift-paywall-plugin/$script,~third-party +thegardenisland.com##+js(ra, style, #single-paywall) +thegardenisland.com###single-login-box,#single-excerpt +aap.thestreet.com##+js(rc, is-paywalled, body.is-paywalled) +realmoney.thestreet.com##+js(cookie-remover, /^PWT/) +solarserver.de##+js(ra, style, div.paywall) +solarserver.de##+js(ra, class, div.paywall-blurred) +solarserver.de##div.paywall-box +stockunlock.com##div[class*="-root"][class*="css-"]:style(filter: none !important; pointer-events: auto !important) +stockunlock.com##div.css-coxdc8 +||thenationalpulse.com/wp-content/*/assets/js/national-pulse.js$script,~third-party +||thetablet.org$inline-script +thetablet.org##+js(rc, gated-content, body.gated-content) +tidningenridsport.se##+js(ra, class|style, div.mctos) +tidningenridsport.se##+js(rc, cli-barmodal-open, body.cli-barmodal-open) +tidningenridsport.se##div.locked +trailsoffroad.com##.paywall +vl.no##+js(set, window.Fusion.globalContent.content_restrictions.content_code, 0) +||zeitzeichen.net/sites/default/files/js/js_*.js$script,~third-party + +! General (amp) +||ampproject.org/*/amp-access-$script,domain=~cambridge.org|~cmjornal.pt +||ampproject.org/*/amp-subscriptions-$script +@@||ampproject.org/v0/amp-consent-$script + +artnet.com,bostonglobe.com,dallasnews.com,fortune.com,latimes.com,sandiegouniontribune.com,staradvertiser.com,theathletic.com##+js(ra, subscriptions-section, [subscriptions-section="content"]) +artnet.com,bostonglobe.com,dallasnews.com,fortune.com,latimes.com,sandiegouniontribune.com,staradvertiser.com,theathletic.com##[subscriptions-section="content-not-granted"] +amp.usatoday.com,digiday.com,inc42.com,indianexpress.com,indiatoday.in,mid-day.com,telegraph.co.uk##+js(ra, amp-access-hide, [amp-access][amp-access-hide]) +theathletic.com##div[amp-access*="NOT granted"] + +! French/Belgian sites +amp.elle.fr,challenges.fr,sciencesetavenir.fr##+js(ra, amp-access-hide, [amp-access][amp-access-hide]) +! Groupe IPM +dhnet.be,lalibre.be,lavenir.net##+js(rc, is-preview, div.preview) +dhnet.be,lalibre.be,lavenir.net##+js(rc, is-hidden, div.is-hidden) +dhnet.be,lalibre.be,lavenir.net##div.ap-AdContainer,div.ap-Outbrain + +! Australia News Corp +adelaidenow.com.au,cairnspost.com.au,codesports.com.au,couriermail.com.au,dailytelegraph.com.au,geelongadvertiser.com.au,goldcoastbulletin.com.au,heraldsun.com.au,ntnews.com.au,theaustralian.com.au,thechronicle.com.au,themercury.com.au,townsvillebulletin.com.au,weeklytimesnow.com.au##+js(ra, subscriptions-section, [subscriptions-section="content"]) +adelaidenow.com.au,cairnspost.com.au,codesports.com.au,couriermail.com.au,dailytelegraph.com.au,geelongadvertiser.com.au,goldcoastbulletin.com.au,heraldsun.com.au,ntnews.com.au,theaustralian.com.au,thechronicle.com.au,themercury.com.au,townsvillebulletin.com.au,weeklytimesnow.com.au##[subscriptions-section="content-not-granted"] + +! Italian sites +corriere.it,ilfattoquotidiano.it,ilfoglio.it##+js(ra, subscriptions-section, [subscriptions-section="content"]) +corriere.it,ilfattoquotidiano.it,ilfoglio.it##[subscriptions-section="content-not-granted"] +! Quotidiano.net (+ regional) +ilgiorno.it,ilrestodelcarlino.it,iltelegrafolivorno.it,lanazione.it,quotidiano.net##+js(ra, amp-access-hide, [amp-access][amp-access-hide]) + +! McClatchy Group +amp.bnd.com,amp.charlotteobserver.com,amp.elnuevoherald.com,amp.fresnobee.com,amp.kansas.com,amp.kansascity.com,amp.kentucky.com,amp.mcclatchydc.com,amp.miamiherald.com,amp.newsobserver.com,amp.sacbee.com,amp.star-telegram.com,amp.thestate.com,amp.tri-cityherald.com##+js(ra, subscriptions-section, [subscriptions-section="content"]) +amp.bnd.com,amp.charlotteobserver.com,amp.elnuevoherald.com,amp.fresnobee.com,amp.kansas.com,amp.kansascity.com,amp.kentucky.com,amp.mcclatchydc.com,amp.miamiherald.com,amp.newsobserver.com,amp.sacbee.com,amp.star-telegram.com,amp.thestate.com,amp.tri-cityherald.com##[subscriptions-section="content-not-granted"] +amp.sacbee.com##+js(ra, subscriptions-action, div[subscriptions-action][subscriptions-display="NOT data.hasError"]) + +! Nine Entertainment (Australia) +amp.brisbanetimes.com.au,amp.smh.com.au,amp.theage.com.au,amp.watoday.com.au##+js(ra, subscriptions-section, [subscriptions-section="content"]) +amp.brisbanetimes.com.au,amp.smh.com.au,amp.theage.com.au,amp.watoday.com.au##[subscriptions-section="content-not-granted"] + +! Spanish/Portugese/Brazilian/Colombian sites +amp.elmundo.es,amp.expansion.com,amp.marca.com,elespanol.com,elespectador.com,em.com.br,folha.uol.com.br,gazetadopovo.com.br##+js(ra, subscriptions-section, [subscriptions-section="content"]) +amp.elmundo.es,amp.expansion.com,amp.marca.com,elespanol.com,elespectador.com,em.com.br,folha.uol.com.br,gazetadopovo.com.br##[subscriptions-section="content-not-granted"] +eldiario.es,elpais.com,estadao.com.br,record.pt,sabado.pt##+js(ra, amp-access-hide, [amp-access][amp-access-hide]) +! Grupo Vocento +abc.es,canarias7.es,diariosur.es,diariovasco.com,elcomercio.es,elcorreo.com,eldiariomontanes.es,elnortedecastilla.es,hoy.es,ideal.es,larioja.com,lasprovincias.es,laverdad.es,lavozdigital.es##+js(ra, amp-access-hide, [amp-access][amp-access-hide]) +abc.es##+js(ra, id, body#top) diff --git a/userscript/bpc.de.user.js b/userscript/bpc.de.user.js new file mode 100644 index 0000000..8bf49f7 --- /dev/null +++ b/userscript/bpc.de.user.js @@ -0,0 +1,1659 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - de/at/ch +// @version 4.1.0.1 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.de.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.de.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.de/* +// @match *://*.beobachter.ch/* +// @match *://*.faz.net/* +// @match *://*.handelsblatt.com/* +// @match *://*.handelszeitung.ch/* +// @match *://*.kurier.at/* +// @match *://*.nzz.ch/* +// @match *://*.profil.at/* +// @match *://*.schweizermonat.ch/* +// @match *://*.themarket.ch/* +// @match *://*.tt.com/* +// @match *://*.vn.at/* +// @match *://*.vol.at/* +// @match *://*.wochenblatt.com/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @connect funkemedien.de +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var de_funke_medien_domains = ['abendblatt.de', 'braunschweiger-zeitung.de', 'harzkurier.de', 'ikz-online.de', 'morgenpost.de', 'nrz.de', 'otz.de', 'thueringer-allgemeine.de', 'tlz.de', 'waz.de', 'wp.de', 'wr.de']; +var de_ippen_media_domains = ['fr.de', 'merkur.de', 'ovb-online.de']; +var de_lv_domains = ['profi.de', 'wochenblatt.com']; +var de_madsack_domains = ['haz.de', 'kn-online.de', 'ln-online.de', 'lvz.de', 'maz-online.de', 'neuepresse.de', 'ostsee-zeitung.de', 'rnd.de', 'saechsische.de']; +var de_motor_presse_domains = ['aerokurier.de', 'auto-motor-und-sport.de', 'flugrevue.de', 'motorradonline.de', 'womenshealth.de']; +var de_rp_medien_domains = ['ga.de', 'rp-online.de', 'saarbruecker-zeitung.de', 'volksfreund.de']; +var de_vrm_domains = ['allgemeine-zeitung.de', 'echo-online.de', 'wiesbadener-kurier.de']; +var de_vrm_custom_domains = ['buerstaedter-zeitung.de', 'hochheimer-zeitung.de', 'lampertheimer-zeitung.de', 'lauterbacher-anzeiger.de', 'main-spitze.de', 'mittelhessen.de', 'oberhessische-zeitung.de', 'wormser-zeitung.de']; + +if (matchDomain('aachener-zeitung.de')) { + let url = window.location.href; + getArchive(url, 'div[data-testid="paywall-position-popover"]', '', 'article'); + let shade = document.querySelector('div.paywalled-article'); + if (shade) + shade.classList.remove('paywalled-article'); + let noscroll = document.querySelectorAll('html[class], body[class]'); + for (let elem of noscroll) + elem.removeAttribute('class'); +} + +else if (matchDomain('aerztezeitung.de')) { + let paywall = document.querySelector('div.AZLoginModule'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let content = document.querySelector('p.intro'); + if (json_text && content) { + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.after(article_new); + } + } + } + } +} + +else if (matchDomain(['beobachter.ch', 'handelszeitung.ch'])) { + let paywall = document.querySelector('div#piano-inlined'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script#hydrationdata'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let url_id = json_script.text.includes('"gcid":"') ? json_script.text.split('"gcid":"')[1].split('"')[0] : ''; + if (url_id && !window.location.pathname.endsWith(url_id)) + refreshCurrentTab(); + let pars = json.state; + let paragraphs = document.querySelectorAll('div.paragraph'); + let article = paragraphs[0]; + if (article) { + article.setAttribute('class', 'paragraph text-paragraph'); + for (let paragraph of paragraphs) + paragraph.innerHTML = ''; + let parser = new DOMParser(); + for (let par in pars) { + let par_elem = pars[par]; + let elem = document.createElement('div'); + elem.style = 'font-size: 1.7rem; margin: 25px;'; + let sub_elem = ''; + if (par_elem.__typename === 'TextParagraph' && par_elem.text) { + let content_new = parser.parseFromString('
' + par_elem.text + '
', 'text/html'); + sub_elem = content_new.querySelector('div'); + } else if (par_elem.__typename === 'EmbedParagraph' && par_elem.embedCode) { + let content_new = parser.parseFromString('
' + par_elem.embedCode + '
', 'text/html'); + sub_elem = content_new.querySelector('div'); + let iframe = sub_elem.querySelector('iframe[width]'); + if (iframe) { + let ratio = iframe.width / (mobile ? 320 : 640); + iframe.width = iframe.width / ratio; + iframe.height = iframe.height / ratio; + } + } else if (par_elem.__typename === 'ImageFile') { + if (par_elem.origin) { + sub_elem = document.createElement('img'); + sub_elem.src = par_elem.origin; + sub_elem.alt = par_elem.alt; + if (par_elem.width) { + let ratio = par_elem.width / (mobile ? 320 : 640); + sub_elem.width = par_elem.width / ratio; + sub_elem.height = par_elem.height / ratio; + } + } + } else if (par_elem.__typename === 'Image') { + if (par_elem.credit) { + sub_elem = document.createElement('p'); + sub_elem.appendChild(document.createTextNode(par_elem.credit)); + } + } else if (par_elem.__typename === 'ImageParagraph') { + if (par_elem.caption) { + let content_new = parser.parseFromString('
' + par_elem.caption + '
', 'text/html'); + sub_elem = content_new.querySelector('div'); + } + } else if (!['Article', 'Author', 'Channel', 'LandingPage', 'Query'].includes(par_elem.__typename)) { + console.log(par_elem); + } + if (sub_elem) { + elem.appendChild(sub_elem); + article.appendChild(elem); + } + } + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div.ad-wrapper, div[id^="apn-ad-slot-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('bild.de')) { + func_post = function () { + if (mobile) { + let lazy_images = document.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) { + elem.style = 'width: 95%; margin: 10px;'; + elem.parentNode.removeAttribute('style'); + } + let header = document.querySelector('article > h2 > span:last-child'); + if (header) + header.style = 'margin: 10px;'; + let content = document.querySelector('article time ~ div'); + if (content) + content.style = 'margin: 10px;'; + } + let div_empty = document.querySelectorAll('div[style]'); + for (let elem of div_empty) + if (!elem.innerText.length) + removeDOMElement(elem); + let article = document.querySelector('main > article'); + if (article && article.innerText.length < 1000) + header_nofix('h2', '', 'BPC > no archive-fix'); + } + let url = window.location.href; + getArchive(url, 'div.offer-module', '', 'article'); +} + +else if (matchDomain('boersen-zeitung.de')) { + window.setTimeout(function () { + let paywall = document.querySelector('storefront-section#paywall'); + if (paywall) { + removeDOMElement(paywall); + let url = window.location.href; + replaceDomElementExt(url, false, false, 'article'); + } + }, 2000); +} + +else if (matchDomain('cicero.de')) { + let url = window.location.href; + if (!window.location.search.match(/(\?|&)amp/)) { + let paywall = document.querySelector('.plenigo-paywall'); + if (paywall) { + removeDOMElement(paywall); + func_post = function () { + let related_images = document.querySelectorAll('amp-carousel a > amp-img[src]'); + for (let elem of related_images) { + let img = document.createElement('img'); + Object.assign(img, { + src: elem.getAttribute('src'), + height: elem.getAttribute('height'), + width: elem.getAttribute('width'), + alt: elem.getAttribute('alt') + }); + elem.parentNode.replaceChild(img, elem); + } + let img_captions = document.querySelectorAll('div.carousel-caption:empty'); + removeDOMElement(...img_captions); + } + let url_amp = url.split('?')[0] + '?amp'; + replaceDomElementExt(url_amp, false, false, '.field-name-field-cc-body'); + } + } else { + let teasered_content = document.querySelector('.teasered-content'); + if (teasered_content) + teasered_content.classList.remove('teasered-content'); + let teasered_content_fader = document.querySelector('.teasered-content-fader'); + let btn_read_more = document.querySelector('.btn--read-more'); + removeDOMElement(teasered_content_fader, btn_read_more); + let ads = 'amp-ad'; + hideDOMStyle(ads); + } + let urban_ad_sign = document.querySelectorAll('.urban-ad-sign'); + removeDOMElement(...urban_ad_sign); +} + +else if (matchDomain('faz.net')) { + if (matchDomain('zeitung.faz.net')) { // legacy + let paywall_z = document.querySelector('div.c-red-carpet'); + if (paywall_z) { + removeDOMElement(paywall_z); + let og_url = document.querySelector('head > meta[property="og:url"][content]'); + if (og_url) + window.location.href = og_url.content; + else + header_nofix('div.article__text'); + } + let sticky_advt = document.querySelector('div.sticky-advt'); + removeDOMElement(sticky_advt); + } else { + let url = window.location.href; + getArchive(url, 'div.paywall, div.wall__wrapper', '', 'article'); + let ads = 'div.lay-PaySocial, div.iqadtile_wrapper, div.iqdcontainer'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('freitag.de')) { + let paywall = document.querySelector('aside.qa-paywall'); + if (paywall) { + removeDOMElement(paywall); + let related = document.querySelector('div.c-teaser-plus-related--paywall'); + if (related) + related.classList.remove('c-teaser-plus-related--paywall'); + let article = document.querySelector('div.bo-article-text'); + if (article) { + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = breakText_headers(json.articleBody); + let pars = json_text.split(/\n\n/g); + if (json_text) { + article.innerHTML = ''; + for (let par of pars) { + if (!par.startsWith('Placeholder ')) { + let par_new = document.createElement('p'); + par_new.innerText = par; + article.appendChild(par_new); + } + } + } + } + } else { + let hidden_article = document.querySelector('div.o-paywall'); + if (hidden_article) { + let par_first = true; + let pars = breakText_headers(hidden_article.innerText).split(/\n\n/g); + for (let par of pars) { + let par_new = document.createElement('p'); + let overlap = ''; + if (par_first) { + let intro = article.querySelectorAll('p'); + let intro_last = intro[intro.length - 1]; + par = par.trim(); + overlap = findOverlap(intro_last.innerText, par); + if (overlap) + intro_last.innerText = intro_last.innerText.replace(new RegExp(overlap + '$'), '') + par; + par_first = false; + } + if (!overlap && !par.startsWith('Placeholder ')) { + par_new.innerText = par; + article.appendChild(par_new); + } + } + } + } + } + } +} + +else if (matchDomain('handelsblatt.com')) { + let paywall = document.querySelector('app-paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('article'); + if (article) { + let url = window.location.href; + article.after(googleSearchToolLink(url)); + header_nofix('article', '', 'BPC > refresh page'); + } + } + window.localStorage.removeItem('HB.METERING'); + let overlay = document.querySelector('div[id^="sp_message_container_"]'); + removeDOMElement(overlay); + let noscroll = document.querySelector('html[class]'); + if (noscroll) + noscroll.removeAttribute('class'); +} + +else if (matchDomain('heise.de')) { + func_post = function () { + header_nofix('article', paywall_sel, 'BPC > no archive-fix'); + } + let paywall_sel = 'a-gift:not([has-access])'; + let url = window.location.href; + getArchive(url, paywall_sel, '', 'article'); + let ads = 'div.ad-ldb-container, div.inread-cls-reduc'; + hideDOMStyle(ads); +} + +else if (matchDomain('jacobin.de')) { + let paywall = pageContains('h3.m-auto', 'Dieser Artikel ist nur mit Abo zugänglich.'); + if (paywall.length) { + let slash = document.querySelector('div.slash'); + removeDOMElement(paywall[0].parentNode, slash); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.sections && json.props.pageProps.sections[1].content) { + let url_next = json.query.slug; + if (url_next && !window.location.pathname.includes(url_next)) + refreshCurrentTab(); + let pars = json.props.pageProps.sections[1].content; + let first_par = document.querySelector('body > div#__next p.bodyText'); + if (first_par) { + let par_class = first_par.getAttribute('class'); + let article = first_par.parentNode; + if (article) { + let add_par = false; + for (let par of pars) { + if (!add_par) { + if (par.type === 'paywall') + add_par = true; + } else { + if (par.text) { + let elem_type = 'p'; + let elem_class = par_class; + let elem_style; + if (['paragraph', 'quote'].includes(par.type)) { + if (par.type === 'quote') + elem_style = 'font-size: 36px; font-weight: bold;'; + } else if (par.type === 'header') { + elem_type = 'h2'; + elem_class = 'content-element font-headline h2 my-1em'; + } + let content = par.text.replace(/ /g, ''); + let parser = new DOMParser(); + let content_new = parser.parseFromString('<' + elem_type + ' class="' + elem_class + (elem_style ? '" style="' + elem_style : '') + '">' + content + '', 'text/html'); + article.appendChild(content_new.querySelector(elem_type)); + } else + console.log(par); + } + } + } + } + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('krautreporter.de')) { + let paywall = document.querySelector('.js-article-paywall'); + if (paywall) { + removeDOMElement(paywall); + window.setTimeout(function () { + let paywall_divider = document.querySelector('.js-paywall-divider'); + let steady_checkout = document.querySelector('#steady-checkout'); + removeDOMElement(paywall_divider, steady_checkout); + let blurred = document.querySelectorAll('.blurred'); + for (let elem of blurred) + elem.classList.remove('blurred', 'json-ld-paywall-marker', 'hidden@print'); + }, 500); + } +} + +else if (domain = matchDomain(['ksta.de', 'rundschau-online.de'])) { + setCookie('anon_cookie', '', domain, '/', 0); + function unhide_article(node) { + removeDOMElement(node); + let article = document.querySelector('div[data-article-content][style]'); + if (article) + article.removeAttribute('style'); + } + waitDOMElement('div[data-type="paywall"]', 'DIV', unhide_article, true); + let banners = 'div.dm-slot, div.dm-zephr-banner'; + hideDOMStyle(banners); +} + +else if (matchDomain('kurier.at')) { + let paywall = document.querySelector('div#cfs-paywall-container'); + if (paywall) { + removeDOMElement(paywall); + let div_hidden = document.querySelector('div.paywall'); + if (div_hidden) { + div_hidden.classList.remove('paywall'); + div_hidden.removeAttribute('style'); + } + } + let ads = 'div[data-ad], div[data-outbrain]'; + hideDOMStyle(ads); +} + +else if (matchDomain('mopo.de')) { + getJsonUrl('div#paywall', '', 'div.paywall-fade'); +} + +else if (matchDomain('motorradonline.de')) { + if (window.location.pathname.endsWith('/amp/')) + ampToHtml(); +} + +else if (matchDomain(['noz.de', 'shz.de'])) { + let url = window.location.href; + getArchive(url, 'div.paywall', '', 'article'); + let ads = 'div.ad_label'; + hideDOMStyle(ads); +} + +else if (matchDomain('nw.de')) { + let paywall = document.querySelector('div#paywall'); + if (paywall) { + paywall.removeAttribute('id'); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(json.articleBody.replace(/\n/g, '\n\n').replace(/\.responsive[-@%{}()\.:;\w\s]+}\s?}/g, '')); + let article = paywall.querySelector('div[class*="paywall-overlay"]'); + if (json_text && article) + article.innerText = json_text; + } + } + } +} + +else if (matchDomain('nwzonline.de')) { + let ads = 'div.adslot'; + hideDOMStyle(ads); +} + +else if (matchDomain(['nzz.ch', 'themarket.ch'])) { + let fade = document.querySelectorAll('.nzzinteraction'); + for (let elem of fade) + elem.classList.remove('nzzinteraction'); + let ads = 'div.resor'; + hideDOMStyle(ads); +} + +else if (matchDomain('philomag.de')) { + let paywall = document.querySelector('div[id^="block-paywall"]'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articlebody.replace(/%paywall%/g, '').replace(/(\\r)?\\n/g, '

'); + let content = document.querySelector('div.content-center > div.description'); + if (json_text && content) { + content.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.appendChild(article_new); + } + } + } + } +} + +else if (matchDomain('profil.at')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.removeAttribute('class'); + paywall.removeAttribute('style'); + let fade = 'div#cfs-paywall-container'; + hideDOMStyle(fade); + } + let overlay = 'div.consentOverlay'; + hideDOMStyle(overlay, 2); +} + +else if (matchDomain('schweizermonat.ch')) { + getJsonUrl('div.entry-paywall-login', '', 'div.entry-main > div.entry__post-content'); +} + +else if (matchDomain('spektrum.de')) { + let paywall = document.querySelector('article.pw-premium'); + if (paywall) + paywall.classList.remove('pw-premium'); +} + +else if (matchDomain(['spiegel.de', 'manager-magazin.de'])) { + let url = window.location.href; + func_post = function () { + let failed_iframes = document.querySelectorAll('div > div[x-show="!iframeIsLoaded"]'); + for (let elem of failed_iframes) + hideDOMElement(elem.parentNode); + let body_dark = document.querySelector('body[class*="dark:"]'); + if (body_dark) + removeClassesByPrefix(body_dark, 'dark:'); + let charts = document.querySelectorAll('section div[x-data*="{isLoaded:"]'); + for (let elem of charts) + elem.style.height = elem.offsetHeight + 'px'; + if (mobile) { + let lazy_images = document.querySelectorAll('picture img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + } + header_nofix('article', 'svg[id*="-plus-paywall-"]', 'BPC > no archive-fix'); + } + getArchive(url, 'div[data-area="paywall"]', '', 'article'); +} + +else if (matchDomain('springermedizin.de')) { + let paywall = document.querySelector('div#pay-wall'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let article = document.querySelector('div > p.intro--paragraph'); + if (json_text && article) { + let article_new = document.createElement('p'); + article_new.innerText = json_text; + article.parentNode.replaceChild(article_new, article); + } + } + } + } +} + +else if (matchDomain('stern.de')) { + func_post = function () { + header_nofix(link_sel, paywall_sel, 'BPC > no archive-fix'); + if (mobile) { + let article = document.querySelector(article_src_sel); + if (article) { + let lazy_images = article.querySelectorAll('figure > img[loading="lazy"][style]'); + for (let elem of lazy_images) { + elem.style = 'width: 95%;'; + let caption = elem.parentNode.querySelector('figcaption'); + if (caption) + caption.style = 'width: 95%;'; + } + let article_recs = article.querySelectorAll('article'); + for (let elem of article_recs) + elem.style = 'width: 95%;'; + } + } + } + let paywall_sel = 'ws-paywall'; + let article_sel = 'div.article__body'; + let article_src_sel = 'main > article > div:last-child'; + let link_sel = 'div.page__content-inner'; + let url = window.location.href; + getArchive(url, paywall_sel, '', article_sel, '', article_src_sel, link_sel); +} + +else if (matchDomain('sueddeutsche.de')) { + let url = window.location.href; + if (matchDomain('sz-magazin.sueddeutsche.de')) { + func_post = function () { + header_nofix('main', 'div#sz-paywall', 'BPC > no archive-fix'); + } + getArchive(url, 'div.articlemain__inner--reduced', {rm_class: 'articlemain__inner--reduced'}, 'main'); + } else if (window.location.pathname.startsWith('/projekte/artikel/')) { + func_post = function () { + let lazy_images = document.querySelectorAll('img[loading="lazy"][style*="min-width:"]'); + for (let elem of lazy_images) + elem.style = 'width: 80%; margin: auto;'; + let sticky = document.querySelectorAll('div > div > div[old-position="sticky"]'); + for (let elem of sticky) { + let div_hidden = elem.parentNode.parentNode.querySelector('div[style^="display:none;"]'); + if (div_hidden) + div_hidden.removeAttribute('style'); + removeDOMElement(elem.parentNode); + } + if (intro) { + let intro_old = document.querySelector(intro_sel); + if (intro_old && intro_old.parentNode) + intro_old.parentNode.replaceChild(intro, intro_old); + } + header_nofix('main', 'div#sz-paywall', 'BPC > no archive-fix'); + } + let intro_sel = 'section#module-0'; + let intro = document.querySelector(intro_sel); + getArchive(url, 'div.offer-page', '', 'main'); + } else { + let paywall = document.querySelector('head > meta[content="locked"]'); + if (paywall) { + removeDOMElement(paywall); + let article_sel = 'div[itemprop="articleBody"]'; + let article = document.querySelector(article_sel); + if (article) { + let json_script = document.querySelector('script[data-hydration-props-component-name="ArticleBodyDDRum"]'); + if (json_script) { + try { + let json = JSON.parse(decodeURIComponent(json_script.text)); + if (json) { + let pars = json.uiArticleContent; + if (pars.length) { + article.innerHTML = ''; + addStyle(article_sel + ' p {margin-bottom: 32px;}'); + } + let parser = new DOMParser(); + for (let par of pars) { + let elem = document.createElement('p'); + if (['paragraph', 'datawrapper', 'youtube'].includes(par.component)) { + if (par.content && par.content.html) { + let elem_type = par.content.html.startsWith('
') ? 'div' : 'p'; + let content_new = parser.parseFromString('<' + elem_type + '>' + parseHtmlEntities(par.content.html) + '', 'text/html'); + let iframe = content_new.querySelector('iframe'); + if (iframe) + iframe.style = 'width: 100%; height: 400px; margin-bottom: 32px;'; + elem = content_new.querySelector(elem_type); + } + } else if (par.component === 'subheading') { + if (par.content && par.content.text) { + elem.innerText = par.content.text; + elem.style = 'font-weight: bold;'; + } + } else if (par.component === 'image') { + if (par.content && par.content.image) { + let caption = par.content.caption ? par.content.caption.html + ' (Foto: ' + par.content.imageSource + ')' : ''; + let sub_elem = makeFigure(par.content.image.url, caption); + elem.appendChild(sub_elem); + } + } else if (!(['articleHeader', 'articleTeaserM', 'newsletterEmbed'].includes(par.component) || par.component.startsWith('iqadtile'))) + console.log(par); + if (elem.hasChildNodes()) + article.appendChild(elem); + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + let ads = 'er-ad-slot, div.iqdcontainer'; + hideDOMStyle(ads); +} + +else if (matchDomain('suedkurier.de')) { + let url = window.location.href; + getArchive(url, 'aside.article-paywall', '', 'main > article'); +} + +else if (matchDomain('t3n.de')) { + let paywall = document.querySelector('div.c-paywall__wrapper'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + if (json_text.includes('[embed]')) + json_text = json_text.replace(/\[embed\]([^\[]+)\[\/embed\]/g, '$1\n'); + json_text = json_text.replace(/\[[^\]]+\]/g, ''); + let article = document.querySelector('div.paywall-blur > p'); + if (json_text && article) { + article.innerText = parseHtmlEntities(json_text); + article.parentNode.removeAttribute('class'); + } + } + } + } +} + +else if (matchDomain('tagesspiegel.de')) { + let paywall_sel = 'div#paywall'; + let url = window.location.href; + if (matchDomain('www.tagesspiegel.de')) { + func_post = function () { + let opinionary = document.querySelector('div > div#opinary-automation-placeholder'); + if (opinionary) + hideDOMElement(opinionary.parentNode); + if (mobile) { + let lazy_images = document.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + } + } + getArchive(url, paywall_sel, '', 'div#story-elements'); + } else if (matchDomain('interaktiv.tagesspiegel.de')) { + let paywall = document.querySelector(paywall_sel); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.tslr-article > p'); + if (article) + article.firstChild.before(archiveLink(url)); + } + } + let ads = 'div.iqdcontainer'; + hideDOMStyle(ads); +} + +else if (matchDomain('tt.com')) { + let paywall = document.querySelector('div#piano-logwall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div[data-io-article-url]'); + if (article) { + let json_script = document.querySelector('script#tt-com-www-state'); + if (json_script) { + try { + let json_articles = JSON.parse(json_script.text).TT_COM_WWW_GLOBAL_STATE.articles; + let json_article_id = json_articles.ids[0]; + if (!json_article_id || (json_article_id && !window.location.pathname.includes(json_article_id))) + refreshCurrentTab(); + let parser = new DOMParser(); + let pars = json_articles.entities[json_article_id].articleData.article.elements; + for (let par of pars) { + let elem; + if (['body', 'subheadline1'].includes(par.type)) { + if (par.content) { + let doc = parser.parseFromString('

' + par.content + '

', 'text/html'); + elem = doc.querySelector('p'); + if (par.type === 'subheadline1') + elem.style = 'font-weight: bold;'; + } + } else if (par.type = 'x-im/content-part') { + if (par.elements) { + elem = document.createElement('p'); + for (let item of par.elements) { + if (item.content) { + let doc = parser.parseFromString('

' + item.content + '

', 'text/html'); + sub_elem = doc.querySelector('p'); + elem.appendChild(sub_elem); + } + } + } + } else if (par.type.match(/^x-im\//)) { + if (par.url) { + if (par.url.startsWith('https://twitter.com/')) { + elem = document.createElement('p'); + let sub_elem = document.createElement('a'); + sub_elem.href = elem.innerText = par.url; + sub_elem.target = '_blank'; + elem.appendChild(sub_elem); + } else { + elem = document.createElement('iframe'); + elem.src = par.url; + elem.style = 'height: ' + article.offsetWidth + 'px; width: ' + article.offsetWidth + 'px;'; + } + } + } + if (elem) + article.appendChild(elem); + } + } catch (err) { + console.log(err); + } + } + } + } + let ads = 'div[class*="ads-container"], div.adblock-warning'; + hideDOMStyle(ads); +} + +else if (matchDomain('vn.at')) { + if (window.location.href.match(/\.vn\.at\/.+\/\d{4}\//)) { + let paywall = document.querySelector('div.paywalled-content'); + if (paywall) { + let par = paywall.querySelector('p'); + if (!par) { + refreshCurrentTab(); + } else { + let lazy_images = document.querySelectorAll('img[src^="data:image/"][lazy-src]'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('lazy-src'); + } + } + } else + refreshCurrentTab(); + } +} + +else if (matchDomain('vol.at')) { + if (!window.location.pathname.match(/\/amp\/?$/)) { + window.setTimeout(function () { + let paywall = document.querySelector('div.vodl-region-article__premium-content'); + if (paywall) { + paywall.removeAttribute('class'); + if (!paywall.hasChildNodes()) { + let json_script = document.querySelector('script#externalPostDataNode'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + let json_text = json.content.data.post.content; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let hidden_images = article_new.querySelectorAll('img[src^="/"][srcset]'); + let json_domain = json.content.data.post.thumbnail.src.match(/https:\/\/(www\.)?\w+\.at/)[0]; + for (let elem of hidden_images) { + elem.src = elem.src.replace('https://www.vol.at', json_domain); + elem.removeAttribute('srcset'); + } + let hidden_comments = document.querySelector('div[class*="backdrop-blur"]'); + if (hidden_comments) + hidden_comments.removeAttribute('class'); + let article = document.querySelector('div.article-body'); + if (article) { + article.innerHTML = ''; + article.appendChild(article_new); + } + } catch (err) { + console.log(err); + } + } + } + } + }, 500); + let ads = 'div[id^="rm-adslot-"], div[id^="piano_rec"]'; + hideDOMStyle(ads); + } else + ampToHtml(); +} + +else if (matchDomain('weltkunst.de')) { + let paywall = document.querySelector('section.paywall'); + if (paywall) { + removeDOMElement(paywall); + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + if (json_url_dom) { + let json_url = json_url_dom.href; + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + let json_text = json.content.rendered; + let content = document.querySelector('div.article div.text'); + if (json_text) { + if (content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + content.innerHTML = ''; + content.appendChild(content_new); + } + } else + header_nofix(content); + }); + } + }); + } + } + let par_initial = document.querySelector('p.initial'); + removeDOMElement(par_initial); +} + +else if (matchDomain('welt.de')) { + func_post = function () { + if (mobile) { + let headers = document.querySelectorAll('main header, main header ~ div'); + for (let elem of headers) + elem.removeAttribute('style'); + let main_divs = document.querySelectorAll('main div[style] > div > div[id]'); + for (let elem of main_divs) { + if (elem.querySelector('img')) + elem.parentNode.parentNode.removeAttribute('style'); + } + let lazy_images = document.querySelectorAll('main img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + } + header_nofix('main header', 'img[alt="WELTplus"][loading]', 'BPC > no archive-fix'); + let ads = pageContains('span', 'Anzeige'); + removeDOMElement(...ads); + } + let url = window.location.href; + getArchive(url, 'div.contains_walled_content, div.c-article-paywall', '', 'main header + div'); + let ads = 'div[data-component="Outbrain"], div[class*="c-ad"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('weser-kurier.de')) { + let ads = 'div.ad-wrapper, div.anyad, div.msn-ads'; + hideDOMStyle(ads); +} + +else if (matchDomain('zeit.de')) { + func_post = function () { + if (mobile) { + let lazy_images = document.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + let span_empty = document.querySelectorAll('span:empty'); + removeDOMElement(...span_empty); + } + let ads = document.querySelectorAll('div[style*=";min-height:"] > div[id^="iqadtile"]'); + for (let ad of ads) + hideDOMElement(ad.parentNode); + } + let url = window.location.href.split(/[#\?]/)[0]; + if (document.querySelector('head > link[rel="next"]')) + url += '/komplettansicht'; + getArchive(url, 'aside#paywall', '', 'article', '', 'article', 'article > div'); + let ads = 'div[id^="iqadtile"], .iqdcontainer'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_funke_medien_domains)) { + func_post = function () { + document.querySelectorAll('div[data-carousel-id-slider]').forEach(x => x.removeAttribute('class')); + } + let paywall = document.querySelector('div#paywall-container'); + if (paywall) { + removeDOMElement(paywall); + let spark_script = document.querySelector('script#__SPARK__'); + if (spark_script) { + let match = spark_script.text.match(/PUBLICATION:\s?'([\w-]+)',/); + if (match) { + let spark_domain = match[1]; + let url_src = 'https://app-webview.sparknews.funkemedien.de/' + spark_domain + window.location.pathname; + fetch_headers = {"Authorization": "Basic YXBpOkNTeGxxRG1YM2xCTmRsS1l6allRcWZqTnFZMkhQVUVm"}; + replaceDomElementExt(url_src, true, false, 'div.article-body', 'BPC > no fix (source file)'); + } + } + } + let ads = 'aside.ad-slot-wrapper'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_lv_domains)) { + let paywall = document.querySelector('div[id^="paymentprocess-"]'); + if (paywall) { + let intro = document.querySelector('div.m-paywall__textFadeOut'); + removeDOMElement(paywall, intro); + let div_hidden = document.querySelector('div.paywall-full-content[style]'); + if (div_hidden) { + div_hidden.removeAttribute('class'); + div_hidden.removeAttribute('style'); + } + } + let ads = 'div.adZone'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_motor_presse_domains)) { + let ads = 'div#ads-container, div.va-sponsored, div.mps_markAd'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_rp_medien_domains)) { + func_post = function () { + header_nofix('article', 'div#park-paywall', 'BPC > no archive-fix'); + let videos = 'glomex-player'; + hideDOMStyle(videos, 5); + } + let url = window.location.href; + getArchive(url, 'div.park-paywall-content', '', 'article'); + let ads = 'div.portal-slot'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_madsack_domains) || document.querySelector('head > link[href*=".rndtech.de/"]')) { + if (!window.location.search.includes('outputType=valid_amp')) { + let ads = 'div[class^="Adstyled__AdWrapper"]'; + hideDOMStyle(ads); + } else { + ampToHtml(); + } +} + +else if (matchDomain(de_ippen_media_domains) || document.querySelector('header a[href^="https://www.ippen.media"]')) { + let ads = 'div[class^="id-TBeepSlot-"], div[data-id-advertdfpconf]'; + hideDOMStyle(ads); +} + +else if (matchDomain(de_vrm_domains) || matchDomain(de_vrm_custom_domains)) { + func_post = function () { + let article = document.querySelector(article_sel); + if (article) { + article.querySelectorAll('div > div[role="button"]').forEach(e => removeDOMElement(e.parentNode)); + if (mobile) { + let pictures = document.querySelectorAll('picture > img[style]'); + for (let elem of pictures) { + elem.style = 'width: 95%; margin: 10px;'; + elem.parentNode.removeAttribute('style'); + } + } + } + } + let article_sel = 'article section'; + let url = window.location.href; + window.setTimeout(function () { + getArchive(url, 'div[data-testid="paywall-blurred-content"]', {rm_attrib: 'class'}, article_sel); + }, 1000); + let ads = 'div.adSlot, div.loadingBanner'; + hideDOMStyle(ads); +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function urlHost(url) { + if (/^http/.test(url)) { + try { + return new URL(url).hostname; + } catch (e) { + console.log(`url not valid: ${url} error: ${e}`); + } + } + return url; +} + +function matchUrlDomain(domains, url) { + return matchDomain(domains, urlHost(url)); +} + +function setCookie(name, value, domain, path, days, localstorage_hold = false) { + var max_age = days * 24 * 60 * 60; + document.cookie = name + "=" + (value || "") + "; domain=" + domain + "; path=" + path + "; max-age=" + max_age; + if (!localstorage_hold) + window.localStorage.clear(); +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function makeFigure(url, caption_text, img_attrib = {}, caption_attrib = {}) { + let elem = document.createElement('figure'); + let img = document.createElement('img'); + img.src = url; + for (let attrib in img_attrib) + if (img_attrib[attrib]) + img.setAttribute(attrib, img_attrib[attrib]); + elem.appendChild(img); + if (caption_text) { + let caption = document.createElement('figcaption'); + for (let attrib in caption_attrib) + if (caption_attrib[attrib]) + caption.setAttribute(attrib, caption_attrib[attrib]); + let cap_par = document.createElement('p'); + cap_par.innerText = caption_text; + caption.appendChild(cap_par); + elem.appendChild(caption); + } + return elem; +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function waitDOMElement(selector, tagName = '', callback, multiple = false) { + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (!tagName || (node.tagName === tagName)) { + if (node.matches(selector)) { + callback(node); + if (!multiple) + this.disconnect(); + } + } + } + } + }).observe(document, { + subtree: true, + childList: true + }); +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function googleSearchToolLink(url, text_fail = 'BPC > Try for full article text (test url & copy html (tab) code to [https://codebeautify.org/htmlviewer]):\r\n') { + return externalLink(['search.google.com'], 'https://search.google.com/test/rich-results?url={url}', encodeURIComponent(url), text_fail); +} + +function nftLink(url, text_fail = 'BPC > Full article text:\r\n') { + return externalLink(['1ft.io'], 'https://{domain}/{url}', url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function removeClassesByPrefix(el, prefix) { + let el_classes = el.classList; + for (let el_class of el_classes) { + if (el_class.startsWith(prefix)) + el_classes.remove(el_class); + } +} + +function amp_iframes_replace(weblink = false, source = '') { + let amp_iframes = document.querySelectorAll('amp-iframe' + (source ? '[src*="' + source + '"]' : '')); + let par, elem; + for (let amp_iframe of amp_iframes) { + if (!weblink) { + if (amp_iframe.offsetHeight > 10) { + elem = document.createElement('iframe'); + elem.src = amp_iframe.getAttribute('src').replace(/^http:/, 'https:'); + elem.style = 'height: ' + amp_iframe.offsetHeight + 'px; width: 100%; border: 0px;'; + if (amp_iframe.getAttribute('sandbox')) + elem.sandbox = amp_iframe.getAttribute('sandbox'); + amp_iframe.parentNode.replaceChild(elem, amp_iframe); + } + } else { + par = document.createElement('p'); + par.style = 'margin: 20px 0px;'; + elem = document.createElement('a'); + elem.innerText = 'Media-link'; + elem.setAttribute('href', amp_iframe.getAttribute('src')); + elem.setAttribute('target', '_blank'); + par.appendChild(elem); + amp_iframe.parentNode.replaceChild(par, amp_iframe); + } + } +} + +function amp_redirect_not_loop(amphtml) { + if (!check_loop()) { + window.location.href = amphtml.href; + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > redirect to amp failed (disable amp-to-html extension/add-on or browser setting)'); + } +} + +function amp_redirect(paywall_sel, paywall_action = '', amp_url = '') { + let paywall = document.querySelectorAll(paywall_sel); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (!amphtml && amp_url) + amphtml = {href: amp_url}; + if (paywall.length && amphtml) { + clearPaywall(paywall, paywall_action); + amp_redirect_not_loop(amphtml); + } +} + +function amp_unhide_subscr_section(amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let preview = document.querySelectorAll('[subscriptions-section="content-not-granted"]'); + removeDOMElement(...preview); + let subscr_section = document.querySelectorAll('[subscriptions-section="content"]'); + for (let elem of subscr_section) + elem.removeAttribute('subscriptions-section'); + hideDOMStyle(amp_ads_sel, 5); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function amp_unhide_access_hide(amp_access = '', amp_access_not = '', amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let access_hide = document.querySelectorAll('[amp-access' + amp_access + '][amp-access-hide]:not([amp-access="error"], [amp-access^="message"], .piano)'); + for (let elem of access_hide) + elem.removeAttribute('amp-access-hide'); + if (amp_access_not) { + let amp_access_not_dom = document.querySelectorAll('[amp-access' + amp_access_not + ']'); + removeDOMElement(...amp_access_not_dom); + } + hideDOMStyle(amp_ads_sel, 6); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function breakText(str, headers = false) { + str = str.replace(/(?:^|[A-Za-z\"\“\”\)])(\.+|\?|!)(?=[A-ZÖÜ\„\”\d][A-Za-zÀ-ÿ\„\d]{1,})/gm, "$&\n\n"); + if (headers) + str = str.replace(/(([a-z]{2,}|[\"\“]))(?=[A-Z](?=[A-Za-zÀ-ÿ]+))/gm, "$&\n\n"); + return str; +} + +function breakText_headers(str) { + str = breakText(str, true); + // exceptions: names with alternating lower/uppercase (no general fix) + let str_rep_arr = ['AstraZeneca', 'BaFin', 'BerlHG', 'BfArM', 'BilMoG', 'BioNTech', 'ChatGPT', 'DiGA', 'EuGH', 'FinTechRat', 'GlaxoSmithKline', 'IfSG', 'medRxiv', 'mmHg', 'OpenAI', 'PlosOne', 'StVO', 'TikTok']; + let str_rep_split; + let str_rep_src; + for (let str_rep of str_rep_arr) { + str_rep_split = str_rep.split(/([a-z]+)(?=[A-Z](?=[A-Za-z]+))/); + str_rep_src = str_rep_split.reduce(function (accumulator, currentValue) { + return accumulator + currentValue + ((currentValue !== currentValue.toUpperCase()) ? '\n\n' : ''); + }); + if (str_rep_src.endsWith('\n\n')) + str_rep_src = str_rep_src.slice(0, -2); + str = str.replace(new RegExp(str_rep_src, "g"), str_rep); + } + str = str.replace(/De\n\n([A-Z])/g, "De$1"); + str = str.replace(/La\n\n([A-Z])/g, "La$1"); + str = str.replace(/Le\n\n([A-Z])/g, "Le$1"); + str = str.replace(/Mc\n\n([A-Z])/g, "Mc$1"); + return str; +} + +function parseHtmlEntities(encodedString) { + let parser = new DOMParser(); + let doc = parser.parseFromString('', 'text/html'); + let dom = doc.querySelector('textarea'); + return dom.value; +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function getJsonUrlText(article, callback, article_id = '', key = '', url_rest = false, url_slash = false) { + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + let json_url; + if (json_url_dom) + json_url = json_url_dom.href; + if (!json_url && article_id) + json_url = window.location.origin + '/wp-json/wp/v2/posts/' + article_id; + if (url_rest) + json_url = json_url.replace('/wp-json/', '/?rest_route=/'); + else if (url_slash) + json_url = json_url.replace('/wp-json/', '//wp-json/'); + if (json_url) { + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = parseHtmlEntities(!key ? json.content.rendered : getNestedKeys(json, key)); + callback(json_text, article); + } catch (err) { + console.log(err); + } + }); + } + }); + } +} + +function getJsonUrlAdd(json_text, article, art_options = {}) { + let art_type = 'div'; + let art_attrib = ''; + if (Object.keys(art_options).length) { + if (art_options.art_type) + art_type = art_options.art_type; + if (art_options.art_class) + art_attrib += ' class="' + art_options.art_class + '"'; + if (art_options.art_id) + art_attrib += ' id="' + art_options.art_id + '"'; + if (art_options.art_style) + art_attrib += ' style="' + art_options.art_style + '"'; + if (art_options.func_text) + json_text = art_options.func_text(json_text); + } + let parser = new DOMParser(); + let doc = parser.parseFromString('<' + art_type + art_attrib + '>' + json_text + '', 'text/html'); + let article_new = doc.querySelector(art_type); + if (art_options.art_append || !article.parentNode) { + if (!art_options.art_hold) + article.innerHTML = ''; + article.appendChild(article_new); + } else + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); +} + +function getJsonUrl(paywall_sel, paywall_action = '', article_sel, art_options = {}, article_id = '', key = '', url_rest = false, url_slash = false) { + let paywall = document.querySelectorAll(paywall_sel); + let article = document.querySelector(article_sel); + if (paywall.length && article) { + clearPaywall(paywall, paywall_action); + getJsonUrlText(article, (json_text, article) => { + if (json_text && article) + getJsonUrlAdd(json_text, article, art_options); + }, article_id, key, url_rest, url_slash); + } +} + +function pageContains(selector, text) { + let elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function (element) { + return RegExp(text).test(element.textContent); + }); +} + +})(); diff --git a/userscript/bpc.en.user.js b/userscript/bpc.en.user.js new file mode 100644 index 0000000..74223d6 --- /dev/null +++ b/userscript/bpc.en.user.js @@ -0,0 +1,5341 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - en +// @version 4.1.1.1 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.en.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.en.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.com/* +// @match *://*.co.uk/* +// @match *://*.com.au/* +// @match *://*.co/* +// @match *://*.io/* +// @match *://*.net/* +// @match *://*.net.au/* +// @match *://*.org/* +// @match *://*.pub/* +// @match *://*.businessdesk.co.nz/* +// @match *://*.businesspost.ie/* +// @match *://*.businesstimes.com.sg/* +// @match *://*.capital.bg/* +// @match *://*.dnevnik.bg/* +// @match *://*.epoch.org.il/* +// @match *://*.europower.no/* +// @match *://*.fiskeribladet.no/* +// @match *://*.forbes.ua/* +// @match *://*.ftm.eu/* +// @match *://*.gitflic.ru/* +// @match *://*.haaretz.co.il/* +// @match *://*.independent.ie/* +// @match *://*.indiatoday.in/* +// @match *://*.intrafish.no/* +// @match *://*.ipolitics.ca/* +// @match *://*.japantimes.co.jp/* +// @match *://*.livelaw.in/* +// @match *://*.nation.africa/* +// @match *://*.nautil.us/* +// @match *://*.niagarafallsreview.ca/* +// @match *://*.nv.ua/* +// @match *://*.nzherald.co.nz/* +// @match *://*.puck.news/* +// @match *://*.sloanreview.mit.edu/* +// @match *://*.stcatharinesstandard.ca/* +// @match *://*.tempo.co/* +// @match *://*.theleaflet.in/* +// @match *://*.uxdesign.cc/* +// @match *://*.wellandtribune.ca/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @connect djservices.io +// @connect dowjones.io +// @exclude *://*.amazon-adsystem.com/* +// @exclude *://*.consentmanager.net/* +// @exclude *://*.dailymotion.com/* +// @exclude *://*.doubleclick.net/* +// @exclude *://*.dwcdn.net/* +// @exclude *://*.facebook.com/* +// @exclude *://*.google.com/* +// @exclude *://*.googleapis.com/* +// @exclude *://*.googletagmanager.com/* +// @exclude *://*.instagram.com/* +// @exclude *://*.klarna.com/* +// @exclude *://*.mediafire.com/* +// @exclude *://*.openx.net/* +// @exclude *://*.outbrain.com/* +// @exclude *://*.pinterest.com/* +// @exclude *://*.rubiconproject.com/* +// @exclude *://*.seedtag.com/* +// @exclude *://*.smartadserver.com/* +// @exclude *://*.stripe.com/* +// @exclude *://*.tinypass.com/* +// @exclude *://*.twitter.com/* +// @exclude *://*.youtube.com/* +// @exclude *://*.abcmais.com/* +// @exclude *://*.artsenkrant.com/* +// @exclude *://*.cambiocolombia.com/* +// @exclude *://*.clarin.com/* +// @exclude *://*.connaissancedesarts.com/* +// @exclude *://*.cronista.com/* +// @exclude *://*.diariocordoba.com/* +// @exclude *://*.diariovasco.com/* +// @exclude *://*.elconfidencial.com/* +// @exclude *://*.elcorreo.com/* +// @exclude *://*.elespanol.com/* +// @exclude *://*.elespectador.com/* +// @exclude *://*.elmercurio.com/* +// @exclude *://*.elpais.com/* +// @exclude *://elpais.com/* +// @exclude *://*.elperiodico.com/* +// @exclude *://*.elperiodicodearagon.com/* +// @exclude *://*.elperiodicoextremadura.com/* +// @exclude *://*.elperiodicomediterraneo.com/* +// @exclude *://*.eltiempo.com/* +// @exclude *://*.eltribuno.com/* +// @exclude *://*.eluniverso.com/* +// @exclude *://*.exame.com/* +// @exclude *://*.expansion.com/* +// @exclude *://*.faz.net/* +// @exclude *://*.globo.com/* +// @exclude *://*.handelsblatt.com/* +// @exclude *://*.ilsole24ore.com/* +// @exclude *://*.jeuneafrique.com/* +// @exclude *://*.journaldunet.com/* +// @exclude *://*.larioja.com/* +// @exclude *://*.latercera.com/* +// @exclude *://*.lavenir.net/* +// @exclude *://*.ledevoir.com/* +// @exclude *://*.lerevenu.com/* +// @exclude *://*.lesinrocks.com/* +// @exclude *://*.levante-emv.com/* +// @exclude *://*.loeildelaphotographie.com/* +// @exclude *://*.marca.com/* +// @exclude *://*.marianne.net/* +// @exclude *://*.parismatch.com/* +// @exclude *://*.parkiet.com/* +// @exclude *://*.politicaexterior.com/* +// @exclude *://*.pourleco.com/* +// @exclude *://*.projectcargojournal.com/* +// @exclude *://*.quotidiano.net/* +// @exclude *://*.railfreight.cn/* +// @exclude *://*.railfreight.com/* +// @exclude *://*.railtech.com/* +// @exclude *://*.reforme.net/* +// @exclude *://*.revistaoeste.com/* +// @exclude *://*.science-et-vie.com/* +// @exclude *://*.topagrar.com/* +// @exclude *://*.tt.com/* +// @exclude *://*.tuttosport.com/* +// @exclude *://*.wochenblatt.com/* +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var usa_adv_local_domains = ['al.com', 'cleveland.com', 'lehighvalleylive.com', 'masslive.com', 'mlive.com', 'nj.com', 'oregonlive.com', 'pennlive.com', 'silive.com', 'syracuse.com']; + +if (matchDomain('nzherald.co.nz')) { + function nzherald_main() { + if (window.Fusion) + window.Fusion.globalContent.isPremium = false; + } + window.setTimeout(function () { + insert_script(nzherald_main); + }, 100); +} + +else if (matchDomain(['thehindu.com', 'thehindubusinessline.com'])) { + function hindu_main() { + if (window) { + window.Adblock = false; + window.isNonSubcribed = false; + } + } + window.setTimeout(function () { + insert_script(hindu_main); + }, 100); +} + +else if (matchDomain(usa_adv_local_domains)) { + function adv_main() { + if (window.adiData) { + window.adiData.entryTags = 0; + } + } + window.setTimeout(function () { + insert_script(adv_main); + }, 100); +} + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var ca_torstar_domains = ['niagarafallsreview.ca', 'stcatharinesstandard.ca', 'thepeterboroughexaminer.com', 'therecord.com', 'thespec.com', 'thestar.com', 'wellandtribune.ca']; +var ke_nation_media_domains = ['businessdailyafrica.com', 'nation.africa']; +var medium_custom_domains = ['betterprogramming.pub', 'towardsdatascience.com']; +var no_dn_media_domains = ['dn.no', 'europower.no', 'fiskeribladet.no', 'hydrogeninsight.com', 'intrafish.com', 'intrafish.no', 'rechargenews.com', 'tradewindsnews.com', 'upstreamonline.com']; +var sg_sph_media_domains = ['businesstimes.com.sg', 'straitstimes.com']; +var timesofindia_domains = ['epaper.indiatimes.com', 'timesofindia.indiatimes.com']; +var uk_nat_world_domains = ['scotsman.com', 'yorkshirepost.co.uk']; +var usa_arizent_custom_domains = ['accountingtoday.com', 'benefitnews.com', 'bondbuyer.com', 'dig-in.com', 'financial-planning.com', 'nationalmortgagenews.com']; +var usa_conde_nast_domains = ['architecturaldigest.com', 'bonappetit.com', 'cntraveler.com', 'epicurious.com', 'gq.com' , 'newyorker.com', 'vanityfair.com', 'vogue.co.uk', 'vogue.com', 'wired.com']; +var usa_craincomm_domains = ['360dx.com', 'adage.com', 'chicagobusiness.com', 'crainscleveland.com', 'crainsdetroit.com', 'crainsgrandrapids.com', 'crainsnewyork.com', 'european-rubber-journal.com', 'genomeweb.com', 'modernhealthcare.com', 'pionline.com', 'plasticsnews.com', 'precisionmedicineonline.com', 'rubbernews.com', 'sustainableplastics.com', 'tirebusiness.com', 'utech-polyurethane.com']; +var usa_gannett_domains = ['azcentral.com', 'cincinnati.com', 'commercialappeal.com', 'courier-journal.com', 'democratandchronicle.com', 'desmoinesregister.com', 'detroitnews.com', 'dispatch.com', 'freep.com', 'indystar.com', 'jacksonville.com', 'jsonline.com', 'knoxnews.com', 'news-press.com', 'northjersey.com', 'oklahoman.com', 'statesman.com', 'tennessean.com']; +var usa_hearst_comm_domains = ['ctpost.com', 'expressnews.com', 'houstonchronicle.com', 'nhregister.com', 'sfchronicle.com', 'timesunion.com']; +var usa_lee_ent_domains = ['buffalonews.com', 'journalnow.com', 'journalstar.com', 'madison.com', 'nwitimes.com', 'omaha.com', 'richmond.com', 'stltoday.com', 'tucson.com', 'tulsaworld.com']; +var usa_mcc_domains = ['bnd.com', 'charlotteobserver.com', 'elnuevoherald.com', 'fresnobee.com', 'kansas.com', 'kansascity.com', 'kentucky.com', 'mcclatchydc.com', 'miamiherald.com', 'newsobserver.com', 'sacbee.com', 'star-telegram.com', 'thestate.com', 'tri-cityherald.com']; +var usa_mng_domains = ['bostonherald.com', 'denverpost.com', 'eastbaytimes.com', 'mercurynews.com', 'ocregister.com', 'pressenterprise.com', 'sandiegouniontribune.com', 'twincities.com']; +var usa_nymag_domains = ['curbed.com', 'grubstreet.com', 'nymag.com', 'thecut.com', 'vulture.com']; +var usa_outside_mag_domains = ["backpacker.com", "betamtb.com", "betternutrition.com", "cleaneatingmag.com", "climbing.com", "outsideonline.com", "oxygenmag.com", "skimag.com", "trailrunnermag.com", "triathlete.com", "vegetariantimes.com", "womensrunning.com", "yogajournal.com"]; +var usa_penske_media_domains = ['billboard.com', 'rollingstone.com', 'sourcingjournal.com', 'sportico.com', 'variety.com', 'wwd.com']; +var usa_tribune_domains = ['baltimoresun.com', 'capitalgazette.com', 'chicagotribune.com', 'courant.com', 'dailypress.com', 'mcall.com', 'nydailynews.com', 'orlandosentinel.com', 'pilotonline.com', 'sun-sentinel.com']; + +if (matchDomain('gitflic.ru')) { + if (window.location.pathname.startsWith('/project/magnolia1234/bpc_uploads') && document.head) { + let sheet = document.createElement('style'); + let path_short = window.location.pathname.replace('/project/magnolia1234/bpc_uploads', ''); + if (!path_short) + sheet.innerText = 'div[data-cell-type="commit"], div[data-cell-type="date"] {display: none !important;} div[data-cell-type="filename"] {flex: 0 0 100% !important;}'; + else if (path_short.match(/^\/(blob|file)/)) + sheet.innerText = 'div.project-files-tree, div.project-files-list {flex: 0 0 50% !important; max-width: 50% !important;}'; + if (sheet.innerText) + document.head.appendChild(sheet); + } +} + +if (matchDomain('medium.com') || matchDomain(medium_custom_domains) || document.querySelector('head > link[href*=".medium.com/"]')) { + let url = window.location.href; + let paywall = document.querySelector('article.meteredContent'); + if (paywall) { + paywall.removeAttribute('class'); + let header = paywall.querySelector('h1'); + if (header) { + header.before(freediumLink(url)); + header.before(readMediumLink(url)); + } + } + window.setTimeout(function () { + let banner = pageContains('div > div > p', /author made this story available to/); + if (banner.length) + removeDOMElement(banner[0].parentNode.parentNode); + }, 1000); +} + +else if (window.location.hostname.match(/\.(au|nz)$/) || matchDomain(['afr.com'])) {//australia & new zealand + +if (matchDomain('afr.com')) { + let error = document.querySelector('div[data-testid="DefaultError"]'); + if (error) + refreshCurrentTab(); + let article_sel = '#endOfArticle:not(:empty)'; + let article = document.querySelector(article_sel); + if (!article) { + article_sel = 'section#body-content'; + article = document.querySelector(article_sel); + } + if (article) { + window.setTimeout(function () { + let pars = article.querySelectorAll('p:not([class]), figure:not(:empty)'); + let pagination = document.querySelector('div > span#pagination-top'); + if ((pars.length && pars.length < 5) || pagination) { + if (pagination) { + removeDOMElement(pagination.parentNode); + } else { + let loading = pageContains(article_sel + ' div', 'Loading...'); + removeDOMElement(...pars, ...loading); + } + let url = window.location.href.split(/[#\?]/)[0]; + fetch(url) + .then(response => { + if (response.ok) { + response.text().then(html => { + if (html.includes('__REDUX_STATE__=')) { + try { + let json = JSON.parse(html.split('__REDUX_STATE__=')[1].split('};')[0].replace(/:undefined([,}])/g, ':"undefined"$1') + '}'); + if (json) { + let placeholders; + function find_item(match, p1, offset, string) { + let placeholder_id = p1; + let result = ''; + if (placeholder_id && placeholders[placeholder_id]) { + let item = placeholders[placeholder_id]; + if (item.data) { + if (['linkArticle', 'linkExternal'].includes(item.type)) { + if (item.data.text) { + if (item.data.url) + result = '' + item.data.text + ''; + else + result = item.data.text; + } + } else if (item.type === 'image') { + if (item.data.fileName) + result = '
' + (item.data.caption ? item.data.caption : '') + (item.data.source ? ' ' + item.data.source + '' : '') + '
'; + } else if (item.type === 'youtube') { + if (item.data.url) { + if (item.data.url.includes('watch?v=')) + result = ''; + else + result = '' + item.data.url + ''; + } + } else if (['instagram', 'twitter'].includes(item.type)) { + if (item.data.url) + result = '' + item.data.url + ''; + } else if (item.type === 'iframe') { + if (item.data.url) + result = ''; + } else if (!['callout', 'quote', 'relatedStory', 'video'].includes(item.type)) { + console.log(item); + } + } + } + return result; + } + let json_text = json.page.content.asset.body; + if (json_text) { + placeholders = json.page.content.asset.bodyPlaceholders; + if (placeholders) + json_text = json_text.replace(/<\/x-placeholder>/g, find_item); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + if (article_sel.startsWith('#endOfArticle')) + article.parentNode.replaceChild(content_new, article); + else + article.firstChild.before(content_new); + addStyle(article_sel + ' p {margin: 20px 0px;}'); + } else { + let parser = new DOMParser(); + let first = true; + let posts = json.page.content.asset.posts; + for (let post of posts) { + if (first) { + first = false; + continue; + } + let asset = post.asset; + if (asset && asset.body) { + let json_text = asset.body; + placeholders = asset.bodyPlaceholders; + if (placeholders) + json_text = json_text.replace(/<\/x-placeholder>/g, find_item); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let par = doc.querySelector('section'); + let header; + if (asset.headlines && asset.headlines.headline) { + header = document.createElement('h2'); + header.innerText = asset.headlines.headline; + header.id = post.id; + } + let byline; + if (asset.byline) { + byline = document.createElement('p'); + byline.innerText = asset.byline; + byline.style = 'margin-bottom: 24px;' + } + article.append(header, byline, par); + } + } + addStyle('section:not([class]) > p {margin: 24px 0px;}'); + let key_posts = document.querySelectorAll('li > a[href*="?post="]'); + for (let elem of key_posts) + elem.href = elem.href.replace('?post=', '#'); + } + } + } catch (err) { + console.log(err); + } + } + }); + } + }).catch(function (err) { + false; + }); + } + }, 1000); + } +} + +else if (matchDomain('businessdesk.co.nz')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.classList.remove('paywall'); + let signup_box = document.querySelector('div.signup-box-container'); + removeDOMElement(signup_box); + let url = window.location.href.split(/[#\?]/)[0]; + fetch(url, {headers: {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"}}) + .then(response => { + if (response.ok) { + response.text().then(html => { + let match = html.match(/:query="'([^"]+)'"/); + if (match) { + let parser = new DOMParser(); + let src_text = breakText(parseHtmlEntities(match[1])).replace(/\n\n/g, '

').replace(/\.([^\s\d]|&)/g, ". $1"); + let doc = parser.parseFromString('
' + src_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + paywall.innerHTML = ''; + paywall.appendChild(content_new); + } + }) + } + }) + } +} + +else if (matchDomain(['crikey.com.au', 'smartcompany.com.au', 'themandarin.com.au'])) { + let ads = 'div.wp-block-pm-ad-placeholder-block'; + hideDOMStyle(ads); +} + +else if (matchDomain('forbes.com.au')) { + setCookie('blaize_session', '', 'forbes.com.au', '/', 0); + getJsonUrl('div[class*="_gate"]', '', 'div.article-page__content-body'); + let fade = document.querySelector('div[style*="background-image: linear-gradient"]'); + removeDOMElement(fade); +} + +else if (matchDomain('macrobusiness.com.au')) { + let paywall = pageContains('div > p', 'The full text of this article is available'); + if (paywall[0]) { + let fade = document.querySelector('div.bg-gradient-to-t'); + removeDOMElement(paywall[0].parentNode, fade); + let json_script = document.querySelector('script#__NUXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + let json_text = json.filter(x => typeof x === 'string' && x.match(/(<|\\u003C)p>/))[0]; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + let article = document.querySelector('div.content'); + if (article) { + article.innerHTML = ''; + article.appendChild(content_new); + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('nzherald.co.nz')) { + // use bpc adblocker filter + let premium_toaster = '#premium-toaster'; + hideDOMStyle(premium_toaster); +} + +else if (matchDomain('spectator.com.au')) { + getJsonUrl('section.paywall', '', 'div.article-body', {art_append: 1}); +} + +else if (matchDomain('thesaturdaypaper.com.au')) { + let hide_end = document.querySelector('div.hide-end'); + if (hide_end) + refreshCurrentTab(); + let paywall = document.querySelector('div.paywall-hard-always-show'); + removeDOMElement(paywall); +} + +else if (matchDomain(['brisbanetimes.com.au', 'smh.com.au', 'theage.com.au', 'watoday.com.au'])) { + if (!window.location.hostname.startsWith('amp.')) { + amp_redirect('head > meta[content^="FOR SUBSCRIBERS"], #paywall_prompt'); + } else { + amp_unhide_subscr_section(); + } +} + +else { + // Australian Community Media newspapers + let au_comm_media_domains = ['bendigoadvertiser.com.au', 'bordermail.com.au', 'canberratimes.com.au', 'centralwesterndaily.com.au', 'dailyadvertiser.com.au', 'dailyliberal.com.au', 'examiner.com.au', 'illawarramercury.com.au', 'newcastleherald.com.au', 'northerndailyleader.com.au', 'standard.net.au', 'theadvocate.com.au', 'thecourier.com.au', 'westernadvocate.com.au']; + let au_comm_media_link = document.querySelector('a[href^="https://austcommunitymedia.my.site.com/"]'); + if (matchDomain(au_comm_media_domains) || au_comm_media_link) { + let mask = document.querySelector('div[class^="gradient-mask-"]'); + if (mask) { + mask.removeAttribute('class'); + let div_hidden = document.querySelectorAll('div.flex-col div.hidden'); + for (let elem of div_hidden) + elem.classList.remove('hidden'); + } else { + let subscribe_truncate = document.querySelector('.subscribe-truncate'); + if (subscribe_truncate) + subscribe_truncate.classList.remove('subscribe-truncate'); + let subscriber_hiders = document.querySelectorAll('.subscriber-hider'); + for (let subscriber_hider of subscriber_hiders) + subscriber_hider.classList.remove('subscriber-hider'); + } + let noscroll = document.querySelectorAll('html[style], body[style]'); + for (let elem of noscroll) + elem.removeAttribute('style'); + let story_generic_iframe = '.story-generic__iframe'; + let blocker = 'div.blocker'; + let overlays = 'div.transition-all, div[id^="headlessui-dialog"]'; + let ads = '.ad-placeholder, .sticky, [id*="-container"], #hindsight-ads-iframe'; + hideDOMStyle(story_generic_iframe + ', ' + blocker + ', ' + overlays + ', ' + ads); + } else if (window.location.hostname.endsWith('.com.au')) { + // Australia News Corp + let au_news_corp_domains = ['adelaidenow.com.au', 'cairnspost.com.au', 'codesports.com.au', 'couriermail.com.au', 'dailytelegraph.com.au', 'geelongadvertiser.com.au', 'goldcoastbulletin.com.au', 'heraldsun.com.au', 'theaustralian.com.au', 'thechronicle.com.au', 'themercury.com.au', 'townsvillebulletin.com.au', 'weeklytimesnow.com.au']; + if (matchDomain(au_news_corp_domains) || matchDomain('ntnews.com.au')) { + let url = window.location.href; + if (window.location.pathname.startsWith('/subscribe/') && !url.includes('/digitalprinteditions')) { + let og_url = document.querySelector('head > meta[property="og:url"][content]'); + if (og_url) { + let url_new = og_url.content; + if (matchDomain('ntnews.com.au')) { + let article = document.querySelector('div.dsf-article-preview'); + if (article) { + article.before(googleSearchToolLink(url_new)); + } + } else { + url_new += '?amp'; + window.setTimeout(function () { + window.location.href = url_new; + }, 500); + } + } + } else if (window.location.search.match(/[&\?]amp/)) { + amp_unhide_subscr_section('[id^="ad-mrec-"]', false); + let figure_stretch = document.querySelectorAll('figure.stretch'); + for (let elem of figure_stretch) + elem.classList.remove('stretch'); + let comments = document.querySelector('#comments-load, .comments-module'); + removeDOMElement(comments); + } else { + if (window.location.pathname.includes('/video/') && document.querySelector('div.vms-premium-video')) + header_nofix('div.video-hub'); + let ads = '.header_ads-container, .ad-block'; + hideDOMStyle(ads); + } + } else { + // Australian Seven West Media + if (matchDomain('thewest.com.au') || document.querySelector('head > link[href="https://images.thewest.com.au"]')) { + function thewest_main(node) { + let filter = /^window\.PAGE_DATA\s?=\s?/; + let json_script = getSourceJsonScript(filter); + if (json_script) { + let json_text = json_script.text.split(filter)[1]; + json_text = json_text.replace(/:undefined([,}])/g, ':"undefined"$1'); + try { + let json_article = JSON.parse(json_text); + let json_pub; + for (let key in json_article) { + let json_resolution = json_article[key].data.result.resolution; + if (json_resolution && json_resolution.publication) { + json_pub = json_resolution.publication; + break; + } + } + let json_content = []; + let url_loaded; + if (json_pub) { + json_content = json_pub.content.blocks; + url_loaded = json_pub._self; + } else + refreshCurrentTab(); + //let json_video = json_pub.mainVideo; + let url = window.location.href; + if (!url_loaded || !url.includes(url_loaded.slice(-10))) + refreshCurrentTab(); + let par_elem, par_sub1, par_sub2; + let par_dom = document.createElement('div'); + let tweet_id = 1; + for (let par of json_content) { + par_elem = ''; + if (par.kind === 'text') { + par_elem = document.createElement('p'); + par_elem.innerText = par.text; + } else if (par.kind === 'subhead') { + par_elem = document.createElement('h2'); + par_elem.innerText = par.text; + } else if (par.kind === 'pull-quote') { + par_elem = document.createElement('i'); + par_elem.innerText = (par.attribution ? par.attribution + ': ' : '') + par.text; + } else if (par.kind === 'embed') { + if (par.reference.includes('https://omny.fm/') || par.reference.includes('https://docdro.id/')) { + par_elem = document.createElement('embed'); + par_elem.src = par.reference; + par_elem.style = 'height:500px; width:100%'; + par_elem.frameborder = '0'; + } else { + par_elem = document.createElement('a'); + par_elem.href = par.reference; + par_elem.innerText = par.reference.split('?')[0]; + console.log('embed: ' + par.reference); + } + } else if (par.kind === 'unordered-list') { + if (par.items) { + par_elem = document.createElement('ul'); + for (let item of par.items) + if (item.text) { + par_sub1 = document.createElement('li'); + if (item.intentions[0] && item.intentions[0].href) { + par_sub2 = document.createElement('a'); + par_sub2.href = item.intentions[0].href; + } else { + par_sub2 = document.createElement('span'); + } + par_sub2.innerText = item.text; + par_sub1.appendChild(par_sub2); + par_elem.appendChild(par_sub1); + } + } + } else if (par.kind === 'inline') { + if (par.asset.kind === 'image' && par.asset.original && par.asset.original.reference) { + par_elem = makeFigure(par.asset.original.reference, par.asset.captionText, {style: 'width:100%'}); + } + } else if (par.kind === 'inline-related') { + par_elem = document.createElement('p'); + if (par.publications) { + for (let elem of par.publications) { + let par_link = document.createElement('a'); + par_link.href = elem._self; + par_link.innerText = elem.heading; + par_elem.appendChild(par_link); + par_elem.appendChild(document.createElement('br')); + } + } + } else { + par_elem = document.createElement('p'); + par_elem.innerText = par.text; + console.log(par.kind); + } + if (par_elem) + par_dom.appendChild(par_elem); + } + let content = document.querySelector('div[class*="StyledArticleContent"]'); + if (content) { + content.innerHTML = ''; + content.appendChild(par_dom); + } else { + par_dom.setAttribute('style', 'margin: 20px;'); + node.before(par_dom); + } + } catch (err) { + console.log(err); + } + } + removeDOMElement(node); + } + let paywall_sel = 'div.paywall div[data-testid*="BreachScreen"], div[class*="StyledBreachWallContent"]'; + let paywall = document.querySelector(paywall_sel); + if (paywall) + thewest_main(paywall); + else { + waitDOMElement(paywall_sel, 'DIV', thewest_main, true); + } + let ads = 'div.headerAdvertisement, div.disabled-ad'; + hideDOMStyle(ads); + } else if (document.querySelector('head > link[rel="dns-prefetch"][href="//static.ew.mmg.navigacloud.com"]')) { // McPherson Media Group + let paywall = document.querySelector('div#content-Load-message'); + if (paywall) { + removeDOMElement(paywall); + let lockable = document.querySelectorAll('div[id^="lockable-"]'); + for (let elem of lockable) { + elem.removeAttribute('style'); + elem.removeAttribute('id'); + } + let gradient = document.querySelector('div.gradienttext'); + if (gradient) + gradient.removeAttribute('class'); + } + } + } + } +} + +} else if ((window.location.hostname.match(/\.(ie|uk)$/) && !matchDomain(['vogue.co.uk'])) || matchDomain(['apollo-magazine.com', 'autosport.com', 'decanter.com', 'fnlondon.com', 'ft.com', 'gbnews.com', 'granta.com', 'motorsportmagazine.com', 'newstatesman.com', 'scotsman.com', 'tes.com', 'thelawyer.com', 'thetimes.com', 'unherd.com'])) {//united kingdom/ireland + +if (matchDomain('apollo-magazine.com')) { + setCookie('blaize_session', '', 'apollo-magazine.com', '/', 0); + let banner = document.querySelector('#subscribe-ribbon'); + removeDOMElement(banner); +} + +else if (matchDomain('autocar.co.uk')) { + let paywall = document.querySelector('div.ms-block, div.register-block'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let article = document.querySelector('div.block-node'); + if (json_text && article) { + article.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + let fade = document.querySelector('div.article-section > div[style*="max-height"]'); + removeDOMElement(fade); + let url = window.location.href; + article.append(article_new, 'Text-only > for missing media/links: ', googleSearchToolLink(url)); + } + } + } + } + let ads = 'div[class*="-ads-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('autosport.com')) { + header_nofix('div.ms-article-content > p', 'div.ms-piano_article-banner'); +} + +else if (matchDomain(['belfasttelegraph.co.uk', 'independent.ie'])) { + let paywall = document.querySelector('div[class*="_fadetowhite"]'); + if (paywall) { + let content = document.querySelector('script[data-fragment-type="ArticleContent"]'); + if (content) { + removeDOMElement(paywall); + let flip_pay = 'div#flip-pay'; + hideDOMStyle(flip_pay, 5); + let intro = document.querySelector('div > div[data-auth-intro="article"]'); + if (intro) { + let intro_par = intro.querySelector('p[class]'); + let intro_par_class; + if (intro_par) + intro_par_class = intro_par.getAttribute('class'); + let content_text = content.innerText; + if (content_text.includes('__PRELOADED_STATE_GRAPH')) { + content_text = content_text.replace(/window\["__PRELOADED_STATE_GRAPH__.+"\]\s=\s/, ''); + try { + let json = JSON.parse(content_text); + if (Object.keys(json).length) { + let key = Object.keys(json)[0]; + let pars = json[key].data.article.body; + let parser = new DOMParser(); + for (let par of pars) { + for (let type in par) { + let item = par[type]; + let elem = document.createElement('p'); + elem.setAttribute('style', "margin: 10px;"); + if (type === 'bullet_list') { + let ul = document.createElement('ul'); + for (let sub_item of item) { + li.innerText = parseHtmlEntities(sub_item.replace(/<[^<]*>/g, '')); + li.innerText = sub_item; + ul.appendChild(li); + } + elem.appendChild(ul); + } else if (type === 'image') { + let url = item.url; + if (item.cropped && item.cropped.url) + url = item.cropped.url; + let figure = makeFigure(url, item.caption); + elem.appendChild(figure); + } else if (type === 'related') { + if (item.articles) { + let articles = item.articles; + for (let article of articles) { + let elem_link = document.createElement('a'); + elem_link.href = article.webcmsRelativeUrl; + elem_link.innerText = article.title; + elem_link.style = 'text-decoration: underline;'; + elem.append(elem_link, document.createElement('br')); + } + } + } else if (!['ad', 'quote', 'streamone'].includes(type)) { + let html = parser.parseFromString('

' + item + '

', 'text/html'); + elem = html.querySelector('p'); + let error_iframes = elem.querySelectorAll('iframe[allow*="fullscreen"][allowfullscreen]'); + for (let iframe of error_iframes) + iframe.removeAttribute('allowfullscreen'); + if (!['p', 'subhead', 'legacy-ml'].includes(type)) { + console.log(type); + console.log(item); + } + } + window.setTimeout(function () { + if (elem) + intro.parentNode.appendChild(elem); + }, 500); + } + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + let ads = 'div.ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('businesspost.ie')) { + function bpie_main() { + if ($) { + let article_id_dom = document.querySelector('article[id]'); + let article_id; + if (article_id_dom) + article_id = article_id_dom.id; + if (article_id) { + let bp_ajaxurl = 'https://www.businesspost.ie/wp-admin/admin-ajax.php'; + let data_ajax = { + action: 'fetch_article_content', + type: 'POST', + data: { + id: article_id + }, + dataType: 'json', + contentType: 'application/json' + }; + $.ajax({ + type: 'POST', + url: bp_ajaxurl, + data: data_ajax, + success: function (data) { + $('main article .article-body-section').html(data); + } + }); + } + } else + refreshCurrentTab(); + } + window.setTimeout(function () { + let paywall = document.querySelector('div#bp_paywall_content'); + let article_id_dom = document.querySelector('article[id]'); + let article_id; + if (article_id_dom) + article_id = article_id_dom.id; + if (paywall || article_id) { + removeDOMElement(paywall); + insert_script(bpie_main); + } + }, 500); +} + +else if (matchDomain('decanter.com')) { + let paywall = document.querySelector('div[id^="react_subscriber_content_"]'); + if (paywall) { + removeDOMElement(paywall); + let data = document.querySelector('div[data-dom-id^="react_subscriber_content_"][data-props]'); + if (data) { + try { + let json = JSON.parse(data.getAttribute('data-props')); + if (json && json.content) { + let content = decode_utf8(atob(json.content)); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + content + '
', 'text/html'); + let content_new = doc.querySelector('div'); + data.before(content_new); + header_nofix('div.collection-wrapper', '', 'BPC > no fix for reviews'); + let fade = 'div.piano-container-fade'; + hideDOMStyle(fade); + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('fnlondon.com')) { + func_post = function () { + if (mobile) { + let lazy_images = document.querySelectorAll('picture > img[loading="lazy"][style]'); + for (let elem of lazy_images) { + elem.style = 'width: 95%;'; + elem.parentNode.removeAttribute('style'); + } + } + } + let url = window.location.href; + getArchive(url, 'div[data-testid="articleSignInSubscribeWrapper"]', '', 'article'); + let fade = 'div#cx-snippet'; + hideDOMStyle(fade); + function fnlondon_main(node) { + window.setTimeout(function () { + let signin_links = node.querySelectorAll('a[href^="https://www.fnlondon.com/client/login?target="]'); + for (let elem of signin_links) { + elem.href = '#';//elem.href.split('target=')[1].split('&')[0]; + elem.innerText = 'Open'; + elem.addEventListener('click', function () { window.location.reload(); }); + } + }, 500); + } + waitDOMElement('div[id^="continuous_article_"]', 'DIV', fnlondon_main, true); +} + +else if (matchDomain('ft.com')) { + func_post = function () { + let lazy_images = document.querySelectorAll('figure > picture > img[loading="lazy"][src^="data:image/gif"][new-cursrc]'); + for (let elem of lazy_images) { + elem.removeAttribute('loading'); + elem.style = 'width: 100%;'; + let figure = elem.parentNode.parentNode; + if (figure.parentNode && figure.parentNode.nodeName === 'DIV') + figure.parentNode.removeAttribute('style'); + elem.src = elem.getAttribute('new-cursrc'); + } + if (mobile) { + let grids = document.querySelectorAll('div[style*="grid-template-areas"], article#site-content'); + for (let elem of grids) + elem.style = 'margin: 10px;'; + } + } + let url = window.location.href; + getArchive(url, 'div#barrier-page', '', 'div.n-layout__row--content', '', 'div[style*="article-body"]', 'body'); +} + +else if (matchDomain('gbnews.com')) { + let ads = 'div.ad--billboard, div.ad--placeholder, div.video-inbody'; + hideDOMStyle(ads); +} + +else if (matchDomain('granta.com')) { + getJsonUrl('div.article-sign-up-container', '', 'div.article-excerpt'); +} + +else if (matchDomain('literaryreview.co.uk')) { + getJsonUrl('p.subscribe-for-more', '', 'div#_articlereview'); +} + +else if (matchDomain('motorsportmagazine.com')) { + getJsonUrl('aside.paywall', '', 'div[data-behaviour="post-content"]'); + let banner = document.querySelector('div[data-behaviour="react-paywall-threshold"]'); + removeDOMElement(banner); + let ads = 'aside.ad-space'; + hideDOMStyle(ads); +} + +else if (matchDomain('newstatesman.com')) { + let ads = 'div.ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('spectator.co.uk')) { + setCookie(['blaize_session', 'userArticleViews'], '', 'spectator.co.uk', '/', 0); + let paywall_sel = 'section.paywall, div.paywall-magazine'; + let entry_content = document.querySelector('div.entry-content'); + if (entry_content) + getJsonUrl(paywall_sel, '', 'div.entry-content', {art_append: 1}); + else + getJsonUrl(paywall_sel, '', 'div.entry-content__wrapper', {art_append:1, art_hold:1, art_class: 'entry-content'}); + let ads = '#subscribe-ribbon, div.ad-slot, div[style*="background-image: linear-gradient"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('stylist.co.uk')) { + let paywall = document.querySelector('div[data-testid="paywall-component"]'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json.props.pageProps.data.post.acf.widgets) { + let url_next = json.props.pageProps.data.post.id; + if (url_next && !window.location.pathname.endsWith(url_next)) + refreshCurrentTab(); + let pars = json.props.pageProps.data.post.acf.widgets; + let first_par = document.querySelector('main div[data-column="true"] > p'); + if (first_par) { + let article = first_par.parentNode; + let teaser = article.querySelectorAll('div > p:not([class])'); + removeDOMElement(...teaser); + if (article) { + let parser = new DOMParser(); + for (let par of pars) { + let elem = document.createElement('p'); + if (par.paragraph) { + let content = par.paragraph; + let content_new = parser.parseFromString('
' + content + '
', 'text/html'); + elem = content_new.querySelector('div'); + } else if (par.acf_fc_layout === 'heading') { + if (par.text) + elem.appendChild(document.createTextNode(par.text)); + } else if (['image', 'interactive_image'].includes(par.acf_fc_layout)) { + let image_array = []; + if (par.image) + image_array = [par.image]; + else if (par.image_collection) + image_array = par.image_collection; + for (let img_elem of image_array) { + let figure = makeFigure(img_elem.url, img_elem.caption ? (img_elem.caption + ' ' + img_elem.description) : img_elem.alt, {alt: img_elem.alt, style: 'width: 95%;'}); + elem.appendChild(figure); + } + } else if (par.acf_fc_layout === 'listicle') { + let ul = document.createElement('ul'); + for (let sub_item of par.item) { + let li = document.createElement('li'); + if (sub_item.url) { + let par_link = document.createElement('a'); + par_link.href = sub_item.url; + par_link.innerText = sub_item.title; + par_link.target = '_blank'; + li.appendChild(par_link); + } else + li.innerText = sub_item.title; + if (sub_item.paragraph) { + let content = sub_item.paragraph; + let content_new = parser.parseFromString('
' + content + '
', 'text/html'); + let par_elem = content_new.querySelector('div'); + li.appendChild(par_elem); + } + if (sub_item.image) { + let img = document.createElement('img'); + img.src = sub_item.image.url; + img.alt = sub_item.image.alt; + img.style = 'width: 95%;'; + li.appendChild(img); + li.appendChild(document.createElement('br')); + } + li.style = 'font-size: 20px; margin: 20px 0px;'; + ul.appendChild(li); + } + elem.appendChild(ul); + } else if (par.embed_link) { + let par_link = document.createElement('a'); + par_link.href = par.embed_link; + par_link.innerText = 'Embedded link: ' + par.embed_link; + par_link.target = '_blank'; + elem.appendChild(par_link); + } else if (par.acf_fc_layout === 'divider') { + elem.appendChild(document.createElement('hr')); + } else if (par.acf_fc_layout === 'related_articles') { + if (par.posts) { + for (let post of par.posts) { + if (post.link && post.title.rendered) { + let par_link = document.createElement('a'); + par_link.href = post.link; + par_link.innerText = 'You may also like: ' + post.title.rendered; + elem.appendChild(par_link); + elem.appendChild(document.createElement('br')); + } + } + } + } else if (!['newsletter_signup', 'pull-quote'].includes(par.acf_fc_layout)) + console.log(par); + if (elem.hasChildNodes()) { + elem.style = 'font-family: "Source Serif Pro"; font-size: 20px; line-height: 34px;'; + article.appendChild(elem); + } + } + } + } + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('telegraph.co.uk')) { + let subwall = '[class^="subwall"]'; + let ads = '.advert, .commercial-unit'; + hideDOMStyle(subwall + ', ' + ads); +} + +else if (matchDomain('tes.com')) { + let paywall = document.querySelector('div.tg-paywall-message'); + if (paywall) { + removeDOMElement(paywall); + let overlay = document.querySelector('div.tg-paywall-body-overlay'); + if (overlay) + overlay.removeAttribute('class'); + } + let banner = document.querySelector('div.js-paywall-info'); + removeDOMElement(banner); +} + +else if (matchDomain('the-tls.co.uk')) { + getJsonUrl('div.tls-single-article__closed-paywall', '', 'div.tls-article-body', {art_class: 'tls-article-body'}); + let fade = 'div.tls-single-article__closed-paywall-wrapper'; + let ads = 'div[class*="tls-single-article__ad-slot"]'; + hideDOMStyle(fade + ', ' + ads); +} + +else if (matchDomain('thelawyer.com')) { + if (window.location.pathname.startsWith('/mda/')) { + header_nofix('div.sf-content__post', 'div.sf-login-form', 'BPC > no fix'); + } else if (true) { + let body = document.querySelector('body[class*="postid-"]'); + if (body) { + let article_id = body.className.split('postid-')[1].split(' ')[0]; + if (article_id) { + func_post = function () { + let lazy_images = document.querySelectorAll('img.lazy[data-src]:not([src])'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-src'); + elem.removeAttribute('class'); + } + } + getJsonUrl('div.sf-login-form', '', 'div.sf-content-body__text', {art_append: 1}, article_id, '', false, true); + } + } + } +} + +else if (matchDomain('theneweuropean.co.uk')) { + let paywall = document.querySelector('div[data-show-fade-on-noaccess]'); + if (paywall) { + removeDOMElement(paywall); + let content = document.querySelector('div[data-show-has-access]'); + if (content) + content.removeAttribute('data-show-has-access'); + } + let banners = document.querySelectorAll('div[data-show-subs-blocked]'); + removeDOMElement(...banners); +} + +else if (matchDomain('thenewslens.com')) { + let paywall = document.querySelector('div.article-mask-box'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let article = document.querySelector('section.article-body'); + if (json_text && article) { + let article_text = article.innerText.replace(/\n/g, ''); + let split = json_text.split('。'); + for (let elem of split) { + if (!elem.includes('(function(') && !article_text.includes(elem)) { + let par_new = document.createElement('p'); + par_new.innerText = elem + '。'; + article.append(par_new); + } + } + } + } + } + } +} + +else if (matchDomain('thestage.co.uk')) { + let url = window.location.href; + getArchive(url, 'div#ao-MeteringDNAllow', '', 'div[id^="aos-FeatureArticle2Col-"], div[id^="aos-ReviewArticle-"]'); +} + +else if (matchDomain(['thesun.co.uk', 'thescottishsun.co.uk'])) { + let ads = 'div.billboard, div.advert-wrapper'; + hideDOMStyle(ads); +} + +else if (matchDomain('thetimes.com')) { + if (!matchDomain('epaper.thetimes.com')) { + func_post = function () { + let article = document.querySelector(article_sel); + if (article) { + if (mobile) { + let inline_images = article.querySelectorAll('img[style]'); + for (let elem of inline_images) { + elem.style = 'display: block; margin-left: auto; margin-right: auto; width: 90%;'; + let parent_node = elem.parentNode; + if (parent_node.tagName === 'PICTURE') + parent_node = parent_node.parentNode; + parent_node.removeAttribute('style'); + } + } + let embed_iframes = article.querySelectorAll('div > times-embed-iframe-max[src]'); + for (let elem of embed_iframes) { + let iframe_link = document.createElement('a'); + iframe_link.href = iframe_link.innerText = elem.getAttribute('src'); + iframe_link.target = '_blank'; + let container = elem.parentNode; + container.parentNode.replaceChild(iframe_link, container); + } + } + } + let article_sel = 'article:not([id]) > div'; + if (!window.location.search.startsWith('?shareToken=')) { + let teaser = document.querySelector('body[data-view-name="teaser-article"]'); + if (teaser) { + let url = window.location.href; + getArchive(url, 'div#paywall-portal-article-footer', '', article_sel); + let scroll_style = 'html, body {overflow: auto !important;}'; + addStyle(scroll_style); + } + } + let banners = 'div#paywall-portal-page-footer, .subscription-block'; + let ads = 'div.channel-header-ad, div[id^="advert-"], div[class*="InlineAdWrapper"], div:has(> div > div#ad-header)'; + hideDOMStyle(banners + ', ' + ads); + } +} + +else if (matchDomain('unherd.com')) { + let preview = document.querySelector('div#premiumpreview'); + if (preview) { + removeDOMElement(preview); + let premium = document.querySelector('div#premiumcontent'); + if (premium) + premium.removeAttribute('id'); + } +} + +else if (matchDomain(uk_nat_world_domains) || document.querySelector('footer > div a[href^="https://www.nationalworldplc.com"]')) { + let premium = document.querySelector('div.premium.no-entitlement'); + if (premium) + premium.classList.remove('premium', 'no-entitlement'); + let ads = 'div[class^="MarkupAds__Container-"], div[class*="_AdContainer-"], div[class^="Dailymotion__Wrapper-"], div.banner'; + hideDOMStyle(ads); +} + +} else { + +if (matchDomain(usa_adv_local_domains)) { + if (!window.location.search.startsWith('?outputType=amp')) { + amp_redirect('div.paywall', '', window.location.pathname + '?outputType=amp'); + } + let ads = 'div.ad, div.ad-inner, div.ad-unit, div#below-toprail, div[id^="taboola"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('adweek.com')) { + setCookie('blaize_session', '', '.www.adweek.com', '/', 0); + let paywall = document.querySelector('div#paywall-subscribe'); + if (paywall) { + let fade = document.querySelector('div[style*="linear-gradient"]'); + removeDOMElement(paywall, fade); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.sharedContent.articleBody; + let content = document.querySelector('div.aw-article-content'); + if (json_text && content) { + let url = window.location.href; + content.before(archiveLink(url)); + content.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.appendChild(article_new); + } + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('ajc.com')) { + let paygate = document.querySelector('div.story-paygate_placeholder'); + if (paygate) + paygate.removeAttribute('class'); + let video_blocker = document.querySelector('div.video-blocker'); + removeDOMElement(video_blocker); +} + +else if (matchDomain('americanbanker.com') || matchDomain(usa_arizent_custom_domains)) { + let inline_gate = document.querySelector('.inline-gate'); + if (inline_gate) { + inline_gate.classList.remove('inline-gate'); + let inline_gated = document.querySelectorAll('.inline-gated'); + for (let elem of inline_gated) + elem.classList.remove('inline-gated'); + } +} + +else if (matchDomain('artnet.com')) { + if (window.location.pathname.endsWith('/amp-page')) { + amp_unhide_subscr_section(); + } else { + let body_hidden = document.querySelector('.article-body'); + if (body_hidden) + body_hidden.style = 'display:block;'; + let banner = document.querySelector('div[id^="issuem-leaky-paywall-"]'); + removeDOMElement(banner); + } +} + +else if (matchDomain('asia.nikkei.com')) { + let paywall = document.querySelector('div#paywall-offer'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div#article-body-preview > div'); + if (article) { + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.data.body) { + let json_text = json.props.pageProps.data.body; + if (!json_text.includes('
')) + json_text = '
' + json_text + '
'; + let parser = new DOMParser(); + let doc = parser.parseFromString(json_text, 'text/html'); + let article_new = doc.querySelector('div'); + article.parentNode.replaceChild(article_new, article); + } else + refreshCurrentTab(); + } catch (err) { + console.log(err); + } + } + } + } + let banners = 'div#pianoj_ribbon, div#paywall-offer'; + hideDOMStyle(banners); +} + +else if (matchDomain('axios.com')) { + function axios_noscroll(node) { + node.removeAttribute('style'); + let overlay = 'div[class^="Modal_paywall"], div[class^="Modal_cta"]'; + hideDOMStyle(overlay, 2); + } + let noscroll = document.querySelector('html[style]'); + if (noscroll) + axios_noscroll(noscroll); + waitDOMAttribute('html', 'HTML', 'style', axios_noscroll, true); + let banners = 'div[data-cy="pro-paywall"], div.apexAd, div[class*="NativeAd"], span[data-ad-type]'; + hideDOMStyle(banners); +} + +else if (matchDomain('balkaninsight.com')) { + getJsonUrl('div.subscribeWrapper', '', 'div.post_teaser', {art_append: 1, art_hold: 1}); +} + +else if (matchDomain(['barandbench.com', 'theleaflet.in', 'thenewsminute.com'])) { + let paywall = document.querySelector('div[id*="paywall-banner"]'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.paywall'); + if (article) { + let article_new = getArticleQuintype(); + if (article_new && article.parentNode) + article.parentNode.replaceChild(article_new, article); + } + } +} + +else if (matchDomain('barrons.com')) { + if (window.location.pathname.startsWith('/livecoverage/')) { + window.setTimeout(function () { + fix_dowjones_live(); + }, 1500); + } else { + let paywall = document.querySelector('div#cx-interstitial-snippet, div[data-id^="ArticleRoadblock_"]'); + if (paywall) { + removeDOMElement(paywall); + window.setTimeout(function () { + let articles = document.querySelectorAll('article > div.crawler'); + let article; + for (let elem of articles) { + let paragraph = elem.querySelector('p[class*="Paragraph"]'); + if (paragraph) { + article = elem; + break; + } + } + if (article) { + let article_id_dom = document.querySelector('head > meta[name="article.id"][content]'); + if (article_id_dom) { + let article_id = article_id_dom.content; + let url_src = 'https://barrons.djmedia.djservices.io/apps/barrons/theaters/default-article?screen_ids=' + article_id; + let x_access_token = "eyJhbGciOiJSUzI1NiJ9.WFZsaHN3MXd3Smw0V3kwRXBzclQ.qwwBedAUNXHTQchowQZ5zMwmnXqDKeMhoRJlkB7drjWmb0ktZCScIhq5lpIiWaMyNJA_ODYgHAfIoi7DKWkS8g8GunFNAXpJDUOLdI2rtQkTEi_E3o90rdZHunPR7p0ULjRmHCnDofAdpTQdJtTXjQ9eEDZT2xoooVGdBpoVKhE"; + getExtFetch(url_src, '', {"app-identifier": "http://com.news.screens", "device-type": "phone", "x-access-token": x_access_token}, main_barrons); + function main_barrons(url_src, data) { + try { + if (data) { + let json = JSON.parse(data); + if (json && json.screens[0] && json.screens[0].frames) { + let pars = json.screens[0].frames; + let par_class; + let intro = article.querySelector('p[class]'); + if (intro) + par_class = intro.className; + let body_first = true; + article.innerHTML = ''; + for (let par of pars) { + let elem = document.createElement('p'); + if (par_class) + elem.className = par_class; + if (par.type === 'body') { + if (par.body && par.styleID !== 'article-summary-body') { + if (body_first && intro) { + elem = intro; + body_first = false; + } else + elem.innerText = par.body.text.replace(/\s_/g, ''); + } + } else if (par.type === 'listelement') { + if (par.body) + elem.innerText = ' • ' + par.body.text; + } else if (par.type === 'image') { + if (par.image && par.image.url) { + let caption = (par.caption ? par.caption.text + ' - ' : '') + (par.credit ? par.credit.text : ''); + elem = makeFigure(par.image.url, caption, {style: 'width: 80%; margin: auto;'}); + } + } else if (par.type === 'dynamicinset') { + if (par.webview && par.webview.value) { + let iframe = document.createElement('iframe'); + iframe.src = par.webview.value; + iframe.style = 'height: 600px; width: 100%; border: none;'; + elem.appendChild(iframe); + } + } else if (par.type === 'video') { + let video_thumbnail = makeFigure(par.thumbnail.url, par.description.text, {style: 'width: 80%; margin: auto;'}); + let video_link = document.createElement('a'); + video_link.href = par.url; + video_link.innerText = 'Video-link (open in media player): ' + par.url; + elem.append(video_thumbnail, video_link); + } else if (!['ad', 'audioplayer', 'byline', 'caption', 'title'].includes(par.type)) { + console.log(par); + } + if (elem.hasChildNodes()) + article.appendChild(elem); + } + } + } + } catch (err) { + console.log(err); + } + } + } + } + }, 2000); + } + } + let signin_links = document.querySelectorAll('p > a[href^="https://www.barrons.com/client/login"][href*="target="]'); + for (let elem of signin_links) { + elem.href = decodeURIComponent(elem.href.split('target=')[1].split('&')[0]); + elem.innerText = 'Open'; + elem.target = '_top'; + } + let ads = document.querySelectorAll('div[class] > div.uds-ad-container'); + for (let ad of ads) + hideDOMElement(ad.parentNode); +} + +else if (matchDomain('benzinga.com')) { + function benz_main(node) { + removeDOMElement(node); + let blurred = document.querySelector('div.article-content-paywalled'); + if (blurred) { + blurred.classList.remove('article-content-paywalled'); + let key_points = document.querySelectorAll('li.blur-sm'); + for (let elem of key_points) + elem.classList.remove('blur-sm'); + let article = document.querySelector('div#article-body'); + if (article) { + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.article.primaryImage) { + let img_data = json.props.pageProps.article.primaryImage; + if (img_data.url) { + let img = document.createElement('img'); + img.src = img_data.url; + img.alt = img_data.alt; + article.before(img); + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + waitDOMElement('div.paywall-content', 'DIV', benz_main, false); +} + +else if (matchDomain('bhaskar.com')) { + if (!window.location.pathname.startsWith('/amp/')) { + let paywall_sel = 'div.paywallBlockedContent'; + let paywall = document.querySelector(paywall_sel); + if (paywall) { + let banner = document.querySelector(paywall_sel + ' ~ div'); + if (banner) + removeDOMElement(banner); + paywall.removeAttribute('class'); + } + let ads = document.querySelectorAll('div[style*="overflow:hidden"][style*="max-height:"], div[id^="Ad--"], article div:empty'); + if (ads) + removeDOMElement(...ads); + } else + ampToHtml(); +} + +else if (matchDomain('bizjournals.com')) { + if (window.location.pathname.includes('/subscriber-only/')) { + header_nofix('div.primary'); + } else { + let paywall_content = document.querySelectorAll('.paywall-content[style]'); + for (let elem of paywall_content) + elem.removeAttribute('style'); + window.setTimeout(function () { + let dialog = document.querySelector('div[id^="headlessui-dialog-"], div.sheet-overlay'); + if (dialog) { + removeDOMElement(dialog); + let html = document.querySelector('html[style]'); + if (html) + html.removeAttribute('style'); + let overlays = document.querySelectorAll('html.is-overlaid, body.is-overlaid'); + for (let elem of overlays) + elem.classList.remove('is-overlaid'); + let nuxt_inert = document.querySelector('div#__nuxt[inert]'); + if (nuxt_inert) + nuxt_inert.removeAttribute('inert'); + } + }, 1000); + } + let ads = 'div.adwrap'; + hideDOMStyle(ads); +} + +else if (matchDomain('bloomberg.com')) { + let paywall_sel = 'div[id^="fortress-"]'; + let leaderboard = 'div[id^="leaderboard"], div[class^="leaderboard"], div.canopy-container'; + let ads = 'div[data-ad-status], div[data-ad-type], div[class*="FullWidthAd_"], div.adWrapper'; + hideDOMStyle(paywall_sel + ', ' + leaderboard + ', ' + ads); + waitDOMElement(paywall_sel, 'DIV', removeDOMElement, true); + waitDOMAttribute('body', 'BODY', 'data-paywall-overlay-status', node => node.removeAttribute('data-paywall-overlay-status'), true); + if (window.location.pathname.startsWith('/live/')) { + setInterval(function () { + window.localStorage.clear(); + }, 15 * 60 * 1000); + } else + window.localStorage.clear(); + window.setTimeout(function () { + let shimmering = document.querySelector('article.first-story div[class*="Placeholder_placeholderParagraphWrapper-"]'); + if (shimmering) { + header_nofix(shimmering.parentNode, '', 'BPC > disable Dark Reader or enable JavaScript for site'); + } + }, 5000); +} + +else if (matchDomain('bloombergadria.com')) { + let article_hidden = document.querySelector('article[style]'); + if (article_hidden) + article_hidden.removeAttribute('style'); + let ads = '.banner'; + hideDOMStyle(ads); +} + +else if (matchDomain('bostonglobe.com')) { + if (window.location.search.startsWith('?outputType=amp')) + amp_unhide_subscr_section(); +} + +else if (matchDomain('business-standard.com')) { + function bs_main(node) { + removeDOMElement(node); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.data.htmlContent) { + let json_text = json.props.pageProps.data.htmlContent; + let content = document.querySelector('div[class^="MainStory_storycontent__"'); + if (json_text && content) { + content.innerHTML = ''; + let intro = content.querySelectorAll('div:not([class]'); + removeDOMElement(...intro); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + window.setTimeout(function () { + content.appendChild(content_new); + }, 1000); + } + } else + refreshCurrentTab(); + } catch (err) { + console.log(err); + } + } + } + if (!window.location.pathname.startsWith('/amp/')) { + if (true) { + let paywall_sel = 'div.subscribe-page'; + let paywall = document.querySelector(paywall_sel); + if (paywall) { + bs_main(paywall) + } else { + waitDOMElement(paywall_sel, 'DIV', bs_main, false); + } + } + let banner = 'section.sbcrbtmlfull'; + let ads = 'div.advertisement-bg, div[id^="between_article_content_"]'; + hideDOMStyle(banner + ', ' + ads); + } else + ampToHtml(); +} + +else if (matchDomain('businessinsider.com')) { + let ads = 'div.masthead-ad, div.l-ad, div.in-post-sticky, aside.has-video-ad, div.ad-callout-wrapper'; + hideDOMStyle(ads); +} + +else if (matchDomain('businessinsider.jp')) { + let paywall = document.querySelector('div.piano-paywall-container[hidden]'); + if (paywall) + paywall.removeAttribute('hidden'); +} + +else if (matchDomain('businessoffashion.com')) { + let ads = 'div[class^="default__AdsBlockWrapper"], div[data-test="common-nbabanner"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('capital.bg')) { + let paywall = document.querySelector('div.paywall-story'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let img_main = document.querySelector('div.story--header picture > img[src]'); + let article = document.querySelector('div.story-content'); + if (json_text && article) { + let article_new = document.createElement('p'); + let json_pars = parseHtmlEntities(json_text).replace(/\s{2,}/g, '\r\n\r\n').split(/[\[\]]{2}/); + for (let elem of json_pars) { + let par; + if (!elem.match(/[\[\]]{2}/)) { + if (elem.match(/img:\d+/)) { + if (img_main) { + let img_new_id = elem.split('img:')[1]; + if (img_new_id) { + par = document.createElement('img'); + par.src = img_main.src.replace(/_\d+\./, '_' + img_new_id + '.').split('?')[0]; + par.style = 'margin: 20px; width: 90%;'; + } + } + } else if (!elem.match(/quote:\d+/)) { + par = document.createElement('p'); + par.innerText = elem; + } + } + if (par) + article.appendChild(par); + } + } + } + } + } +} + +else if (matchDomain(['chronicle.com', 'philanthropy.com'])) { + let preview = document.querySelector('div[data-content-summary]'); + removeDOMElement(preview); + let article_hidden = document.querySelector('div[class~="contentBody" i][hidden]'); + if (article_hidden) { + let attributes = [...article_hidden.attributes].filter(x => x.name !== 'class'); + for (let elem of attributes) + article_hidden.removeAttribute(elem.name); + } + let ads = 'div.GoogleDfpAd-container'; + hideDOMStyle(ads); +} + +else if (matchDomain('cnbc.com')) { + let paywall = document.querySelector('div.ArticleGate-proGate'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.ArticleBody-articleBody'); + if (article) + article.style = "margin: 20px; font-family: Lyon,Helvetica,Arial,sans-serif; font-size: 18px; line-height: 1.66"; + let span_hidden = document.querySelectorAll('span[hidden]'); + for (let elem of span_hidden) { + elem.removeAttribute('hidden'); + elem.removeAttribute('class'); + if (elem.innerText) + elem.innerText = elem.innerText.split('DISCLOSURES: (None)')[0]; + } + let inline_image = document.querySelector('div[data-test="InlineImage"]'); + if (inline_image) + article.firstChild.before(inline_image); + } +} + +else if (matchDomain('cnn.com')) { + let subwall = document.querySelector('div[data-component-id="subwall"]'); + if (subwall) { + removeDOMElement(subwall); + let noscroll = document.querySelectorAll('html[style], body[style]'); + for (let elem of noscroll) + elem.removeAttribute('style'); + waitDOMAttribute('html', 'HTML', 'style', node => node.removeAttribute('style'), true); + waitDOMAttribute('body', 'BODY', 'style', node => node.removeAttribute('style'), true); + } + let regwall_keys = Object.keys(window.localStorage).filter(x => x.match(/reg_?wall/i)); + for (let item of regwall_keys) + window.localStorage.removeItem(item); + let ads = 'div[class^="ad-slot-"], div.container__ads'; + hideDOMStyle(ads); +} + +else if (matchDomain('columbian.com')) { + setCookie('blaize_session', '', 'columbian.com', '/', 0); + let paywall = document.querySelectorAll('div#inline-paywall, div#paywall-modal'); + if (paywall) { + removeDOMElement(...paywall); + let article = document.querySelector('article'); + if (article) { + let url = window.location.href; + article.firstChild.before(googleSearchToolLink(url)); + } + } +} + +else if (matchDomain('csmonitor.com')) { + let paywall = document.querySelector('div.paywall'); + removeDOMElement(paywall); + window.localStorage.clear(); +} + +else if (matchDomain('cyclingnews.com')) { + let paywall = document.querySelector('div.paywall-locker'); + if (paywall) { + paywall.classList.remove('paywall-locker'); + let banner = 'div.kiosq-main-layer'; + hideDOMStyle(banner); + } +} + +else if (matchDomain('dailywire.com')) { + let paywall = document.querySelector('div#payed-article-paywall'); + if (paywall) { + removeDOMElement(paywall); + let div_hidden = document.querySelector('#post-body-text > div > div[class]'); + if (div_hidden) + div_hidden.removeAttribute('class'); + } + let ads = 'div.ad-wrapper'; + hideDOMStyle(ads); +} + +else if (matchDomain('dallasnews.com')) { + if (window.location.search.startsWith('?outputType=amp')) { + amp_unhide_subscr_section(); + } +} + +else if (matchDomain('defector.com')) { + let paywall = document.querySelector('div[class^="ContentGate_wrapper__"]'); + if (paywall) { + removeDOMElement(paywall); + let article_sel = 'div[class^="PostContent_wrapper__"]'; + let article = document.querySelector(article_sel); + if (article) { + window.setTimeout(function () { + let pars = article.querySelectorAll('p'); + if (pars.length < 3) { + let url = window.location.href.split('?')[0]; + replaceDomElementExt(url, false, false, article_sel); + } + }, 1000); + } + } +} + +else if (matchDomain('denik.cz')) { + let video_sources = document.querySelectorAll('video[id] > source[src]'); + for (let elem of video_sources) { + let iframe = document.createElement('iframe'); + iframe.src = elem.src; + iframe.style = 'width: 100%; height: 100%;'; + let video = elem.parentNode; + video.parentNode.replaceChild(iframe, video); + } +} + +else if (matchDomain(['digiday.com', 'glossy.co', 'modernretail.co'])) { + let ads = 'div[class^="ad_"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('discovermagazine.com')) { + window.setTimeout(function () { + let body = document.querySelector('body'); + if (body) + body.style = 'overflow: auto !important;'; + let banners = 'div.fIkXwQ, div[style*="fadeIn"], div[role="button"][aria-label="Dismiss Dialog"]'; + hideDOMStyle(banners); + }, 1000); +} + +else if (matchDomain('dwell.com')) { + if (window.location.pathname.match(/^(\/amp)?\/article\//)) { + if (!window.location.search.startsWith('?rel=plus')) { + let paywall = pageContains('div > a', /Try Dwell\+ for FREE/); + if (paywall.length) { + removeDOMElement(paywall[0]); + window.location.href = window.location.pathname.replace(/^\/amp/, '') + '?rel=plus'; + } + } else { + let paywall = document.querySelector('div#mainPanel div[class^="FCR_"]'); + let article = document.querySelector('div > section[class]'); + if (paywall && article) { + removeDOMElement(paywall); + article.classList.remove('_2S7l9_l2eDI5b8DSR29ijf'); + let filter = /^window\.INITIAL_STATE\s?=\s?/; + let json_script = getSourceJsonScript(filter); + if (json_script) { + let split1 = json_script.text.split(filter)[1]; + let state = (split1.split('};')[0] + '}'); + if (state) { + try { + let json = JSON.parse(state); + if (json) { + let items = json.articles.items; + let id = Object.keys(items)[0]; + let photos = json.photos ? json.photos.items : ''; + let json_text = items[id].attributes.body.replace(/(
||<\/span>)/g, ''); + function find_img_url(match, p1, p2, offset, string) { + let contributorId; + let format; + if (photos && photos[p1]) { + contributorId = photos[p1].attributes.userId; + format = photos[p1].attributes.format; + } + let result = '

missing photo: ' + p1 + '

'; + if (contributorId) + result = '
' + p2 + '
'; + return result; + } + json_text = json_text.replace(//g, find_img_url); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let article_new = doc.querySelector('section'); + article.parentNode.replaceChild(article_new, article); + } + } catch (err) { + console.log(err); + } + } + } + } + let photo_links = document.querySelectorAll('div > a[href^="' + window.location.pathname.replace(/\/\d{8,}/, '') + '"]'); + for (let elem of photo_links) + elem.href += '?rel=plus'; + let close_button = document.querySelector('header > div > span > svg'); + if (!document.querySelector('a#bpc_close') && close_button) { + let elem = document.createElement('a'); + elem.href = window.location.pathname.split('?')[0].replace(/\/\d{8,}/, ''); + elem.id = 'bpc_close'; + elem.innerText = 'close'; + elem.style.color = 'white'; + close_button.parentNode.parentNode.appendChild(elem); + } + } + } + let ads = 'div.EYrS5iukqzJMkNAcFQ0ho'; + hideDOMStyle(ads); +} + +else if (matchDomain('economictimes.com')) { + if (window.location.pathname.includes('/amp_')) { + let paywall = document.querySelector('.paywall_wrap'); + if (paywall) { + let content = document.querySelector('.paywall[style="display:none;"]'); + if (content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + content.innerText + '
', 'text/html'); + let content_new = doc.querySelector('div'); + if (content_new && content.parentNode) + content.parentNode.replaceChild(content_new, content); + } else + window.location.href = 'https://economictimes.indiatimes.com' + window.location.pathname.replace('amp_prime', 'prime'); + let intro = document.querySelector('.art_wrap'); + let article_blocker = document.querySelector('.articleBlocker'); + removeDOMElement(paywall, intro, article_blocker); + let ads = 'amp-ad'; + hideDOMStyle(ads); + } + } else { + window.setTimeout(function () { + let paywall = document.querySelector('div#blocker_layer'); + let data_prime = document.querySelector('div[data-prime="1"]'); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (paywall || data_prime) { + removeDOMElement(paywall); + if (data_prime) + data_prime.removeAttribute('data-prime'); + if (amphtml) + amp_redirect_not_loop(amphtml); + else if (window.location.pathname.startsWith('/epaper/')) + window.location.href = 'https://economictimes.indiatimes.com' + window.location.pathname; + } else { + let ads = '.adContainer'; + hideDOMStyle(ads); + } + }, 500); + } +} + +else if (matchDomain('economictimes.indiatimes.com')) { + let paywall = document.querySelector('section.prime_paywall'); + if (paywall) { + removeDOMElement(paywall); + let content = document.querySelector('div.content1, div.artText'); + let full_text = document.querySelector('div.paywall.p1'); + if (content && full_text) + content.innerText = full_text.innerText; + let page_content = document.querySelector('div.pageContent:not([style])'); + if (page_content) + page_content.setAttribute('style', 'height: auto !important;'); + let article_wrap = document.querySelector('div.article_wrap[style]'); + if (article_wrap) + article_wrap.removeAttribute('style'); + } + if (mobile) { + let pageholder = document.querySelector('main.pageHolder'); + if (pageholder) { + pageholder.classList.remove('pageHolder'); + let header = document.querySelector('header'); + if (header) + header.style = 'width: 100% !important;'; + let f_col = document.querySelector('div.f_col'); + removeDOMElement(f_col); + } + } +} + +else if (matchDomain('economist.com')) { + if (window.location.pathname.includes('/podcasts/')) { + header_nofix('section[data-body-id]', 'div[aria-labelledby="paywall-heading"]'); + } else if (!window.location.pathname.startsWith('/interactive/')) { + let paywall_sel = 'div#tp-regwall'; + let article_sel = 'main'; + let video = document.querySelector('iframe[src^="https://www.youtube.com/"]'); + func_post = function () { + if (video) { + let video_new = document.querySelector('div[old-src^="https://www.youtube.com/"]'); + if (video_new && video_new.parentNode) + video_new.parentNode.replaceChild(video, video_new); + } + if (mobile) { + let grids = document.querySelectorAll('div[style*="grid-template-columns"]'); + for (let elem of grids) + elem.removeAttribute('style'); + let lazy_images = document.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + } + } + let url = window.location.href; + getArchive(url, paywall_sel, '', 'main'); + } + let ads = 'div[class*="adComponent"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('enotes.com')) { + let paywall = document.querySelector('section#enotes-paywall'); + if (paywall) { + let section_words = pageContains('p', /\(This entire section contains/); + removeDOMElement(paywall, ...section_words); + setCookie('ENOTESID', '', 'enotes.com', '/', 0); + let blurred = document.querySelectorAll('div.u-paywall'); + for (let elem of blurred) + elem.className = 'o-rte-text u-space--top'; + let ads = document.querySelectorAll('div:not([class]) > div[id^="div-gpt-ad-"]'); + for (let ad of ads) + hideDOMElement(ad.parentNode); + } +} + +else if (matchDomain('epoch.org.il')) { + getJsonUrl('div.register-login-box', '', 'div.paywall'); +} + +else if (matchDomain('espn.com')) { + let url = window.location.href; + getArchive(url, 'aside.espn-plus-container-wrapper', '', 'section#article-feed > article'); +} + +else if (matchDomain('euobserver.com')) { + let paywall = pageContains('div > div > button > div > span', /^Register$/); + if (paywall.length) { + let article = paywall[0].parentNode.parentNode.parentNode.parentNode; + if (article) { + let filter = /^window\.__basedcache__\s?=\s?/; + let json_script = getSourceJsonScript(filter); + if (json_script) { + try { + let json = JSON.parse(json_script.text.split(filter)[1]); + if (json) { + let body = findKeyJson(json, ['body']); + if (body) { + article.innerHTML = ''; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + body + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let pars = article_new.querySelectorAll('p.rte-p'); + for (let par of pars) + par.style = 'margin: 20px 0px;'; + article.appendChild(article_new); + } + } + } catch (err) { + console.log(err); + } + } + } + } +} + +else if (matchDomain('fastcompany.com')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let filter = /\\"content\\":\[/; + let json_script = getSourceJsonScript(filter, ':not([id], [src], [type])'); + if (json_script) { + try { + let json = JSON.parse('[' + json_script.text.split(filter)[1].split(/\],\\"/)[0].replace(/\\\\\\"/g, '\\"').replace(/(\[|,)\\"/g, '$1"').replace(/\\"(\]|,)/g, '"$1').replace(/\\\\n/g, '') + ']'); + if (json) { + let article = document.querySelector('article'); + if (article) { + article.innerHTML = ''; + article.className = 'article-container'; + let parser = new DOMParser(); + for (let pars of json) + for (let par of pars) { + if (!par.match(/^\$\w{2}$/)) { + let content_new = parser.parseFromString('
' + par + '
', 'text/html'); + let elem = content_new.querySelector('div'); + let img_srcset_drop = elem.querySelectorAll('figure > img[srcset]'); + for (let img of img_srcset_drop) + img.removeAttribute('srcset'); + article.appendChild(elem); + } + } + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div[class*="ad-wrapper"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('fieldandstream.com')) { + let overlay = document.querySelectorAll('div[class^="mailmunch-"]'); + removeDOMElement(...overlay); + let noscroll = document.querySelector('html.mailmunch-pop-open'); + if (noscroll) + noscroll.removeAttribute('class'); +} + +else if (matchDomain('financialexpress.com')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) + paywall.classList.remove('paywall'); + let register = 'div.pcl-wrap'; + let ads_selector = window.location.pathname.endsWith('/lite/') ? '.ad-bg-container' : 'div[class*="-ads-blocks-ad-unit"]'; + hideDOMStyle(register + ', ' + ads_selector); +} + +else if (matchDomain('forbes.com')) { + waitDOMAttribute('html', 'HTML', 'class', node => node.removeAttribute('class'), true); + waitDOMAttribute('body', 'BODY', 'class', node => node.removeAttribute('class'), true); + if (window.location.pathname.startsWith('/newsletters/')) { + let paywall = document.querySelector('div > div.newsletter-teaser'); + if (paywall) { + paywall.classList.remove('newsletter-teaser'); + let header = paywall.parentNode; + header_nofix(header); + } + } + let ads = 'fbs-ad, div.inlineAdContainer'; + hideDOMStyle(ads); +} + +else if (matchDomain('forbes.ua')) { + let paywall = document.querySelector('div.js-closed-part'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(json.articleBody).replace(/\n/g, "$&\r\n"); + let article = document.querySelector('div.c-post-text'); + if (json_text && article) + article.innerText = json_text; + } + } + } +} + +else if (matchDomain('foreignaffairs.com')) { + let paywall = document.querySelector('.paywall'); + let loading_indicator = document.querySelector('.loading-indicator'); + let msg_bottom = document.querySelector('.messages--container--bottom'); + removeDOMElement(paywall, loading_indicator, msg_bottom); + let article_dropcap = document.querySelectorAll('.article-dropcap'); + for (let elem of article_dropcap) + elem.classList.add('loaded'); +} + +else if (matchDomain('foreignpolicy.com')) { + let content_ungated = document.querySelector('div.content-ungated'); + if (content_ungated) { + removeDOMElement(content_ungated); + let content_gated = document.querySelector('div.content-gated'); + if (content_gated) { + let insider = document.querySelector('body.is-fp-insider'); + if (insider) { + getJsonUrl('div.content-gated', {rm_class: 'content-gated'}, 'div.content-gated'); + window.setTimeout(function () { + let lazy_images = document.querySelectorAll('img[loading="lazy"]'); + for (let elem of lazy_images) + elem.removeAttribute('loading'); + }, 1000); + } else + content_gated.classList.remove('content-gated'); + } + } +} + +else if (matchDomain('fortune.com')) { + let paywall = document.querySelector('div.paywallActive'); + if (window.location.pathname.match(/\/amp(\/)?/)) { + amp_unhide_access_hide('="NOT p.showRegWall AND NOT p.showPayWall"', '="p.showPayWall"', '[class^="amp-ad"], div.paywall'); + } else { + if (paywall) + paywall.removeAttribute('class'); + let banners = 'div.daBnAu, div.trinity-player, div:empty'; + hideDOMStyle(banners); + } +} + +else if (matchDomain('foxnews.com')) { + let paywall = document.querySelector('div.article-gating-wrapper'); + removeDOMElement(paywall); + let overlay = document.querySelector('div[class*="gated-overlay"]'); + if (overlay) + overlay.removeAttribute('class'); +} + +else if (matchDomain('ftm.eu')) { + let videos = document.querySelectorAll('div.body > div.video-pp'); + for (let video of videos) { + let video_id_dom = video.querySelector('a.video[data-youtube-id]'); + if (video_id_dom) { + video_new = document.createElement('iframe'); + video_new.src = 'https://www.youtube.com/embed/' + video_id_dom.getAttribute('data-youtube-id'); + video_new.style = 'width: 95%; height: 400px; margin: 0px 20px;'; + video.parentNode.replaceChild(video_new, video); + } + } + let audio_controls = document.querySelectorAll('audio[controls][style]'); + for (let elem of audio_controls) + elem.removeAttribute('style'); + document.querySelectorAll('div.foldable').forEach(e => e.classList.remove('foldable')); + let banners = 'div.banner-pp'; + hideDOMStyle(banners); +} + +else if (matchDomain(['haaretz.co.il', 'haaretz.com', 'themarker.com'])) { + if (window.location.pathname.match(/\/ty-article/)) { + let body_wrapper_sel = 'section[data-testid="article-body-wrapper"]'; + let paywall_sel = 'div[data-test="paywallMidpage"], ' + body_wrapper_sel + ' div[data-testid="logo-loading-indicator"]'; + let article_sel = 'main'; + let article_link_sel = 'main header, main.article-page p:not([id]), h1#article-header, ' + body_wrapper_sel; + let url = window.location.href; + if (!mobile) { + func_post = function () { + let disabled_items = 'section[data-testid="zoidberg-list"], section#comments-section, div[old-position="sticky"]'; + hideDOMStyle(disabled_items); + } + getArchive(url, paywall_sel, '', article_sel, '', article_sel, article_link_sel); + } else { + let paywall = document.querySelector(paywall_sel); + if (paywall) { + removeDOMElement(paywall); + let article_link = document.querySelector(article_link_sel); + if (article_link) + article_link.before(archiveLink(url)); + } + } + } + let history_keys = Object.keys(window.localStorage).filter(x => x.match(/^(reading(Count)?History|raData)/i)); + for (let item of history_keys) + window.localStorage.removeItem(item); +} + +else if (matchDomain('harpers.org')) { + setCookie('hr_session', '', 'harpers.org', '/', 0); +} + +else if (matchDomain('hbr.org')) { + if (window.location.pathname.startsWith('/data-visuals')) { + let feed_entries = document.querySelectorAll('li.feed-entry'); + for (let feed_entry of feed_entries) { + let download = feed_entry.querySelector('span.entry-download > a[href*="/undefined/"]'); + if (download) { + let figure = feed_entry.querySelector('figure.entry-image > img[src]'); + if (figure) { + download.href = figure.src; + download.setAttribute('download', ''); + } + } + } + } else { + function hbr_main() { + window.top.postMessage({type: 'article-paywall:full-content'}, '*'); + } + let popup = document.querySelector('.persistent-banner'); + removeDOMElement(popup); + let paywall = document.querySelector('div[id^="paywall"]'); + if (paywall) { + removeDOMElement(paywall); + insert_script(hbr_main); + } + } +} + +else if (matchDomain('hilltimes.com')) { + function hilltimes_main(node) { + getJsonUrl('div.paywallcont', '', 'div#entry-content'); + } + let paywall_sel = 'div.paywallcont'; + let paywall = document.querySelector(paywall_sel); + if (true) { + if (paywall) + hilltimes_main(paywall); + else + waitDOMElement(paywall_sel, 'DIV', hilltimes_main, false); + } + let banner = 'section.hide_this_section'; + hideDOMStyle(banner); +} + +else if (matchDomain('hindustantimes.com')) { + let paywall = document.querySelector('.freemium-card'); + if (paywall) { + removeDOMElement(paywall); + let freemium_text = document.querySelector('.freemiumText'); + if (freemium_text) + freemium_text.classList.remove('freemiumText'); + } + let noscroll = document.querySelector('body.open-popup'); + if (noscroll) + noscroll.classList.remove('open-popup'); + let close_story = '.closeStory'; + let ads = 'div[class^="adHeight"]'; + hideDOMStyle(close_story + ', ' + ads); +} + +else if (matchDomain('historyextra.com')) { + let article_masked = document.querySelector('.template-article__masked'); + if (article_masked) { + let extra_pars = document.querySelectorAll('div.template-article__masked > p'); + removeDOMElement(...extra_pars); + article_masked.classList.remove('template-article__masked'); + } + let ad_banner = document.querySelector('.ad-banner-container'); + removeDOMElement(ad_banner); +} + +else if (matchDomain('historytoday.com')) { + if (window.location.hostname.startsWith('app.')) { + restorePugpigPage(); + } else { + let paywall = document.querySelector('div.nopremium-message'); + if (paywall) { + let app_link = document.createElement('a'); + let app_url = 'app.historytoday.com'; + app_link.href = 'https://' + app_url; + app_link.innerText = 'BPC > no fix, search article on: ' + app_url; + app_link.style = 'color: red; font-weight: bold;'; + let app_div = document.createElement('div'); + app_div.style = 'margin: 20px;'; + app_div.appendChild(app_link); + paywall.before(app_div); + removeDOMElement(paywall); + } + } +} + +else if (matchDomain('inc.com')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let locked = document.querySelector('div.article-container--locked'); + if (locked) + locked.className = 'article-container'; + } + let ads = 'div.second-scroll-border'; + hideDOMStyle(ads); +} + +else if (matchDomain('inc42.com')) { + if (window.location.pathname.endsWith('/amp/')) { + amp_unhide_access_hide('="status"', '="NOT status"', 'div.wru-widget'); + } else { + let banner = document.querySelector('div[id*="_leaderboard_"]'); + removeDOMElement(banner); + } +} + +else if (matchDomain('indianexpress.com')) { + if (window.location.pathname.endsWith('/lite/')) + amp_unhide_access_hide('="metering.result=\'ALLOW_ACCESS\'"'); + else { + let ads = 'div[class^="adsbox"], div.adboxtop, div.add-first, div.osv-ad-class, div.ie-int-campign-ad'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('indiatoday.in')) { + if (window.location.pathname.match(/(\/amp)?\/magazine\//)) { + let url = window.location.href; + if (!url.includes('/amp/')) { + amp_redirect('div#csc-paywall'); + } else { + amp_unhide_access_hide('="granted"', '="NOT NOT granted"'); + } + } +} + +else if (matchDomain('infzm.com')) { + let url = window.location.href; + if (url.includes('.com/wap/#/content/')) { + let container = document.querySelector('section.container'); + if (container) + container.classList.remove('container'); + let overlay = document.querySelector('div.article-content[style]'); + if (overlay) + overlay.removeAttribute('style'); + } else if (url.includes('.com/contents/')) { + let paywall = document.querySelector('div.nfzm-article-jumbotron--unauth'); + if (paywall) { + removeDOMElement(paywall); + window.location.href = url.replace('.com/contents/', '.com/wap/#/content/').split('?')[0]; + } + } +} + +else if (matchDomain('inkl.com')) { + let url = window.location.href; + if (url.includes('/signin?') && url.includes('redirect_to=')) { + window.setTimeout(function () { + window.location.href = 'https://www.inkl.com' + decodeURIComponent(url.split('redirect_to=')[1]); + }, 500); + } else { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.removeAttribute('class'); + let gradient_container = document.querySelector('div.gradient-container'); + removeDOMElement(gradient_container); + } + let what_is_inkl = document.querySelector('.what-is-inkl-container, .features-panel'); + let signup = document.querySelectorAll('.article-signup-container, .locked-sign-up-container, div[class*="/inkl-watermark.svg"]'); + let shared_banner = document.querySelector('div.shared-article-inline-banner'); + removeDOMElement(what_is_inkl, ...signup, shared_banner); + let dismiss_button = document.querySelector('div.dismiss-button-container button.btn'); + if (dismiss_button) + dismiss_button.click(); + let dive_deeper_summary_bodies = document.querySelectorAll('div.dive-deeper-container div.summary-body'); + if (dive_deeper_summary_bodies) { + for (let summary_body of dive_deeper_summary_bodies) { + if (!summary_body.querySelector('a')) { + let ng_click = summary_body.getAttribute('ng-click').replace("showArticle('", '').replace("')", ''); + let weblink = document.createElement('a'); + weblink.text = 'open'; + weblink.href = 'https://www.inkl.com/news/' + ng_click; + summary_body.appendChild(weblink); + } + } + } + } +} + +else if (matchDomain('insidehighered.com')) { + let ads = 'div[id^="block-dfptag"], div.wp-block-ihe-ad, section.section-ad_slot, div#roadblock'; + hideDOMStyle(ads); +} + +else if (matchDomain('interestingengineering.com')) { + let paywall = document.querySelector('div.paywall-main-wrapper'); + if (paywall) { + removeDOMElement(paywall); + let blurred = document.querySelectorAll('.blurFilter'); + for (let elem of blurred) + elem.classList.remove('blurFilter'); + } +} + +else if (matchDomain('ipolitics.ca')) { + let login = document.querySelector('div.login'); + if (login) { + removeDOMElement(login); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.innerText); + if (json && json.props.pageProps.post && json.props.pageProps.post.content) { + let url_next = json.props.pageProps.post.slug; + if (url_next && !window.location.pathname.includes(url_next)) + refreshCurrentTab(); + let article_new = json.props.pageProps.post.content; + let article = document.querySelector('.post-body'); + if (article) { + article.innerHTML = ''; + article.classList.remove('locked'); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + article_new + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.appendChild(content_new); + } + } else { + refreshCurrentTab(); + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('japantimes.co.jp')) { + setCookie('xbc', '', 'japantimes.co.jp', '/', 0); + let url = window.location.href; + getArchive(url, 'div.blocker', '', 'div#jtarticle'); + let banner = document.querySelector('div.subscribe'); + removeDOMElement(banner); + let ads = 'div.DisplayAd'; + hideDOMStyle(ads); +} + +else if (matchDomain('jpost.com')) { + let premium_banners = document.querySelectorAll('.hide-for-premium, #hiddenPremiumForm, #hiddenLink'); + removeDOMElement(...premium_banners); +} + +else if (matchDomain('kathimerini.gr')) { + let ads = 'div.nx-billboard-ad-row'; + hideDOMStyle(ads); +} + +else if (matchDomain('kompas.id')) { + let url_artikel = window.location.pathname.startsWith('/artikel/'); + let delay = url_artikel ? 2500 : 0; + window.setTimeout(function () { + let paywall = document.querySelector('kompasid-paywall'); + if (paywall) { + removeDOMElement(paywall); + if (url_artikel) { + let intro = document.querySelector('div.paywall'); + removeDOMElement(intro); + let art_hidden = document.querySelector('div.non-paywall[style]'); + if (art_hidden) + art_hidden.removeAttribute('style'); + } else { + let art_hidden = document.querySelector('section.paywall.hidden'); + if (art_hidden) + art_hidden.classList.remove('hidden'); + } + } + }, delay); +} + +else if (matchDomain('latimes.com')) { + let subscribers = pageContains('div.infobox > p.infobox-title', /subscribers/i); + if (subscribers.length) + removeDOMElement(subscribers[0].parentNode); + let ads = 'div.google-dfp-ad-wrapper, div.revcontent'; + hideDOMStyle(ads); +} + +else if (matchDomain('livelaw.in')) { + let amp = window.location.pathname.startsWith('/amp/'); + let paywall = document.querySelector(amp ? 'div.subscribeNow' : 'div#subscription_paid_message'); + if (paywall) { + let intro = document.querySelector(amp ? 'div.story' : 'div.details-story-wrapper'); + removeDOMElement(paywall, intro); + let paywall_content = document.querySelector('div.paywall-content.hide'); + if (paywall_content) + paywall_content.className = amp ? '' : 'news_details_page_row2 details-story-wrapper'; + } + let ads = 'inside-post-ad, amp-ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('livemint.com')) { + if (window.location.pathname.includes('/amp-')) { + let paywall = document.querySelectorAll('[amp-access="NOT subscribed"]'); + removeDOMElement(...paywall); + } else { + let paywall = document.querySelector('div.paywall'); + if (paywall) + paywall.classList.remove('paywall'); + let ads = '[class^="ad"], [id^="ad"], #subscribeAd, .taboolaHeight'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('magazine.atavist.com')) { + let bottom_notification = document.querySelector('div.bottom-notification'); + let overlay = document.querySelector('div.notification-overlay'); + removeDOMElement(bottom_notification, overlay); + let paywall = document.querySelector('body.paywall-notification-visible'); + if (paywall) + paywall.classList.remove('paywall-notification-visible'); + window.localStorage.clear(); +} + +else if (matchDomain('manoramaonline.com')) { + if (!window.location.pathname.endsWith('.amp.html')) { + amp_redirect('ev-engagement'); + } else { + amp_unhide_access_hide("=\"result='ALLOW_ACCESS'\""); + } +} + +else if (matchDomain('marketwatch.com')) { + setCookie('cX_P', '', 'marketwatch.com', '/', 0); + let ads = 'div.element--ad, div.j-ad, div.adWrapper, div#cx-articlecover'; + hideDOMStyle(ads); +} + +else if (matchDomain('medscape.com')) { + let ads = '.AdUnit, [id^="ads-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('mexiconewsdaily.com')) { + let div_hidden = document.querySelector('body.single div.td-post-content > div.tdb-block-inner'); + if (div_hidden) + div_hidden.classList.remove('tdb-block-inner'); +} + +else if (matchDomain('mid-day.com')) { + if (window.location.pathname.startsWith('/amp/')) { + amp_unhide_access_hide('="granted"', '="NOT granted"', '[class*="BannerAd"], div.midday-wrapper'); + } else { + amp_redirect('div#myModalFullscreen'); + let read_more = document.querySelector('#read-more-my'); + if (read_more) + read_more.click(); + } +} + +else if (matchDomain('nationalgeographic.com')) { + function natgeo_func(node) { + removeDOMElement(node); + let body = document.querySelector('body[class]'); + if (body) { + body.removeAttribute('class'); + body.removeAttribute('style'); + } + } + let paywall = document.querySelector('div[id^="fittPortal"]'); + if (paywall) + natgeo_func(paywall); + waitDOMElement('div[id^="fittPortal"]', 'DIV', natgeo_func, false); + window.setTimeout(function () { + let url = window.location.href; + let subscribed = document.querySelector('div.Article__Content--gated'); + let msg = document.querySelector('div#bpc_archive'); + if (subscribed && !msg) { + subscribed.appendChild(archiveLink(url)); + subscribed.setAttribute('style', 'overflow: visible !important;'); + } + let overlay = document.querySelector('div.Article__Content__Overlay--gated'); + if (overlay) + overlay.classList.remove('Article__Content__Overlay--gated'); + }, 2000); + let ads = 'div.ad-slot, div.InsertedAd, div.natgeo-ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('nationalreview.com')) { + if (!window.location.pathname.endsWith('/amp/')) { + let paywall_sel = 'div.continue-reading'; + let paywall = document.querySelector(paywall_sel); + if (paywall) { + let amphtml = document.querySelector('head > link[rel="amphtml"][href]'); + if (amphtml && !amphtml.href.includes(window.location.pathname)) { + removeDOMElement(paywall); + refreshCurrentTab(); + } else + getJsonUrl(paywall_sel, '', 'div.article-content', {art_class: 'article-content article-content--headless'}); + } + } + let banners = 'div.zephr-wrapper, div#bc-root, div.cookie-text'; + let ads = 'amp-ad, .ad-unit, .ad-skeleton, amp-connatix-player, div[class*="-connatix-"]'; + hideDOMStyle(banners + ', ' + ads); +} + +else if (matchDomain('nautil.us')) { + setCookie(['arc', 'sfa'], ''); + let banners = document.querySelectorAll('div[class^="a__sc-np"], div.subscibe-bar'); + removeDOMElement(...banners); +} + +else if (matchDomain('ndtvprofit.com')) { + if (window.location.pathname.startsWith('/amp/')) { + amp_unhide_subscr_section(); + } else { + window.setTimeout(function () { + amp_redirect('div[class^="hard-paywall"], div[class*="geotag-container_"]'); + }, 1000); + } + let ads = 'div.responsive-ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('newcriterion.com')) { + getJsonUrl('div.paywall-overlay', '', 'div.entry-content'); +} + +else if (matchDomain('newrepublic.com')) { + let modal = document.querySelector('div.article-scheduled-modal'); + let pw_popups = document.querySelector('div#pwPopups'); + removeDOMElement(modal, pw_popups); + let ads = '.ad-unit'; + hideDOMStyle(ads); +} + +else if (matchDomain('newscientist.com')) { + if (!window.location.hostname.startsWith('appan.')) { + let paywall = document.querySelector('section#subscription-barrier'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script#ns-seo-schema'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.datePublished) { + let date = json.datePublished.split(/T\d/)[0].replace(/-/g, '/'); + let path_new = window.location.pathname.split(/\/article\/(\d+-|mg\d+-\d+-)/)[2]; + if (path_new) { + let url = 'https://appan.newscientist.com/' + date + '/' + path_new + 'content.html'; + func_post = function () { + let lazy_images = document.querySelectorAll('img[src^="../"][data-src]'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-src'); + elem.removeAttribute('height'); + elem.removeAttribute('width'); + } + let videos = document.querySelectorAll('figure > div.pugpig-video[data-video-url]'); + for (let elem of videos) { + let iframe = document.createElement('iframe'); + iframe.src = elem.getAttribute('data-video-url'); + iframe.style = 'width: 100%; height: 400px; margin: 20px 0px;'; + elem.parentNode.replaceChild(iframe, elem); + } + } + replaceDomElementExt(url, false, false, 'section.ArticleContent', 'BPC > no fix (source file)', 'section[class$="-article__body"]'); + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div[class*="Advert"]'; + hideDOMStyle(ads); + } else { + restorePugpigPage(); + } +} + +else if (matchDomain('newsday.com')) { + let nd_lock = document.querySelector('html[class]'); + if (nd_lock) + nd_lock.removeAttribute('class'); + let ads = 'div.ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('newslaundry.com')) { + let paywall = document.querySelector('div > div > img[alt^="paywall"]'); + if (paywall) { + let banner = document.querySelector('div.FrsvM'); + removeDOMElement(paywall.parentNode.parentNode, banner); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(json.articleBody).replace(/<\/p>\./g, '

'); + let article = document.querySelector('div.story-element-text'); + if (json_text && article) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let article_new = doc.querySelector('div'); + article.innerHTML = ''; + article.appendChild(article_new); + } + } + } + } +} + +else if (matchDomain('newsweek.com')) { + let ads = 'div#topad, div[id^="dfp-ad-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain(['nola.com', 'shreveportbossieradvocate.com', 'theadvocate.com'])) { + if (window.location.pathname.endsWith('.amp.html')) { + let body_hidden = document.querySelector('.site-container'); + if (body_hidden) + body_hidden.setAttribute('style', 'display:block;'); + } else { + let ads = 'div.tnt-ads-container, div.asset-breakout-ads'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('nv.ua')) { + if (!window.location.pathname.includes('/amp/')) { + amp_redirect('div[id^="media_paywall"]'); + } else { + let paywall = document.querySelector('div.paywall-area'); + if (paywall) { + paywall.removeAttribute('class'); + let subscr = paywall.querySelector('div.make-subscription'); + removeDOMElement(subscr); + } + let article = document.querySelector('div.article__content'); + if (article) + article.removeAttribute('class'); + } +} + +else if (matchDomain('nybooks.com')) { + let paywall_article = document.querySelector('.paywall-article'); + if (paywall_article) + paywall_article.classList.remove('paywall-article'); + let banners = 'div.toast-cta, div.inline-ad'; + hideDOMStyle(banners); +} + +else if (matchDomain('nytimes.com')) { + if (!window.location.pathname.startsWith('/athletic/')) { + waitDOMElement('div#dock-container', 'DIV', removeDOMElement, false); + let banners = 'div[data-testid="inline-message"], div[id^="ad-"], div.pz-ad-box'; + hideDOMStyle(banners); + } +} + +else if (matchDomain('outlookbusiness.com')) { + let paywall = document.querySelector('div#csc-paywall'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + let json = JSON.parse(json_script.innerText); + if (json && json.props.initialState.dashboard.ARTICLE_POST_DETAIL_API.data.article_data.description) { + let article_new = json.props.initialState.dashboard.ARTICLE_POST_DETAIL_API.data.article_data.description; + let article = document.querySelector('div.story-content'); + if (article) { + article.innerHTML = ''; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + article_new + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.appendChild(content_new); + } + } + } + } +} + +else if (matchDomain('outlookindia.com')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(json.articleBody).replace(/\n/g, "$&\r\n"); + let content = document.querySelector('div#articleBody'); + if (json_text && content) { + content.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.appendChild(article_new); + } + } + } + } +} + +else if (matchDomain('philonomist.com')) { + let paywall = document.querySelector('div.content-bandeau'); + if (paywall && window.location.pathname.startsWith('/en/')) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(findKeyJson(json, ['articleBody'])).replace(/\s{2,}/g, '\r\n\r\n'); + let article = document.querySelector('div.main-body'); + if (json_text && article) { + let par_last = article.querySelector('div > p:last-child'); + if (par_last) { + let par_last_str = par_last.innerText.substring(0, 50); + if (json_text.replace(/<[^<]*>/g, '').includes(par_last_str)) { + par_last.innerText = json_text.substring(json_text.indexOf(par_last_str)); + } else { + article.innerHTML = ' '; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + article.appendChild(article_new); + } + } + } + } + } + } +} + +else if (matchDomain('project-syndicate.org')) { + func_post = function () { + let hidden_images = document.querySelectorAll('img[src][new-cursrc]'); + for (let elem of hidden_images) { + if (elem.src.startsWith('data:image/')) + elem.src = elem.getAttribute('new-cursrc'); + elem.style = 'width: 95%;'; + } + } + let url = window.location.href; + getArchive(url, 'div.paywall--base', '', 'main > article'); +} + +else if (matchDomain('puck.news')) { + let url = window.location.href; + getArchive(url, 'div[class*="paywall"]', '', 'article'); + let modal = document.querySelector('div#paywall-modal'); + removeDOMElement(modal); + let overlay = document.querySelector('body.paywall-active'); + if (overlay) + overlay.classList.remove('paywall-active'); +} + +else if (matchDomain('reuters.com')) { + let ads = 'div[data-testid="ResponsiveAdSlot"], div[data-testid="Dianomi"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('rugbypass.com')) { + if (window.location.pathname.match(/^\/plus\/\w/)) { + let paywall = document.querySelector('.premium-fold-bottom'); + if (paywall) { + paywall.classList.remove('premium-fold-bottom'); + let offer = document.querySelector('.plus-article-offer'); + removeDOMElement(offer); + let fade = document.querySelector('.fade'); + if (fade) + fade.classList.remove('fade'); + } + let lazy_images = document.querySelectorAll('figure > img.lazy[data-src]:not([src])'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-src'); + elem.removeAttribute('class'); + } + } +} + +else if (matchDomain('scientificamerican.com')) { + setCookie('article_meter', '', 'scientificamerican.com', '/', 0); +} + +else if (matchDomain('scholastic.com')) { + let paywall = document.querySelector('div.paywallModalElement'); + if (paywall) { + let modal = document.querySelector('div.modal-backdrop'); + removeDOMElement(paywall, modal); + let body_modal = document.querySelector('body.modal-open'); + if (body_modal) + body_modal.removeAttribute('class'); + } +} + +else if (matchDomain('science.org')) { + let paywall = document.querySelector('div.alert-read-limit'); + removeDOMElement(paywall); + let overlay = document.querySelector('body.alert-read-limit__overlay'); + if (overlay) + overlay.classList.remove('alert-read-limit__overlay'); +} + +else if (matchDomain('scmp.com')) { + window.setTimeout(function () { + if (matchDomain('amp.scmp.com')) { + amp_unhide_subscr_section('div.ad-banner, div.advert-fly-carpet-container, div.inline-advert'); + let amp_images = document.querySelectorAll('section.article-body amp-img[src]'); + for (let elem of amp_images) { + let img = document.createElement('img'); + img.src = elem.getAttribute('src'); + img.alt = elem.getAttribute('alt'); + img.style = 'width: 90%;'; + elem.parentNode.replaceChild(img, elem); + } + let default_meters = document.querySelectorAll('div[id^="default-meter-page-views"]'); + removeDOMElement(...default_meters); + } else { + let paywall = document.querySelectorAll('div[data-qa="GenericArticle-PaywallContainer"], div.js-reading-0-percent-completion-tracker'); + if (paywall.length) { + removeDOMElement(...paywall); + let article = document.querySelector('section[data-qa="ContentBody-ContentBodyContainer"]'); + if (article) { + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.payload.data.article.body.json) { + let pars = json.props.pageProps.payload.data.article.body.json; + if (pars && pars.length) + article.innerHTML = ''; + for (let par of pars) { + let elem = document.createElement('p'); + if (window.location.pathname.startsWith('/magazines/')) + elem.style = 'margin: 20px 0px;'; + if (['p', 'h3'].includes(par.type)) { + for (let sub_elem of par.children) { + if (sub_elem.type === 'text') { + if (sub_elem.data) + elem.appendChild(document.createTextNode(sub_elem.data)); + } else if (['a', 'em', 'span', 'strong'].includes(sub_elem.type)) { + let first_child = sub_elem.children && sub_elem.children[0]; + if (sub_elem.children && sub_elem.children.length > 1) { + let elem_text = sub_elem.children.map(x => x.data || x.children[0].data).join(''); + first_child = {type: 'text', data: elem_text}; + } + if (first_child) { + if (first_child.type === 'text') { + if (first_child.data) { + let a_link = document.createElement('span'); + if (sub_elem.attribs && sub_elem.attribs.href) { + a_link = document.createElement('a'); + a_link.style = 'text-decoration: underline;'; + a_link.href = sub_elem.attribs.href; + if (!matchUrlDomain(window.location.hostname, sub_elem.attribs.href)) + a_link.target = '_blank'; + } else if (sub_elem.type === 'em') + a_link.style = 'font-style: italic;'; + else if (sub_elem.type === 'strong') + a_link.style = 'font-weight: bold;'; + a_link.innerText = first_child.data; + elem.appendChild(a_link); + } + } + } + } else if (sub_elem.type === 'img') { + if (sub_elem.attribs) { + let attribs = sub_elem.attribs; + if (attribs.src) + elem = makeFigure(attribs.src, attribs.title, {alt: attribs.alt, style: 'width: 100%;'}, {style: 'font-size: 80%;'}); + } + } else { + console.log(sub_elem); + } + } + } else if (par.type === 'div') { + if (par.attribs) { + if (par.attribs.class === 'image-inline-container') { + if (par.children && par.children[0]) { + let attribs = par.children[0].attribs; + if (attribs.src) + elem = makeFigure(attribs.src, attribs.title, {alt: attribs.alt, style: 'width: 100%;'}, {style: 'font-size: 80%;'}); + } + } else if (par.attribs.class.match(/(methode-html|oembed|video)-wrapper/) && par.children) { + addIframe(par.children); + function addIframe(par_children) { + for (let sub_elem of par_children) { + if (sub_elem.children) + addIframe(sub_elem.children); + if (sub_elem.type === 'iframe') { + let attribs = sub_elem.attribs; + if (attribs.src) { + let figure = document.createElement('figure'); + let iframe = document.createElement('iframe'); + iframe.src = attribs.src; + if (attribs.width && attribs.height) { + if (!attribs.width.includes('%')) { + let ratio = attribs.width / (article.offsetWidth); + iframe.width = attribs.width / ratio; + iframe.height = attribs.height / ratio; + } else { + iframe.width = attribs.width; + iframe.height = attribs.height; + } + } else if (attribs.style) { + iframe.style = attribs.style; + if (attribs.height) + iframe.height = attribs.height; + } + figure.appendChild(iframe); + if (attribs.title) { + let iframe_title = document.createElement('figcaption'); + iframe_title.innerText = attribs.title; + iframe_title.style = 'font-size: 80%;'; + figure.appendChild(iframe_title); + } + elem.appendChild(figure); + } + } + } + } + } else if (par.attribs.class) + console.log(par); + } + } else if (!['blockquote-quote', 'inline-ad-slot', 'track-viewed-percentage'].includes(par.type)) + console.log(par); + if (elem.hasChildNodes()) + article.appendChild(elem); + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + }, 0); + let ads = 'div[data-qa*="AdSlot"], div.adblock-message'; + hideDOMStyle(ads); +} + +else if (matchDomain('seattletimes.com')) { + let ads = 'div.top-ad-wrapper, div.ad, div.native-ad-article'; + hideDOMStyle(ads); +} + +else if (matchDomain('sfstandard.com')) { + setCookie('zephr-session', '', 'sfstandard.com', '/', 0); + let ads = 'div.sticky'; + hideDOMStyle(ads); +} + +else if (matchDomain(sg_sph_media_domains)) { + if (matchDomain('straitstimes.com')) { + func_post = function () { + header_nofix('main', 'div#sph_cdp_4:not(:empty)', 'BPC > no archive-fix'); + } + let url = window.location.href; + getArchive(url, 'div[id][data-sdkids-campaignname^="OVR_Anon_Locked_"]', '', 'main'); + } else if (matchDomain('businesstimes.com.sg')) { + let article = document.querySelector('div.body-content > div[class]'); + if (article) { + let par_hidden = article.querySelectorAll('p.hidden'); + if (par_hidden.length) { + par_hidden[0].parentNode.removeAttribute('class'); + for (let elem of par_hidden) + elem.classList.remove('hidden'); + let fade = article.querySelector('p[class*="bg-gradient-to-t"]'); + if (fade) + fade.className = par_hidden[0].className; + } + } + } + let ads = 'div.ads, div[id^="dfp-ad-"], div.cx_paywall_placeholder, div[data-testid="cas-block-component"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('slate.com')) { + let slate_roadblock = '.slate-roadblock'; + let ads = 'section[class*="-ad"]'; + hideDOMStyle(slate_roadblock + ', ' + ads); +} + +else if (matchDomain('slideshare.net')) { + window.localStorage.clear(); + let limit_overlay = document.querySelector('.limit-overlay'); + if (limit_overlay) + limit_overlay.classList.remove('limit-overlay'); +} + +else if (matchDomain('sloanreview.mit.edu')) { + if (window.location.pathname.startsWith('/article/')) { + window.setTimeout(function () { + let pars = document.querySelectorAll('div.article-content > p'); + if (pars.length && pars.length < 7) + refreshCurrentTab(); + }, 1000); + } +} + +else if (matchDomain('sofrep.com')) { + setCookie('sofrep_news_ids', '', 'sofrep.com', '/', 0); + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.removeAttribute('class'); + let intro = document.querySelector('div.non-paywall'); + removeDOMElement(intro); + waitDOMElement('div#paywall_wrap', 'DIV', node => removeDOMElement(node.parentNode)); + } + let banners = document.querySelectorAll('#scrollerCTA, #botCta'); + removeDOMElement(...banners); +} + +else if (matchDomain('spglobal.com')) { + setCookie('count', '', 'spglobal.com', '/', 0); +} + +else if (matchDomain('standardmedia.co.ke')) { + let paywall = document.querySelector('div.fade-out-container'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text.replace(/[\r\n]/g, '')); + if (json) { + let json_text = parseHtmlEntities(breakText(json.articleBody)).replace(/[\r\n]/g, '
').replace(/[^<]+

/, ''); + let article = document.querySelector('div.content'); + if (json_text && article) { + let parser = new DOMParser(); + let doc = parser.parseFromString('

' + json_text + '

', 'text/html'); + let article_new = doc.querySelector('p'); + let pars_old = article.querySelectorAll('p:not([class])'); + removeDOMElement(...pars_old); + article.appendChild(article_new); + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div.ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('staradvertiser.com')) { + let paywall = document.querySelectorAll('div.fade'); + if (paywall.length) { + removeDOMElement(...paywall); + let div_hidden = document.querySelector('div#hsa-paywall-content[style]'); + if (div_hidden) + div_hidden.removeAttribute('style'); + let noscroll = document.querySelector('body.overflow-hidden'); + if (noscroll) + noscroll.classList.remove('overflow-hidden'); + } + let ads = 'div.promo-container, div.teads-inread'; + hideDOMStyle(ads); +} + +else if (matchDomain('startribune.com')) { + let ads = 'div[data-testid$="-ad"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('statnews.com')) { + let paywall = document.querySelector('div.restricted-content-breaker'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.entry-content, section.the-content'); + if (article) { + let url = window.location.href; + article.before(googleSearchToolLink(url)); + } + } + let ads = 'div.header-ad-wrap, div[class*="dfp-ad"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('stereogum.com')) { + let paywall = document.querySelector('div.members-only-overlay-wrapper'); + if (paywall) { + removeDOMElement(paywall); + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + if (json_url_dom) { + let json_url = json_url_dom.href; + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = json.acf.article_modules[0].copy.replace(/data-src/g, 'src'); + let content = document.querySelector('div.article__content div.text-block__inner'); + if (json_text && content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + content.innerHTML = ''; + content.appendChild(content_new); + } + } catch (err) { + console.log(err); + } + }); + } + }); + } + } +} + +else if (matchDomain('stocknews.com')) { + let hideme = document.querySelector('div#hideme'); + removeDOMElement(hideme); + let blurmes = document.querySelectorAll('div[id^="blurme"]'); + for (let i = 0; i < blurmes.length; i++) + blurmes[i].setAttribute('id', 'blurmenot' + i); +} + +else if (matchDomain('stratfor.com')) { + let url = window.location.href; + getArchive(url, 'div#paywallCTAContainer:not(:empty)', '', 'main', '', 'main', 'h1'); +} + +else if (matchDomain('study.com')) { + let faded_content = document.querySelector('div.faded-content'); + if (faded_content) + faded_content.removeAttribute('class'); + let div_hidden = document.querySelector('div.hidden[ng-non-bindable]'); + if (div_hidden) + div_hidden.removeAttribute('class'); + let banners = document.querySelectorAll('div.article-cutoff-div'); + removeDOMElement(...banners); +} + +else if (matchDomain('swarajyamag.com')) { + if (!window.location.pathname.startsWith('/amp/')) { + let paywall = pageContains('h2', /Please Sign In To Continue Reading/); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (paywall.length) { + removeDOMElement(...paywall); + if (amphtml) + amp_redirect_not_loop(amphtml); + } + } +} + +else if (matchDomain(['techtarget.com', 'computerweekly.com'])) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.classList.remove('paywall'); + let banners = document.querySelectorAll('p#firstP, div#inlineRegistrationWrapper'); + removeDOMElement(...banners); + } +} + +else if (matchDomain('tempo.co')) { + if (matchDomain('magz.tempo.co')) { + header_nofix('article', 'div.pw-containers'); + } else { + let paywall = document.querySelector('div.bg-black > div > img[src="/_ipx/_/icons/paywallatas.svg"]'); + if (paywall) { + removeDOMElement(paywall.parentNode.parentNode); + let article_hidden = document.querySelector('article > div:not([class]) div.overflow-hidden'); + if (article_hidden) + article_hidden.removeAttribute('class'); + let article = document.querySelector('div#content-wrapper'); + if (article) { + let json_script = document.querySelector('script#__NUXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let article_index = json.indexOf('published') + 2; + if (article_index) { + let parser = new DOMParser(); + for (let i = article_index; i < article_index + 50; i++) { + let par = json[i]; + if (par && typeof par === 'string' && par.match(/^<(p|div)/)) { + let doc = parser.parseFromString(par, 'text/html'); + let par_new = doc.querySelector('p, div'); + article.appendChild(par_new); + } else if (!Array.isArray(par)) + console.log(par); + else + break; + } + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + let ads = 'div.ads'; + hideDOMStyle(ads); +} + +else if (matchDomain('the-american-interest.com')) { + let counter = document.getElementById('article-counter'); + removeDOMElement(counter); +} + +else if (matchDomain('the-scientist.com')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.classList.remove('paywall'); + let fader = document.querySelector('div.gated-fader'); + let modal = document.querySelector('div#Modal'); + removeDOMElement(fader, modal); + } +} + +else if (matchDomain('theamericanconservative.com')) { + let paywall_sel = 'section.c-blog-post__body--locked'; + let paywall = document.querySelector(paywall_sel); + if (paywall) { + let art_options = { + art_append: 1, + func_text: function (json_text) { + if (json_text.includes('

')) { + let split = json_text.split(/(

)/); + json_text = split[1] + split[2]; + }; + return json_text; + } + }; + getJsonUrl(paywall_sel, {rm_class: 'c-blog-post__body--locked'}, 'div.c-blog-post__content', art_options); + } else { + let img_dark = document.querySelector('div.c-hero-article__image-img.o-image'); + if (img_dark) + img_dark.removeAttribute('class'); + } + let modal = document.querySelector('div#emailsub-modal'); + removeDOMElement(modal); + let noscroll = document.querySelector('body.modal-open'); + if (noscroll) + noscroll.classList.remove('modal-open'); +} + +else if (matchDomain('theamericanscholar.org')) { + getJsonUrl('div.ssagk-form', '', 'div.post_summary'); +} + +else if (matchDomain('theatlantic.com')) { + let banners = 'aside#paywall, div[class^="LostInventoryMessage_"]'; + hideDOMStyle(banners); +} + +else if (matchDomain('thebulletin.org')) { + getJsonUrl('div.article--cropped', '', 'div#body-copy', {art_append: 1}); +} + +else if (matchDomain('thedailybeast.com')) { + let paywall = document.querySelector('div.Body__paywall-container'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script[displayName="initialState"]'); + if (json_script) { + let json_str = json_script.text.substring(json_script.textContent.indexOf('{')); + try { + let json = JSON.parse(json_str); + if (json.body) { + let pars = json.body.sections; + let cards = json.body.cards; + if (pars) { + let mobile_doc = document.querySelector('div.Mobiledoc'); + if (mobile_doc) { + let mobile_doc_text = mobile_doc.innerText.replace(/(\r|\n)/g, ''); + for (let elem of pars) { + let par_elem = ''; + if (elem[0] === 1) { + if (elem[1] === 'p') { + let par = ''; + for (let part of elem[2]) + par += part[3]; + if (par && !mobile_doc_text.includes(par)) { + par_elem = document.createElement('p'); + par_elem.innerText = par; + } + } + } else if (elem[0] === 10) { + if (cards && cards[elem[1]]) { + let card = cards[elem[1]]; + if (card[0] === 'pt-image') { + par_elem = document.createElement('p'); + let par_fig = makeFigure(card[1].url, card[1].title + ' ' + card[1].credit); + par_elem.appendChild(par_fig); + } else if (card[0] === 'pt-fancy-links-card') { + par_elem = document.createElement('p'); + let par_link = document.createElement('a'); + par_link.href = card[1].links; + par_link.innerText = card[1].linksData[0].long_headline; + par_elem.appendChild(par_link); + } + } + } + if (par_elem) + mobile_doc.appendChild(par_elem); + } + } + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = document.querySelectorAll('div > div.tdb-ads-block'); + for (let ad of ads) + hideDOMElement(ad.parentNode); +} + +else if (matchDomain('thediplomat.com')) { + if (matchDomain('magazine.thediplomat.com')) { + let article = document.querySelector('article > section.h-96'); + if (article) + article.classList.remove('h-96'); + let fade = 'aside.bg-gradient-to-b'; + hideDOMStyle(fade, 2); + } + let ads = 'aside.td-ad-container--labeled, div[data-actirise]'; + hideDOMStyle(ads); +} + +else if (matchDomain('theglobeandmail.com')) { + let lazy_images = document.querySelectorAll('img[src^="data:image/"][data-src]'); + for (let elem of lazy_images) + elem.src = elem.getAttribute('data-src'); + let ads = 'div.c-ad--base'; + hideDOMStyle(ads); +} + +else if (matchDomain(['thehindu.com', 'thehindubusinessline.com'])) { + if (!window.location.pathname.endsWith('/amp/')) { + let counter = '#test'; + let ads = 'div.ad, div.article-ad, div.dfp-ad, div#paywallbox, div[id^="piano-art-"]'; + hideDOMStyle(counter + ', ' + ads); + } else { + let ads = '[class^="height"], [class^="advt"], [id^="piano"]'; + hideDOMStyle(ads); + } + function hindu_main() { + if (window) { + window.Adblock = false; + window.isNonSubcribed = false; + } + } + insert_script(hindu_main); +} + +else if (matchDomain(['thejuggernaut.com', 'jgnt.co'])) { + let paywall = pageContains('div.font-mono', /(Read this article and many more by subscribing today|Join today to read the full story)/); + if (paywall.length) { + removeDOMElement(paywall[0].parentNode); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.post.fields) { + let url_next = json.query.slug; + if (url_next && !window.location.pathname.includes(url_next)) + refreshCurrentTab(); + let fields = json.props.pageProps.post.fields; + let pars = fields.fullText ? fields.fullText.content : fields.textEssay.fields.body.content; + window.setTimeout(function () { + let article = document.querySelector('div[class*="opacity-"]'); + if (article) { + article.innerHTML = ''; + article.removeAttribute('class'); + let fade = document.querySelectorAll('div.bg-gradient-to-b'); + for (let elem of fade) + elem.removeAttribute('class'); + let modal = document.querySelector('div#headlessui-portal-root'); + removeDOMElement(modal); + let par_first = true; + function attach_text(sub_item, elem) { + if (sub_item.value) { + let sub_elem = document.createElement('span'); + sub_elem.innerText = sub_item.value; + if (sub_item.marks && sub_item.marks.length) { + let style = ''; + for (let mark of sub_item.marks) { + if (mark.type === 'bold') + style += 'font-weight: bold;'; + else if (mark.type === 'italic') + style += 'font-style: italic;'; + else if (mark.type === 'underline') + style += 'text-decoration: underline;'; + } + sub_elem.style = style; + } + elem.appendChild(sub_elem); + } + } + function attach_hyperlink(sub_item, elem) { + if (sub_item.content && sub_item.content[0] && sub_item.content[0].value && sub_item.data && sub_item.data.uri) { + let sub_elem = document.createElement('a'); + sub_elem.href = sub_item.data.uri; + sub_elem.innerText = sub_item.content[0].value; + if (!matchUrlDomain(['thejuggernaut.com', 'jgnt.co'], sub_item.data.uri)) + sub_elem.target = '_blank'; + sub_elem.style = 'text-decoration: underline;'; + elem.appendChild(sub_elem); + } + } + function attach_paragraph(par, elem) { + if (par.content && par.content.length) { + let span_elem = document.createElement('span'); + for (let item of par.content) { + if (item.nodeType === 'text') { + attach_text(item, span_elem); + } else if (item.nodeType === 'hyperlink') { + attach_hyperlink(item, span_elem); + } else + console.log(item); + } + elem.appendChild(span_elem); + } + } + for (let par of pars) { + let elem = document.createElement('p'); + if (par.nodeType.match(/^(paragraph|heading-\d)$/)) { + attach_paragraph(par, elem); + } else if (['blockquote'].includes(par.nodeType)) { + if (par.content && par.content.length) { + for (let item of par.content) { + if (item.nodeType === 'paragraph') { + elem.style = 'margin: 0px 20px; font-style: italic;'; + attach_paragraph(item, elem); + } else + console.log(item); + } + } + } else if (par.nodeType === 'hr') { + elem.appendChild(document.createElement('hr')); + } else if (par.nodeType === 'embedded-asset-block') { + if (!par_first) { + if (par.data && par.data.target && par.data.target.fields) { + if (par.data.target.fields.file && par.data.target.fields.file.url) { + let figure = makeFigure(par.data.target.fields.file.url, par.data.target.fields.description); + elem.appendChild(figure); + } + } + } else + par_first = false; + } else if (par.nodeType === 'unordered-list') { + if (par.content && par.content.length) { + let ul = document.createElement('ul'); + for (let item of par.content) { + if (item.nodeType === 'list-item') { + if (item.content) { + for (let sub_item_par of item.content) { + if (sub_item_par.nodeType === 'paragraph') { + let li = document.createElement('li'); + attach_paragraph(sub_item_par, li); + ul.appendChild(li); + } + } + } + } else + console.log(item); + } + elem.appendChild(ul); + } + } else { + console.log(par); + } + if (elem.hasChildNodes()) { + article.appendChild(document.createElement('br')); + article.appendChild(elem); + } + } + } + }, 1000); + } else + refreshCurrentTab(); + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain('thelampmagazine.com')) { + let paywall = document.querySelector('div.paywall-gradient'); + if (paywall) { + paywall.removeAttribute('class'); + let banner = document.querySelector('section.p-8'); + removeDOMElement(banner); + } + let login = document.querySelectorAll('a.js-login-modal-trigger'); + for (let elem of login) { + elem.removeAttribute('class'); + let url_search = '/search?q=' + elem.innerText.replace(/\s/g, '+'); + elem.href = url_search; + elem.onclick = x => window.location.href = url_search; + } +} + +else if (matchDomain('thenewatlantis.com')) { + let article_gated = document.querySelector('.article-gated'); + if (article_gated) + article_gated.classList.remove('article-gated'); +} + +else if (matchDomain('thenewsminute.com')) { + let paywall = document.querySelector('div#paywall-banner'); + if (paywall) { + removeDOMElement(paywall); + let fade = document.querySelector('div[class^="paywall-story-styles-"]'); + if (fade) + fade.removeAttribute('class'); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = breakText(parseHtmlEntities(json.articleBody.replace(/\.\./g, '.\r\n\r\n'))); + let article = document.querySelector('div.arr--story-page-card-wrapper'); + if (json_text && article) { + article.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + article.appendChild(article_new); + } + } + } + } +} + +else if (matchDomain('thepointmag.com')) { + setCookie('monthly_history', '', 'thepointmag.com', '/', 0); + let overlay = document.querySelectorAll('div.overlay, div#tpopup-'); + removeDOMElement(...overlay); +} + +else if (matchDomain('thequint.com')) { + window.setTimeout(function () { + let lock = document.querySelector('div > img[alt^="lock"]'); + if (lock) { + lock.removeAttribute('alt'); + let paywall = document.querySelector('div#paywall-widget'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.story-element'); + if (article) { + let article_new = getArticleQuintype(); + if (article_new && article.parentNode) + article.parentNode.replaceChild(article_new, article); + } + } + let body_hidden = document.querySelector('div#story-body-wrapper'); + if (body_hidden) { + body_hidden.removeAttribute('class'); + body_hidden.removeAttribute('style'); + } + function thequint_unhide(node) { + node.removeAttribute('style'); + } + waitDOMAttribute('div#story-body-wrapper', 'DIV', 'style', thequint_unhide, true); + } + }, 4000); +} + +else if (matchDomain('thespectator.com')) { + let div_hidden = document.querySelector('div.ev-meter-content-class'); + if (div_hidden) + div_hidden.classList.remove('ev-meter-content-class'); +} + +else if (matchDomain('theweek.com')) { + let paywall = document.querySelector('div.kiosq-main-layer'); + removeDOMElement(paywall); + let locker = document.querySelector('div.paywall-locker'); + if (locker) + locker.classList.remove('paywall-locker'); +} + +else if (matchDomain('thewrap.com')) { + setCookie('blaize_session', '', 'thewrap.com', '/', 0); + getJsonUrl('div#zephr-payment-form-root', '', 'div.entry-content', {art_append: 1}); + let fade = document.querySelector('div.content-area div[style*="background-image: linear-gradient"]'); + removeDOMElement(fade); +} + +else if (matchDomain('timeshighereducation.com')) { + let paywall = document.querySelector('div.paywall-active'); + if (paywall) { + removeDOMElement(paywall); + let fade = document.querySelectorAll('div.paywall-fade'); + for (let elem of fade) + elem.classList.remove('paywall-fade'); + } + let hidden_images = document.querySelectorAll('img.b-lazy[src^="data:image/"][data-src]'); + for (let hidden_image of hidden_images) { + hidden_image.setAttribute('src', hidden_image.getAttribute('data-src')); + hidden_image.classList.remove('b-lazy'); + hidden_image.parentElement.classList.remove('media--loading'); + } + let ads = 'div[data-ad-page], section.block-the-dfp'; + hideDOMStyle(ads); +} + +else if (matchDomain(timesofindia_domains)) { + if (matchDomain('epaper.indiatimes.com')) { + let blocker = document.querySelector('div.epaperBlockerWrap'); + removeDOMElement(blocker); + if (window.location.pathname.startsWith('/english-news-paper-today-toi-print-edition/')) { + let paywall = document.querySelector('section#blocker'); + if (paywall) { + let fq = document.querySelector('section#fq'); + removeDOMElement(paywall, fq); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let content = document.querySelector('section[type="synopsis"]'); + if (json_text && content) { + let article_new = document.createElement('p'); + article_new.innerText = breakText(json_text); + content.innerHTML = ''; + addStyle('[type="synopsis"]::after {background: none !important;}'); + content.appendChild(article_new); + } + } + } + } + } + } else { + let url = window.location.href; + let region_block = document.querySelector('div.plan-popup.active'); + if (region_block) { + removeDOMElement(region_block); + let overflow = document.querySelector('html[style]'); + if (overflow) + overflow.removeAttribute('style'); + } + if (!window.location.pathname.includes('/amp_')) { + let paywall = document.querySelector('div[id^="story-blocker"]'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let article = document.querySelector('div.paywall'); + if (json_text && article) { + if (!json_text.match(/\s(src|href)=/)) + json_text = breakText(json_text).replace(/\n\n/g, '

'); + window.setTimeout(function () { + let parser = new DOMParser(); + let doc = parser.parseFromString('

' + parseHtmlEntities(json_text) + '
', 'text/html'); + let article_new = doc.querySelector('div'); + if (article_new) { + article.innerHTML = ''; + article.appendChild(article_new); + } + }, 1500); + addStyle('div.paywall::after {background-image: none !important;}'); + } + } + } catch (err) { + console.log(err); + } + } + window.setTimeout(function () { + let popup_button = document.querySelector('div.primeshow button:not([data-type])'); + if (popup_button) + popup_button.click(); + }, 1000); + let banners = 'div.bannerBenefitsWrapper'; + hideDOMStyle(banners); + } + } else { + ampToHtml(); + } + } +} + +else if (matchDomain(no_dn_media_domains)) { + if (matchDomain('tradewindsnews.com')) { + if (window.location.pathname.startsWith('/markets/')) { + let paywall = document.querySelector('iframe[src]'); + removeDOMElement(paywall); + let overflow = document.querySelector('body[style]'); + if (overflow) + overflow.removeAttribute('style'); + let blurred = document.querySelector('body > div[style]'); + if (blurred) + blurred.removeAttribute('style'); + } else { + header_nofix('div.article-body > div', 'div[style*="background-image: linear-gradient"]'); + } + } else { + window.setTimeout(function () { + let paywall = document.querySelector('div.dn-paywall > div#sub-paywall-container'); + if (paywall) { + removeDOMElement(paywall.parentNode); + let article = document.querySelector('div#dn-content'); + let json_script = document.querySelector('script#__NUXT_DATA__'); + if (json_script) { + try { + let pars = JSON.parse(json_script.text); + let article_id_index = pars.indexOf('global-article') + 1; + if (article_id_index) { + let article_id = pars[article_id_index]; + if (article_id && !window.location.pathname.endsWith(article_id)) { + refreshCurrentTab(); + return; + } + } + article.innerHTML = ''; + article.classList.remove('shadow'); + let img_first = true; + let parser = new DOMParser(); + for (let par of pars) { + let elem; + if (par && par.type) { + let type = pars[par.type]; + if (['text', 'subhead'].includes(type)) { + if (par.html || par.value) { + let index = par.html || par.value; + let json_text = pars[index]; + let content_new = parser.parseFromString('

' + json_text + '

', 'text/html'); + elem = content_new.querySelector('p'); + if (par.value) + elem.style = 'font-weight: bold;'; + } + } else if (type === 'picture') { + if (img_first) + img_first = false; + else { + let caption_text = pars[par.caption]; + if (par.credit) + caption_text += ' (' + pars[par.credit] + ')'; + elem = makeFigure(pars[par.src], caption_text); + elem.className = 'dn-image'; + } + } else if (type === 'factbox') { + elem = document.createElement('p'); + if (par.title) + elem.innerText = pars[par.title]; + if (par.html) { + let content_new = parser.parseFromString('
' + pars[par.html] + '
', 'text/html'); + let box = content_new.querySelector('div'); + elem.appendChild(box); + } + } else if (type === 'news' && par.title && par.url) { + elem = document.createElement('p'); + let sub_elem = document.createElement('a'); + sub_elem.href = pars[par.url]; + sub_elem.innerText = 'Related: ' + pars[par.title]; + sub_elem.style = 'font-weight: bold;'; + elem.appendChild(sub_elem); + } else if (!['ad', 'adobetarget', 'author', 'break', 'embed', 'Emne', 'Location', 'news', 'Organisasjon', 'Organisation', 'Organization', 'promobox', 'Person', 'Personer', 'Region', 'Regions', 'related', 'Sector', 'Sectors', 'Selskap', 'Sted', 'Topic'].includes(type)) { + for (let item in par) { + console.log(item); + console.log(pars[par[item]]); + } + } + if (elem) + article.appendChild(elem); + } + } + } catch (err) { + console.log(err); + } + } + } else if (matchDomain('dn.no') && window.location.pathname.match(/^\/(d2|magasinet|smak)\//)) { + let paywall = document.querySelector('div#sub-paywall-container'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('p.vrs-article-header__summary'); + if (article) { + let url = window.location.href; + article.firstChild.before(googleSearchToolLink(url)); + } + } + } + }, 1000); + } +} + +else if (matchDomain(usa_conde_nast_domains)) { + let maps = document.querySelectorAll('div.map_wrapper'); + for (let elem of maps) + elem.style.visibility = 'visible'; + let banners = 'div.ad, aside.paywall-bar, div[class^="MessageBannerWrapper-"], div.ad-stickyhero, div.ad_wrapper'; + hideDOMStyle(banners); +} + +else if (matchDomain(usa_craincomm_domains)) { + if (matchDomain('adage.com')) { + let paywall = document.querySelector('div#piano-paywall-container'); + let article = document.querySelector('article.b-article-body'); + if (paywall && article) { + removeDOMElement(paywall); + let fusion_script = document.querySelector('script#fusion-metadata'); + if (fusion_script && fusion_script.text.includes('Fusion.globalContent=')) { + try { + let json = JSON.parse(fusion_script.text.split('Fusion.globalContent=')[1].split(';Fusion.')[0]); + if (json) { + article.innerHTML = ''; + let parser = new DOMParser(); + let pars = json.content_elements; + for (let par of pars) { + let par_new; + if (['header', 'text'].includes(par.type)) { + if (par.content) { + let doc = parser.parseFromString('

' + par.content + '

', 'text/html'); + par_new = doc.querySelector('p'); + } + } else if (par.type === 'image') { + if (par.url) { + let caption_text = par.caption; + if (par.credits && par.credits.affiliation && par.credits.affiliation[0] && par.credits.affiliation[0].name) + caption_text += ' (' + par.credits.affiliation[0].name + ')'; + par_new = makeFigure(par.url, caption_text); + } + } else if (par.type === 'raw_html') { + let doc = parser.parseFromString('
' + par.content + '
', 'text/html'); + par_new = doc.querySelector('div'); + } else if (par.raw_oembed) { + if (par.raw_oembed._id) { + par_new = document.createElement('p'); + let par_link = document.createElement('a'); + par_link.href = par_link.innerText = par.raw_oembed._id.replace(/\/$/, ''); + par_link.target = '_blank'; + par_new.appendChild(par_link); + } + } else if (par.type === 'video') { + if (par.canonical_url) { + if (par.canonical_website === 'adage') { + par_new = document.createElement('p'); + let par_link = document.createElement('a'); + par_link.href = par_link.innerText = 'https://www.adage.com' + par.canonical_url.replace(/\/$/, ''); + par_link.target = '_blank'; + par_new.appendChild(par_link); + } else + console.log(par); + } + } else if (par.type === 'list') { + if (par.items) { + par_new = document.createElement('ul'); + for (let item of par.items) { + let li = document.createElement('li'); + let doc = parser.parseFromString('' + item.content + '', 'text/html'); + let span = doc.querySelector('span'); + li.appendChild(span); + par_new.appendChild(li); + } + } + } else if (!['custom_embed'].includes(par.type)) { + console.log(par); + } + if (par_new) + article.appendChild(par_new); + } + } + } catch (err) { + console.log(err); + } + } + } + } else if (matchDomain('european-rubber-journal.com')) { + let paywall = document.querySelector('div.article-overlay'); + if (paywall) { + let fade = document.querySelector('div.gradient'); + removeDOMElement(paywall, fade); + let truncated = document.querySelector('div.truncated'); + if (truncated) + truncated.classList.remove('truncated'); + } + } else if (matchDomain(['pionline.com', 'rubbernews.com'])) { + let body_hidden = document.querySelector('body[class]'); + if (body_hidden) + body_hidden.removeAttribute('class'); + let lazy_images = document.querySelectorAll('img.lazy[data-src]'); + for (let lazy_image of lazy_images) { + lazy_image.src = lazy_image.getAttribute('data-src'); + lazy_image.removeAttribute('class'); + } + let lazy_sources = document.querySelectorAll('source[srcset^="data:image"]'); + removeDOMElement(...lazy_sources); + } else { + let sponsored_article = document.querySelector('div.sponsored-article'); + if (sponsored_article) + sponsored_article.classList.remove('sponsored-article'); + } + let ads = 'div.footer__ads-footer'; + hideDOMStyle(ads); +} + +else if (matchDomain(usa_nymag_domains)) { + let ads = 'div.m-ad, section.ad-splash, aside.ad_static'; + hideDOMStyle(ads); +} + +else if (matchDomain(usa_outside_mag_domains)) { + let ads = 'div.js-ad'; + hideDOMStyle(ads); +} + +else if (matchDomain(usa_penske_media_domains)) { + let ads = 'div.admz'; + hideDOMStyle(ads); +} + +else if (matchDomain(usa_tribune_domains)) { + getJsonUrl('div.paywall-container', '', 'div.body-copy', {art_class: 'body-copy'}); + let ads = 'div.dfp-ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('usatoday.com')) { + if (window.location.hostname.startsWith('amp.')) { + amp_unhide_access_hide('="gup.hasAssetAccess"', '', 'div[class*="ad-"]'); + } else { + amp_redirect('div.gnt_rb'); + let roadblock = document.querySelector('.roadblock-container'); + if (roadblock) { + removeDOMElement(roadblock); + article_next = document.querySelector('article.next-in-depth-story > div.article-inner'); + if (article_next) { + let url = article_next.getAttribute('data-url'); + let weblink = document.createElement('a'); + weblink.href = url; + weblink.innerText = 'open next in-depth story'; + article_next.appendChild(weblink); + } + } + } +} + +else if (matchDomain('vice.com')) { + let paywall = document.querySelectorAll('iframe.swg-dialog, swg-popup-background'); + removeDOMElement(...paywall); + let noscroll = document.querySelector('body.swg-disable-scroll'); + if (noscroll) + noscroll.classList.remove('swg-disable-scroll'); +} + +else if (matchDomain('vikatan.com')) { + window.setTimeout(function () { + let paywall = document.querySelector('div#paywallDisplay'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(json.articleBody); + let content = document.querySelector('div.story-element > div'); + if (json_text && content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + content.parentNode.replaceChild(content_new, content); + } + } + } + } + let story_hidden = document.querySelector('div[class^="styles-m__story-card-wrapper_"]'); + if (story_hidden) + story_hidden.removeAttribute('class'); + }, 500); +} + +else if (matchDomain('voguebusiness.com')) { + setCookie('userId', '', 'voguebusiness.com', '/', 0); + let article = document.querySelector('article'); + if (article) { + let pars = article.querySelectorAll('p:not([class]), p.paywall'); + if (pars.length < 5) { + removeDOMElement(...pars); + let filter = /^window\.__PRELOADED_STATE__\s?=\s?/; + let json_script = getSourceJsonScript(filter, '[type]:not([src])'); + if (json_script) { + try { + let json = JSON.parse(json_script.text.split(filter)[1].split('};')[0] + '}'); + let body = document.querySelector('div.body__inner-container'); + if (body) { + let pars = json.transformed.article.body; + function makeElem(elem, par_elem) { + if (Array.isArray(elem) && elem.length) { + let elem_new; + let item = elem[0]; + if (typeof item === 'string') { + if (['p', 'h2', 'em', 'strong'].includes(item)) { + elem_new = document.createElement(item); + par_elem.appendChild(elem_new); + elem.shift(); + makeElem(elem, elem_new); + } else if (item === 'a' && elem.length > 2) { + elem_new = document.createElement('a'); + let a_data = elem[1]; + elem_new.href = a_data.href; + if (a_data.isExternal) + elem_new.target = '_blank'; + makeElem(elem.slice(2), elem_new); + par_elem.appendChild(elem_new); + } else if (item === 'inline-embed' || !(['ad', 'cm-unit', 'inline-newsletter', 'journey-inline-newsletter', 'native-ad'].includes(item) || (item.length < 30 && item.includes('inline-embed')))) { + if (item === 'inline-embed') { + let img_data = elem[1]; + if (img_data && img_data.type === 'image') { + if (img_data.props && img_data.props.image && img_data.props.image.sources) { + let caption_text; + if (img_data.props.dangerousCaption) { + caption_text = img_data.props.dangerousCaption.replace(/<\/?\w+>/g, ''); + if (img_data.props.dangerousCredit) + caption_text += ' ' + img_data.props.dangerousCredit; + } + let figure = makeFigure(img_data.props.image.sources.lg.url, caption_text); + par_elem.appendChild(figure); + } + } + } else { + elem_new = document.createTextNode(item); + par_elem.appendChild(elem_new); + elem.shift(); + makeElem(elem, par_elem); + } + } + } else if (Array.isArray(item)) { + if (['a', 'em', 'strong'].includes(item[0])) { + makeElem(item, par_elem); + elem.shift(); + makeElem(elem, par_elem); + } else { + console.log(item); + } + } else if (typeof item === 'object') { + if (!item.class) + console.log(item); + elem.shift(); + makeElem(elem, par_elem); + } + } else if (typeof elem === 'string' && !['div'].includes(elem)) { + par_elem.appendChild(document.createTextNode(elem)); + } + } + for (let par of pars) + makeElem(par, body); + } + } catch (err) { + console.log(err); + } + } + } + } +} + +else if (matchDomain('vox.com')) { + let ads = 'div[id^="div-gpt-ad-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('washingtonpost.com')) { + let leaderboard = '#leaderboard-wrapper'; + let ads = 'div[data-qa$="-ad"], div[data-component="Ad"], div[data-qa="outbrain"]'; + hideDOMStyle(leaderboard + ', ' + ads); +} + +else if (matchDomain('winnipegfreepress.com')) { + let ads = '.billboard-ad-space, .ad, .article-ad, .fixed-sky'; + hideDOMStyle(ads); +} + +else if (matchDomain('wsj.com')) { + if (window.location.pathname.startsWith('/livecoverage/')) { + window.setTimeout(function () { + fix_dowjones_live(); + }, 1500); + } else { + let paywall = document.querySelector('.snippet-promotion, div[id*="-snippet-overlay"]'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('article section'); + let article_id_dom = document.querySelector('head > meta[name="article.id"][content]'); + if (article && article_id_dom) { + article.removeAttribute('class'); + let article_id = article_id_dom.content; + let url_src = 'https://mats.mobile.dowjones.io/translate/' + article_id + '/jpml'; + let x_api_key = 'e05995ff442143255eb8381f72d4913bf7503d6c'; + getExtFetch(url_src, '', {"x-api-key": x_api_key}, main_wsj_pro); + function main_wsj_pro(url_src, data) { + try { + if (data) { + let intro = article.querySelectorAll('p[class][data-type="paragraph"]'); + let par_class; + if (intro[0]) { + par_class = intro[0].className; + removeDOMElement(...intro); + } + let parser = new DOMParser(); + let doc = parser.parseFromString(data, "application/xml"); + let body = doc.querySelector('panel#body'); + if (body) { + let media_bucket = doc.querySelector('panel#metadata > p#media-bucket'); + let media_items = []; + let schema_data = []; + if (media_bucket) { + media_items = JSON.parse(media_bucket.innerHTML).items.filter(x => ['image', 'video', 'youtube'].includes(x.type)); + if (media_items.length) { + let video = document.querySelector('div[data-type="video"]'); + if (!(video && media_items[0].type !== 'video')) + media_items = media_items.slice(1); + let schema_script = document.querySelector('script#articleschema'); + if (schema_script) + schema_data = JSON.parse(schema_script.text); + } + } + let pars = body.querySelectorAll('p[class], h2, h3, panel.media-item'); + let par_first = true; + let image_nr = 0; + let par_new; + for (let par of pars) { + if (par.tagName === 'p') { + if (par_first) + par_first = false; + let doc = parser.parseFromString('

' + par.innerHTML.replace(/(<\/?mark([^>]+)?>)/g, '') + '

', 'text/html'); + par_new = doc.querySelector('p'); + if (par_new) { + let app_links = par_new.querySelectorAll('a[data-canonical-url][href^="wsj:"], a[data-canonical-url]:not([href])'); + for (let elem of app_links) + elem.href = elem.getAttribute('data-canonical-url'); + } + } else if (!par_first && par.tagName === 'panel') { + if (media_items[image_nr]) { + let media_item = media_items[image_nr]; + if (media_item.type === 'image' && media_item['manifest-url']) { + par_new = makeFigure(media_item['manifest-url'], media_item.caption + ' PHOTO: ' + media_item.credit.toUpperCase(), {style: 'width: 100%;'}); + } else if (media_item.type === 'video' && media_item.sourceid) { + par_new = document.createElement('p'); + par_new.className = par_class; + let title = document.createTextNode(media_item.title); + let video = document.createElement('iframe'); + video.src = schema_data.find(x => x['@type'] === 'VideoObject' && x.embedUrl.includes(media_item.sourceid)).embedUrl; + video.style = 'width: ' + article.offsetWidth + 'px; height: ' + article.offsetWidth * 3 / 4 + 'px;'; + let caption = document.createTextNode(media_item.caption + ' ' + media_item.credit); + par_new.append(title, video, caption); + } else if (media_item.type === 'youtube' && media_item['sourceid']) { + par_new = document.createElement('iframe'); + par_new.src = 'https://www.youtube.com/embed/' + media_item['sourceid']; + par_new.style = 'width: 100%; height: 400px;'; + } else { + console.log(media_item); + } + image_nr++; + } + } else if (!par_first && par.tagName) { + let doc = parser.parseFromString('<' + par.tagName + '>' + par.innerHTML + '', 'text/html'); + par_new = doc.querySelector(par.tagName); + } + if (par_new) + article.appendChild(par_new); + } + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + let ads = 'div.wsj-ad, div.adWrapper, div.css-xgokil-Box, div#cx-article-cover-overlay'; + hideDOMStyle(ads); +} + +else if (matchDomain('zerohedge.com')) { + let paywall = document.querySelector('div[class^="PremiumOverlay_container__"]'); + if (paywall) { + removeDOMElement(paywall); + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.innerText); + if (json && json.props.pageProps.node.body) { + let article_new = parseHtmlEntities(decode_utf8(atob(json.props.pageProps.node.body.substring(21)))); + let article = document.querySelector('div[class^="NodeContent_mainContent__"'); + if (article) { + article.innerHTML = ''; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + article_new + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.appendChild(content_new); + } + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain(ke_nation_media_domains)) { + let paywall = document.querySelectorAll('div.modal, [id*="wall"], section.wall-guard'); + if (paywall.length) { + removeDOMElement(...paywall); + func_post = function () { + let div_hidden = document.querySelectorAll('div.article-page .nmgp'); + for (let elem of div_hidden) + elem.classList.remove('nmgp'); + let page_hidden = document.querySelector('div.article-page .hidden'); + if (page_hidden) + page_hidden.classList.remove('hidden'); + let lazy_images = document.querySelectorAll('img.lazy-img[data-srcset]:not([src])'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-srcset').split(',').pop().split(' ')[0]; + elem.classList.remove('lazy-img'); + elem.style = 'margin: 0px 20px'; + } + let videos = document.querySelectorAll('iframe.lazy-iframe_iframe[data-src]:not([src])'); + for (let elem of videos) { + elem.src = elem.getAttribute('data-src'); + elem.removeAttribute('class'); + } + } + let url = window.location.href; + replaceDomElementExt(url, false, false, 'div.blk-txt'); + } + let banners = 'div.banner, div.spinner'; + hideDOMStyle(banners); +} + +else if ((domain = matchDomain(usa_gannett_domains)) || document.querySelector('head > link[href*=".gannettdigital.com/"], head > link[href*=".gannett-cdn.com/"]')) { + if (!domain) + domain = window.location.hostname.replace(/^(www|amp|eu)\./, ''); + setCookie('firefly_akamai_meter', '', domain, '/', 0); + if (window.location.pathname.endsWith('/restricted/') && window.location.search.startsWith('?return=')) { + let url = decodeURIComponent(window.location.href.split('?return=')[1]); + let paywall = pageContains('div.message', 'This content is only available to subscribers.'); + if (paywall.length) { + removeDOMElement(...paywall); + let article = document.querySelector('article'); + if (article) + article.firstChild.before(archiveLink(url)); + } + } +} + +else if (matchDomain(usa_hearst_comm_domains) || document.querySelector('head > script[src*="/treg.hearstnp.com/"]')) { + let overlay = document.querySelector('div > div#modalOuter'); + if (overlay) { + hideDOMElement(overlay.parentNode); + let noscroll = document.querySelector('body[style]'); + if (noscroll) + noscroll.removeAttribute('style'); + } + let ads = pageContains('div > div > p', 'Article continues below this ad'); + for (let elem of ads) + hideDOMElement(elem.parentNode.parentNode); +} + +else if ((domain = matchDomain(usa_lee_ent_domains)) || matchDomain(ca_torstar_domains.concat(['abqjournal.com'])) || document.querySelector('head > meta[name="tncms-access-version"]')) { + if (window.location.pathname.endsWith('.amp.html')) { + amp_unhide_access_hide('="hasAccess"', '="NOT hasAccess"', '.amp-ads-container'); + let elem_hidden = document.querySelectorAll('html[class], body[class]'); + for (let elem of elem_hidden) + elem.removeAttribute('class'); + let amp_images = document.querySelectorAll('div.main-content amp-img[src^="https://"]'); + for (let amp_image of amp_images) { + let elem = document.createElement('img'); + Object.assign(elem, { + src: amp_image.getAttribute('src'), + alt: amp_image.getAttribute('alt'), + height: '400' + }); + amp_image.parentNode.replaceChild(elem, amp_image); + } + } else { + if (!domain) { + function unscramble(t) { + for (var n = "", i = 0, r = t.length; i < r; i++) { + var s = t.charCodeAt(i); + if (s >= 33 && s <= 126) { + var sTmp = String.fromCharCode(33 + (s - 33 + 47) % 94); + n += sTmp; + } else + n += t.charAt(i); + } + return n; + } + let paywall = document.querySelector('div.subscriber-offers'); + removeDOMElement(paywall); + let subscriber_only = document.querySelectorAll('div.subscriber-only'); + for (let elem of subscriber_only) { + if (elem.classList.contains('encrypted-content')) { + elem.innerHTML = unscramble(elem.textContent); + } + elem.removeAttribute('style'); + elem.removeAttribute('class'); + } + let banners = document.querySelectorAll('div.subscription-required, div.redacted-overlay'); + removeDOMElement(...banners); + } + let ads = 'div.tnt-ads-container, div[class*="adLabelWrapper"], div.globalHeaderBillboard'; + hideDOMStyle(ads); + } +} + +else if (matchDomain(usa_mcc_domains) || document.querySelector('section.bottom-nav > a[href^="https://www.mcclatchy.com/privacy-policy"]')) { + if (window.location.hostname.startsWith('amp.')) { + amp_unhide_subscr_section(); + let subscriptions_action = document.querySelector('div[subscriptions-action][subscriptions-display="NOT data.hasError"]'); + if (subscriptions_action) + subscriptions_action.removeAttribute('subscriptions-action'); + let art_cropped = document.querySelector('div.article-body.cropped'); + if (art_cropped) + art_cropped.classList.remove('cropped'); + let subscr_tag = document.querySelector('div#subscriber-exclusive-tag'); + let amp_players = document.querySelectorAll('amp-connatix-player, amp-iframe.trinity-player'); + removeDOMElement(subscr_tag, ...amp_players); + let amp_images = document.querySelectorAll('amp-img[srcset]:not([src])'); + for (let elem of amp_images) { + let img = document.createElement('img'); + img.src = elem.getAttribute('srcset').split(' ')[0], + img.alt = elem.getAttribute('alt'), + img.style = 'width: 100%;'; + elem.parentNode.replaceChild(img, elem); + } + } else { + window.setTimeout(function () { + let paywall = document.querySelector('p#yzwall'); + if (paywall) { + removeDOMElement(paywall); + let pars_hidden = document.querySelectorAll('.yzfade, .yzarret'); + for (let elem of pars_hidden) + elem.removeAttribute('class'); + } + }, 1000); + } + let ads = 'div[data-type="ad"], div.vf-promo, div#ymovrly'; + hideDOMStyle(ads); +} + +else if (matchDomain(usa_mng_domains) || document.querySelector('head > link[rel="stylesheet"][id^="dfm-accuweather-"], footer li > a[href^="https://www.medianewsgroup.com"]')) { + if (window.location.pathname.endsWith('/amp/')) + amp_unhide_subscr_section('div.ampWrapperInside, div#paywall'); + else if (true) { + let paywall_sel = '#server-paywall'; + let paywall = document.querySelector(paywall_sel); + let article_sel = 'div.body-copy'; + let article = document.querySelector(article_sel); + if (paywall && article) { + func_post = function () { + let slideshow = article.querySelector('div.article-slideshow'); + if (slideshow) { + slideshow.removeAttribute('class'); + let image_wrappers = slideshow.querySelectorAll('div.image-wrapper'); + for (let elem of image_wrappers) { + elem.removeAttribute('class'); + elem.style = 'margin: 20px 0px;'; + } + let caption = 'div.mng-gallery-information-container, button.icon-close'; + hideDOMStyle(caption, 2); + } + if (iframe) + article.appendChild(iframe); + } + let iframe = article.querySelector('iframe'); + getJsonUrl(paywall_sel, '', article_sel, {art_append: 1, art_class: 'body-copy'}); + } + let ads = 'div.dfp-ad'; + hideDOMStyle(ads); + } +} + +else if (document.querySelector('head > script[src*=".axate.io/"]')) { + let premium = document.querySelector('.premium, div[class*="-premium"]'); + if (premium) + premium.removeAttribute('class'); +} + +else if (document.querySelector('head > meta[property][content^="https://cdn.forumcomm.com/"]')) { + let ads = 'div.GoogleDfpAd-Content'; + hideDOMStyle(ads); +} + +else if (document.querySelector('head > script[src*=".postmedia.digital/"], head > meta[content*=".postmedia.digital/"]')) { + let ads = 'div.ad__section-border, div[id^="tbl_"], div.js-widget-content'; + hideDOMStyle(ads); +} + +} + +if (document.querySelector('head > link[href*="/leaky-paywall"], script[src*="/leaky-paywall"], div[id^="issuem-leaky-paywall-"]')) { + let js_cookie = document.querySelector('script#leaky_paywall_cookie_js-js-extra'); + if (js_cookie && js_cookie.text.includes('"post_container":"')) { + let post_sel = js_cookie.text.split('"post_container":"')[1].split('"')[0]; + if (post_sel) { + let post = document.querySelector(post_sel); + if (post) + post.removeAttribute('class'); + } + } +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function urlHost(url) { + if (/^http/.test(url)) { + try { + return new URL(url).hostname; + } catch (e) { + console.log(`url not valid: ${url} error: ${e}`); + } + } + return url; +} + +function matchUrlDomain(domains, url) { + return matchDomain(domains, urlHost(url)); +} + +function matchCookies(name) { + return document.cookie.split(';').filter(x => x.trim().match(name)).map(y => y.split('=')[0].trim()) +} + +function setCookie(names, value, domain = '', path = '/', days = 0) { + var max_age = days * 24 * 60 * 60; + let ck_names = Array.isArray(names) ? names : []; + if (names instanceof RegExp) + ck_names = matchCookies(names); + else if (typeof names === 'string') + ck_names = [names]; + for (let ck_name of ck_names) { + document.cookie = ck_name + "=" + (value || "") + (domain ? "; domain=" + domain : '') + (path ? "; path=" + path : '') + "; max-age=" + max_age; + } + window.localStorage.clear(); +} + +function cookieExists(name) { + return document.cookie.split(';').some(ck => ck.trim().indexOf(name + '=') === 0) +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function makeFigure(url, caption_text, img_attrib = {}, caption_attrib = {}) { + let elem = document.createElement('figure'); + let img = document.createElement('img'); + img.src = url; + for (let attrib in img_attrib) + if (img_attrib[attrib]) + img.setAttribute(attrib, img_attrib[attrib]); + elem.appendChild(img); + if (caption_text) { + let caption = document.createElement('figcaption'); + for (let attrib in caption_attrib) + if (caption_attrib[attrib]) + caption.setAttribute(attrib, caption_attrib[attrib]); + let cap_par = document.createElement('p'); + cap_par.innerText = caption_text; + caption.appendChild(cap_par); + elem.appendChild(caption); + } + return elem; +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function waitDOMElement(selector, tagName = '', callback, multiple = false) { + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (!tagName || (node.tagName === tagName)) { + if (node.matches(selector)) { + callback(node); + if (!multiple) + this.disconnect(); + } + } + } + } + }).observe(document, { + subtree: true, + childList: true + }); +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function getExtFetch(url, json_key = '', headers = {}, callback = '', args = []) { + GM.xmlHttpRequest({ + method: "GET", + url: url, + headers: headers, + onload: function (response) { + let html = response.responseText; + if (json_key) { + try { + let json = JSON.parse(html); + if (json) + html = getNestedKeys(json, json_key); + } catch (err) { + console.log(err); + } + } + callback(url, html, ...args); + } + }) +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function randomIP(range_low = 0, range_high = 223) { + let rndmIP = []; + for (let n = 0; n < 4; n++) { + if (n === 0) + rndmIP.push(range_low + randomInt(range_high - range_low + 1)); + else + rndmIP.push(randomInt(255) + 1); + } + return rndmIP.join('.'); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function googleSearchToolLink(url, text_fail = 'BPC > Try for full article text (test url & copy html (tab) code to [https://codebeautify.org/htmlviewer]):\r\n') { + return externalLink(['search.google.com'], 'https://search.google.com/test/rich-results?url={url}', encodeURIComponent(url), text_fail); +} + +function nftLink(url, text_fail = 'BPC > Full article text:\r\n') { + return externalLink(['1ft.io'], 'https://{domain}/{url}', url, text_fail); +} + +function freediumLink(url, text_fail = 'BPC > Try for full article text:\r\n') { + return externalLink(['freedium.cfd'], 'https://{domain}/{url}', url, text_fail); +} + +function readMediumLink(url, text_fail = 'BPC > Try for full article text:\r\n') { + return externalLink(['readmedium.com'], 'https://{domain}/{url}', url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function removeClassesByPrefix(el, prefix) { + let el_classes = el.classList; + for (let el_class of el_classes) { + if (el_class.startsWith(prefix)) + el_classes.remove(el_class); + } +} + +function removeClassesList(list) { + for (let class_item of list) { + let elems = document.querySelectorAll('.' + class_item); + for (let elem of elems) + elem.classList.remove(class_item); + } +} + +function amp_images_replace() { + window.setTimeout(function () { + let amp_images = document.querySelectorAll('figure amp-img[src^="http"]'); + for (let amp_image of amp_images) { + let elem = document.createElement('img'); + elem.src = amp_image.getAttribute('src'); + elem.alt = amp_image.getAttribute('alt'); + elem.style = 'width: 100%;'; + amp_image.parentNode.replaceChild(elem, amp_image); + } + }, 1000); +} + +function amp_iframes_replace(weblink = false, source = '') { + let amp_iframes = document.querySelectorAll('amp-iframe' + (source ? '[src*="' + source + '"]' : '')); + let par, elem; + for (let amp_iframe of amp_iframes) { + if (!weblink) { + if (amp_iframe.offsetHeight > 10) { + elem = document.createElement('iframe'); + elem.src = amp_iframe.getAttribute('src').replace(/^http:/, 'https:'); + elem.style = 'height: ' + amp_iframe.offsetHeight + 'px; width: 100%; border: 0px;'; + if (amp_iframe.getAttribute('sandbox')) + elem.sandbox = amp_iframe.getAttribute('sandbox'); + amp_iframe.parentNode.replaceChild(elem, amp_iframe); + } + } else { + par = document.createElement('p'); + par.style = 'margin: 20px 0px;'; + elem = document.createElement('a'); + elem.innerText = 'Media-link'; + elem.setAttribute('href', amp_iframe.getAttribute('src')); + elem.setAttribute('target', '_blank'); + par.appendChild(elem); + amp_iframe.parentNode.replaceChild(par, amp_iframe); + } + } +} + +function amp_redirect_not_loop(amphtml) { + if (!check_loop()) { + window.location.href = amphtml.href; + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > redirect to amp failed (disable amp-to-html extension/add-on or browser setting)'); + } +} + +function amp_redirect(paywall_sel, paywall_action = '', amp_url = '') { + let paywall = document.querySelectorAll(paywall_sel); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (!amphtml && amp_url) + amphtml = {href: amp_url}; + if (paywall.length && amphtml) { + clearPaywall(paywall, paywall_action); + amp_redirect_not_loop(amphtml); + } +} + +function amp_unhide_subscr_section(amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let preview = document.querySelectorAll('[subscriptions-section="content-not-granted"]'); + removeDOMElement(...preview); + let subscr_section = document.querySelectorAll('[subscriptions-section="content"]'); + for (let elem of subscr_section) + elem.removeAttribute('subscriptions-section'); + hideDOMStyle(amp_ads_sel, 5); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function amp_unhide_access_hide(amp_access = '', amp_access_not = '', amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let access_hide = document.querySelectorAll('[amp-access' + amp_access + '][amp-access-hide]:not([amp-access="error"], [amp-access^="message"], .piano)'); + for (let elem of access_hide) + elem.removeAttribute('amp-access-hide'); + if (amp_access_not) { + let amp_access_not_dom = document.querySelectorAll('[amp-access' + amp_access_not + ']'); + removeDOMElement(...amp_access_not_dom); + } + hideDOMStyle(amp_ads_sel, 6); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function breakText(str, headers = false) { + str = str.replace(/(?:^|[A-Za-z\"\“\”\)])(\.+|\?|!)(?=[A-ZÖÜ\„\”\d][A-Za-zÀ-ÿ\„\d]{1,})/gm, "$&\n\n"); + if (headers) + str = str.replace(/(([a-z]{2,}|[\"\“]))(?=[A-Z](?=[A-Za-zÀ-ÿ]+))/gm, "$&\n\n"); + return str; +} + +function parseHtmlEntities(encodedString) { + let parser = new DOMParser(); + let doc = parser.parseFromString('', 'text/html'); + let dom = doc.querySelector('textarea'); + return dom.value; +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +function insert_script(func, insertAfterDom) { + let bpc_script = document.querySelector('script#bpc_script'); + if (!bpc_script) { + let script = document.createElement('script'); + script.setAttribute('id', 'bpc_script'); + script.appendChild(document.createTextNode('(' + func + ')();')); + let insertAfter = insertAfterDom ? insertAfterDom : (document.body || document.head || document.documentElement); + insertAfter.appendChild(script); + } +} + +function getSourceJsonScript(filter, attributes = ':not([src], [type])') { + if (typeof filter === 'string') + filter = new RegExp(filter.replace(/\./g, '\\.')); + let scripts = document.querySelectorAll('script' + attributes); + for (let script of scripts) { + if (script.text.match(filter)) + return script; + } + return false; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function restorePugpigLink(node, art_link_sel = '') { + let art_link = !art_link_sel ? node : node.querySelector(art_link_sel); + if (art_link) + art_link.onmousedown = x => window.location.href = art_link.href; +} + +function restorePugpigPage() { + let art_link_sel = 'a.pp-widget-article, a.pp-related__link'; + document.querySelectorAll(art_link_sel).forEach(e => restorePugpigLink(e)); + waitDOMElement(art_link_sel, 'A', restorePugpigLink, true); + waitDOMElement('li[class^="collection_type-"]', 'LI', node => restorePugpigLink(node, art_link_sel), true); + let modal = 'section.modal'; + hideDOMStyle(modal); + let paywall = document.querySelector('div.paywall'); + if (paywall) + refreshCurrentTab(); +} + +function getArticleQuintype() { + let article_new; + let json_script = document.querySelector('script#static-page'); + if (json_script) { + try { + article_new = document.createElement('div'); + let parser = new DOMParser(); + let json = JSON.parse(json_script.text); + let slug = json.qt.data.story.slug; + if (slug && !window.location.pathname.includes(slug)) + refreshCurrentTab(); + let pars = json.qt.data.story.cards; + for (let par of pars) { + let story_elements = par['story-elements']; + for (let elem of story_elements) { + let par_elem; + if (['text', 'title'].includes(elem.type) && elem.text) { + let doc = parser.parseFromString('
' + elem.text + '
', 'text/html'); + par_elem = doc.querySelector('div'); + } else if (elem.type === 'image') { + if (elem['image-s3-key']) { + par_elem = document.createElement('figure'); + let img = document.createElement('img'); + img.src = 'https://media.assettype.com/' + elem['image-s3-key']; + par_elem.appendChild(img); + if (elem.title) { + let caption = document.createElement('figcaption'); + if (elem.title.includes('' + elem.title + '
', 'text/html'); + caption.appendChild(doc.querySelector('div')); + } else + caption.innerText = elem.title; + caption.innerText = elem.title; + par_elem.appendChild(caption); + } + } + } else if (elem.type === 'jsembed') { + if (elem.subtype === 'tweet') { + if (elem.metadata && elem.metadata['tweet-url']) { + par_elem = document.createElement('a'); + par_elem.href = par_elem.innerText = elem.metadata['tweet-url']; + par_elem.target = '_blank'; + } else + console.log(elem); + } + } else if (elem.type === 'youtube-video') { + if (elem['embed-url']) { + par_elem = document.createElement('iframe'); + par_elem.src = elem['embed-url']; + par_elem.style = 'width: 100%; height: 400px;'; + } + } else if (elem.type === 'file') { + if (elem.url && elem['file-name']) { + par_elem = document.createElement('a'); + par_elem.href = elem.url; + par_elem.innerText = elem['file-name']; + par_elem.target = '_blank'; + } + } else if (!['widget'].includes(elem.type)) + console.log(elem); + if (par_elem) + article_new.appendChild(par_elem); + } + } + if (!article_new.hasChildNodes()) + article_new = ''; + } catch (err) { + console.log(err); + } + } + return article_new; +} + +function matchKeyJson(key, keys) { + let match = false; + if (typeof keys === 'string') + match = (key === keys); + else if (Array.isArray(keys)) + match = keys.includes(key); + else if (keys instanceof RegExp) + match = keys.test(key); + return match; +} + +function findKeyJson(json, keys, min_val_len = 0) { + let source = ''; + if (Array.isArray(json)) { + for (let elem of json) + source = source || findKeyJson(elem, keys, min_val_len); + } else if (typeof json === 'object') { + for (let elem in json) { + let json_elem = json[elem]; + if (typeof json_elem === 'string' && matchKeyJson(elem, keys)) { + if (json_elem.length > min_val_len) + return json_elem; + } else if (Array.isArray(json_elem) && json_elem.length > 1 && matchKeyJson(elem, keys)) { + return json_elem; + } else + source = source || findKeyJson(json_elem, keys, min_val_len); + } + } + return source; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function getJsonUrlText(article, callback, article_id = '', key = '', url_rest = false, url_slash = false) { + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + let json_url; + if (json_url_dom) + json_url = json_url_dom.href; + if (!json_url && article_id) + json_url = window.location.origin + '/wp-json/wp/v2/posts/' + article_id; + if (url_rest) + json_url = json_url.replace('/wp-json/', '/?rest_route=/'); + else if (url_slash) + json_url = json_url.replace('/wp-json/', '//wp-json/'); + if (json_url) { + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = parseHtmlEntities(!key ? json.content.rendered : getNestedKeys(json, key)); + callback(json_text, article); + } catch (err) { + console.log(err); + } + }); + } + }); + } +} + +function getJsonUrlAdd(json_text, article, art_options = {}) { + let art_type = 'div'; + let art_attrib = ''; + if (Object.keys(art_options).length) { + if (art_options.art_type) + art_type = art_options.art_type; + if (art_options.art_class) + art_attrib += ' class="' + art_options.art_class + '"'; + if (art_options.art_id) + art_attrib += ' id="' + art_options.art_id + '"'; + if (art_options.art_style) + art_attrib += ' style="' + art_options.art_style + '"'; + if (art_options.func_text) + json_text = art_options.func_text(json_text); + } + let parser = new DOMParser(); + let doc = parser.parseFromString('<' + art_type + art_attrib + '>' + json_text + '', 'text/html'); + let article_new = doc.querySelector(art_type); + if (art_options.art_append || !article.parentNode) { + if (!art_options.art_hold) + article.innerHTML = ''; + article.appendChild(article_new); + } else + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); +} + +function getJsonUrl(paywall_sel, paywall_action = '', article_sel, art_options = {}, article_id = '', key = '', url_rest = false, url_slash = false) { + let paywall = document.querySelectorAll(paywall_sel); + let article = document.querySelector(article_sel); + if (paywall.length && article) { + clearPaywall(paywall, paywall_action); + getJsonUrlText(article, (json_text, article) => { + if (json_text && article) + getJsonUrlAdd(json_text, article, art_options); + }, article_id, key, url_rest, url_slash); + } +} + +function pageContains(selector, text) { + let elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function (element) { + return RegExp(text).test(element.textContent); + }); +} + +function fix_dowjones_live() { + let paywall = document.querySelector('div#cx-lc-snippet'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let article = document.querySelector('div[data-id="StreamBody_index_MainContainer"]'); + if (article) { + let pars = json[0].liveBlogUpdate; + for (let par of pars) { + if (par.headline && par.articleBody) { + let headline = document.createElement('p'); + headline.innerText = par.headline; + headline.style = 'font-weight: bold;'; + let author = document.createElement('a'); + if (par.author && par.author.sameAs) { + author.href = par.author.sameAs[0]; + author.innerText = par.author.name; + } + let date = document.createElement('p'); + if (par.dateModified && par.datePublished) { + date.innerText = 'Updated ' + par.dateModified.replace(/(T|:\d+\.\d+Z$)/g, ' ') + ' ET / Original ' + par.datePublished.replace(/(T|:\d+\.\d+Z$)/g, ' ') + ' ET'; + } + let body = document.createElement('p'); + body.innerText = par.articleBody; + article.after(headline, author, date, body); + } + } + } + } + } catch (err) { + console.log(err); + } + } + let fade = document.querySelectorAll('div[class*="-CardWrapper"]'); + for (let elem of fade) + elem.removeAttribute('class'); + } +} + +})(); diff --git a/userscript/bpc.es.pt.user.js b/userscript/bpc.es.pt.user.js new file mode 100644 index 0000000..6798443 --- /dev/null +++ b/userscript/bpc.es.pt.user.js @@ -0,0 +1,1165 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - es/pt/south america +// @version 4.1.1.0 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.es.pt.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.es.pt.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.es/* +// @match *://*.abcmais.com/* +// @match *://*.abril.com.br/* +// @match *://*.ara.cat/* +// @match *://*.arabalears.cat/* +// @match *://*.cambiocolombia.com/* +// @match *://*.cartacapital.com.br/* +// @match *://*.clarin.com/* +// @match *://*.correiodopovo.com.br/* +// @match *://*.cronista.com/* +// @match *://*.crusoe.com.br/* +// @match *://*.diaridegirona.cat/* +// @match *://*.diariocordoba.com/* +// @match *://*.diariocorreo.pe/* +// @match *://*.diariovasco.com/* +// @match *://*.diplomatique.org.br/* +// @match *://*.dn.pt/* +// @match *://*.elcomercio.pe/* +// @match *://*.elconfidencial.com/* +// @match *://*.elcorreo.com/* +// @match *://*.elespanol.com/* +// @match *://*.elespectador.com/* +// @match *://*.elmercurio.com/* +// @match *://*.elobservador.com.uy/* +// @match *://*.elpais.com/* +// @match *://*.elperiodico.com/* +// @match *://*.elperiodicodearagon.com/* +// @match *://*.elperiodicoextremadura.com/* +// @match *://*.elperiodicomediterraneo.com/* +// @match *://*.eltiempo.com/* +// @match *://*.eltribuno.com/* +// @match *://*.eluniverso.com/* +// @match *://*.em.com.br/* +// @match *://*.emporda.info/* +// @match *://*.estadao.com.br/* +// @match *://*.exame.com/* +// @match *://*.expansion.com/* +// @match *://*.expresso.pt/* +// @match *://*.gazetadopovo.com.br/* +// @match *://*.gestion.pe/* +// @match *://*.globo.com/* +// @match *://*.lanacion.com.ar/* +// @match *://*.larioja.com/* +// @match *://*.latercera.com/* +// @match *://*.lavoz.com.ar/* +// @match *://*.levante-emv.com/* +// @match *://*.losandes.com.ar/* +// @match *://*.marca.com/* +// @match *://*.nsctotal.com.br/* +// @match *://*.observador.pt/* +// @match *://*.ole.com.ar/* +// @match *://*.politicaexterior.com/* +// @match *://*.record.pt/* +// @match *://*.regio7.cat/* +// @match *://*.revistaoeste.com/* +// @match *://*.sabado.pt/* +// @match *://*.uol.com.br/* +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var ar_grupo_clarin_domains =['clarin.com', 'lavoz.com.ar', 'losandes.com.ar', 'ole.com.ar']; +var es_epiberica_domains = ['diariodemallorca.es', 'eldia.es', 'elperiodico.com', 'epe.es', 'farodevigo.es', 'informacion.es', 'laprovincia.es', 'levante-emv.com', 'lne.es', 'mallorcazeitung.es', 'superdeporte.es']; +var es_epiberica_custom_domains = ['diaridegirona.cat', 'diariocordoba.com', 'diariodeibiza.es', 'elcorreogallego.es', 'elcorreoweb.es', 'elperiodicodearagon.com', 'elperiodicoextremadura.com', 'elperiodicomediterraneo.com', 'emporda.info', 'laopinioncoruna.es', 'laopiniondemalaga.es', 'laopiniondemurcia.es', 'laopiniondezamora.es', 'regio7.cat']; +var es_grupo_vocento_domains = ['abc.es', 'canarias7.es', 'diariosur.es', 'diariovasco.com', 'elcomercio.es', 'elcorreo.com', 'eldiariomontanes.es', 'elnortedecastilla.es', 'hoy.es', 'ideal.es', 'larioja.com', 'lasprovincias.es', 'laverdad.es', 'lavozdigital.es']; +var es_unidad_domains = ['elmundo.es', 'expansion.com', 'marca.com']; +var pe_grupo_elcomercio_domains = ['diariocorreo.pe', 'elcomercio.pe', 'gestion.pe']; + +if (window.location.hostname.match(/\.(es|pt|cat)$/) || matchDomain(['diariocordoba.com', 'diariovasco.com', 'elconfidencial.com', 'elcorreo.com', 'elespanol.com', 'elpais.com', 'elperiodico.com', 'elperiodicodearagon.com', 'elperiodicoextremadura.com', 'elperiodicomediterraneo.com', 'emporda.info', 'expansion.com', 'larioja.com', 'levante-emv.com', 'marca.com', 'politicaexterior.com'])) {//spain/portugal + +if (matchDomain(['ara.cat', 'arabalears.cat'])) { + if (!window.location.pathname.endsWith('.amp.html')) { + amp_redirect('div.paywall'); + let ads = 'div.advertising'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('diariodenavarra.es')) { + let paywall = document.querySelector('div#paywall_message'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let article = document.querySelector('div.free-html'); + if (json_text && article) + article.innerText = parseHtmlEntities(json_text); + } + } + } +} + +else if (matchDomain('dn.pt')) { + if (window.location.pathname.endsWith('/amp/')) { + let amp_list = 'amp-list'; + hideDOMStyle(amp_list); + } else { + let ads = document.querySelectorAll('div.sk-pub'); + removeDOMElement(...ads); + } +} + +else if (matchDomain('elconfidencial.com')) { + let premium = document.querySelector('div.newsType__content--closed'); + if (premium) + premium.classList.remove('newsType__content--closed'); + let ads = 'div[id^="mega_"], div[id^="roba_"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('eldiario.es')) { + if (window.location.pathname.endsWith('.amp.html')) { + amp_unhide_access_hide('^="access"', '="NOT access"'); + } else { + amp_redirect('aside.paywall'); + let ads = 'div.edi-advertising, div.header-ad, aside.news-sponsored-content, div.report__wrapper'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('elespanol.com')) { + if (window.location.pathname.endsWith('.amp.html')) { + amp_unhide_subscr_section(); + } else { + let paywall = document.querySelector('div.full-suscriptor-container'); + if (paywall) { + removeDOMElement(paywall); + let content_hidden = document.querySelector('div.content-not-granted-paywall'); + if (content_hidden) + content_hidden.classList.remove('content-not-granted-paywall'); + } + let ads = '[id*="superior"], [class*="adv"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain(es_unidad_domains)) { + if (!window.location.hostname.match(/^amp(-[a-z]{2})?\./)) { + let url = window.location.href; + if (!window.location.pathname.startsWith('/mejores-colegios')) { + amp_redirect('div.ue-c-article__premium', '', url.replace('/www.', '/amp.')); + } else if (matchDomain('elmundo.es')) { + header_nofix('main p', 'div.ue-c-article__premium'); + header_nofix('table', 'div.ue-c-paywall'); + } + } else { + amp_unhide_access_hide('="authorized=true"', '="authorized!=true"'); + amp_unhide_subscr_section('.advertising, div.ue-c-ad'); + } +} + +else if (matchDomain('elpais.com')) { + if (window.location.pathname.endsWith('.amp.html') || window.location.search.match(/(\?|&)outputType=amp/)) { + amp_unhide_access_hide('="vip"], [amp-access="success"', '="NOT vip"], [amp-access="NOT success"'); + } else { + let paywall = document.querySelector('div#ctn_freemium_article, div#ctn_premium_article'); + removeDOMElement(paywall); + } +} + +else if (matchDomain(es_grupo_vocento_domains)) { + let paywall_sel = 'div.voc-paywall, div.container-wall-exclusive__content-login'; + let paywall = document.querySelector(paywall_sel); + if (!window.location.pathname.endsWith('_amp.html')) { + if (!matchDomain(['eldiariomontanes.es'])) { + amp_redirect(paywall_sel, '', window.location.pathname.replace('.html', '_amp.html')); + } else { + if (paywall) { + let url = window.location.href; + paywall.before(archiveLink(url)); + removeDOMElement(paywall); + } + } + let banners = 'div.voc-advertising, div.voc-ob-wrapper, div.voc-discounts, div.ev-em-modal, span.mega-superior, div.v-adv'; + hideDOMStyle(banners); + } else { + amp_unhide_access_hide('="result=\'ALLOW_ACCESS\'"', '="result!=\'ALLOW_ACCESS\'"', 'div.v-adv'); + let body_top = document.querySelector('body#top'); + if (body_top) + body_top.removeAttribute('id'); + } +} + +else if (matchDomain(es_epiberica_domains) || matchDomain(es_epiberica_custom_domains)) { + let paywall = document.querySelector('div.ft-helper-closenews'); + if (paywall) { + paywall.removeAttribute('class'); + let hidden_pars = paywall.querySelectorAll('.closeContentEnd'); + for (let elem of hidden_pars) + elem.classList.remove('closeContentEnd'); + } + if (window.location.pathname.endsWith('.amp.html') || ['amp.elperiodico.com', 'amp.epe.es'].includes(window.location.hostname)) { + let amp_images = document.querySelectorAll('figure > amp-img[src]'); + for (let amp_image of amp_images) { + let elem = document.createElement('img'); + elem.src = amp_image.getAttribute('src'); + elem.style = 'width: 75%; margin: 0px 50px;'; + amp_image.parentNode.replaceChild(elem, amp_image); + } + document.querySelectorAll('div#the-most').forEach(e => e.removeAttribute('style')); + let ads = 'amp-next-page, span.ad-signature, div.wrap'; + hideDOMStyle(ads); + } else { + let ads = 'div.commercial-up-full__wrapper, aside.ft-ad, div[class^="_mo_recs"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('expresso.pt')) { + if (!window.location.hostname.startsWith('amp.')) { + let article_sel = 'div.article-content'; + let paywall = document.querySelector(article_sel + ' > div.g-premium-blocker'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector(article_sel); + if (article) { + let url = window.location.href.split(/[#\?]/)[0]; + fetch(url) + .then(response => { + if (response.ok) { + response.text().then(html => { + if (html.match(/window\.__INITIAL_DATA__\s?=\s?/)) { + try { + article.innerHTML = ''; + let json = JSON.parse(html.split(/window\.__INITIAL_DATA__\s?=\s?/)[1].split(';window.')[0].replace(/":undefined([,}])/g, "\":\"undefined\"$1")).nodes; + let pars = []; + for (let elem in json) { + let item = json[elem]; + if (item.type === 'Layout') { + for (let elem of item.nodes) { + if (elem.type === 'MainBody') + pars = elem.nodes[0].data.content.contents; + } + break; + } + } + let parser = new DOMParser(); + for (let par of pars) { + let par_new; + if (par.html) { + let doc = parser.parseFromString('
' + par.html + '
', 'text/html'); + par_new = doc.querySelector('div'); + } else if (par.type === 'PICTURE') { + if (par.urlOriginal) { + par_new = makeFigure(par.urlOriginal, par.caption, {style: 'width:100%'}); + } + } else if (par.link && par.title) { + if (par.contents) { + par_new = document.createElement('div'); + for (let elem of par.contents) { + let elem_new; + if (elem.html) { + let doc = parser.parseFromString('
' + elem.html + '
', 'text/html'); + elem_new = doc.querySelector('div'); + } else if (elem.urlOriginal) { + elem_new = makeFigure(elem.urlOriginal, elem.caption, {style: 'width:100%'}); + } + if (elem_new) + par_new.appendChild(elem_new); + } + } else { + par_new = document.createElement('p'); + let art_link = document.createElement('a'); + art_link.innerText = par.title; + art_link.href = par.link; + par_new.appendChild(art_link); + } + } + if (par_new) + article.appendChild(par_new); + else + console.log(par); + } + } catch (err) { + console.log(err); + } + } + }); + } + }).catch(function (err) { + false; + }); + } + } + } else + ampToHtml(); +} + +else if (matchDomain(['lavanguardia.com', 'mundodeportivo.com'])) { + let ads = 'span.content-ad, span.hidden-ad, span.ad-unit, div.ad-div'; + hideDOMStyle(ads); +} + +else if (matchDomain('observador.pt')) { + let ads = 'div.obs-ad-placeholder'; + hideDOMStyle(ads); +} + +else if (matchDomain('politicaexterior.com')) { + let paywall = document.querySelector('div[class^="paywall-"]'); + if (paywall) { + let article = document.querySelector('div.entry-content-text'); + let json = document.querySelector('script[type="application/ld+json"]:not([class])'); + if (json) { + let json_text = JSON.parse(json.text).description.replace(/&nbsp;/g, ''); + let article_new = document.createElement('div'); + article_new.setAttribute('class', 'entry-content-text'); + article_new.innerText = '\r\n' + json_text; + article.parentNode.replaceChild(article_new, article); + } + removeDOMElement(paywall); + } +} + +else if (matchDomain('publico.es')) { + let ads = 'div.pb-ads'; + hideDOMStyle(ads); +} + +else if (matchDomain(['record.pt', 'sabado.pt'])) { + if (!window.location.pathname.includes('/amp/')) + amp_redirect('.bloqueio_exclusivos, .container_assinatura, .bloco_bloqueio', '', window.location.href.replace('/detalhe/', '/amp/')); + else + amp_unhide_access_hide('="subscriber"', '="NOT subscriber"', 'div.adbox, amp-consent, .detalheAds, .exclusivos_bar'); +} + +else if (window.location.hostname.endsWith('.es')) {// Sport Life Ibérica sites + if (document.querySelector('div > ul > li > a[href="https://www.sportlife.es/"]')) { + let paywall = document.querySelector('div.c-paywall'); + if (paywall) { + let article = document.querySelector('div.c-mainarticle__body'); + let json_script = getArticleJsonScript(); + if (json_script) { + let json_text = JSON.parse(json_script.text).articleBody; + let article_new = document.createElement('div'); + article_new.innerText = json_text; + article.parentNode.replaceChild(article_new, article); + } + removeDOMElement(paywall); + } + } +} + +} else if (window.location.hostname.match(/\.(ar|br|cl|pe|uy)$/) || matchDomain(['abcmais.com', 'cambiocolombia.com', 'clarin.com', 'cronista.com', 'elespectador.com', 'elmercurio.com', 'eltiempo.com', 'eltribuno.com', 'eluniverso.com', 'exame.com', 'globo.com', 'latercera.com', 'revistaoeste.com'])) {//south america + +if (matchDomain('abcmais.com')) { + if (!window.location.pathname.endsWith('/amp/')) { + getJsonUrl('section#section-iframe-assinante', '', 'div.degressing-opacity'); + } else { + let paywall = document.querySelector('div.b-vindo'); + if (paywall) { + removeDOMElement(paywall); + let template = document.querySelector('template'); + if (template) { + let article = document.querySelector('section > div.resumo'); + if (article) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + template.innerHTML + '
', 'text/html'); + let article_new = doc.querySelector('div'); + article.parentNode.replaceChild(article_new, article); + } + } + } + } +} + +else if (matchDomain('abril.com.br')) { + if (window.location.pathname.endsWith('/amp/')) { + let paywall = document.querySelector('.piano-modal'); + removeDOMElement(paywall); + } else { + let ads = 'div.ads, div[class^="ads-"], div.MGID'; + hideDOMStyle(ads); + } +} + +else if (matchDomain(ar_grupo_clarin_domains)) { + let ads = 'div.ad-slot, div.box-adv, div.wrapperblock, div.banner, div[id^="div-gpt-ad-flotante"]'; + hideDOMStyle(ads); + let ads_inline = document.querySelectorAll('div > div.sticky, div > div.SRA, div > div[id^="div-gpt-ad-inread"], div > div[id^="div-gpt-ad-caja"], div > div[id^="div-gpt-ad-horizontal"]'); + for (let ad of ads_inline) + hideDOMElement(ad.parentNode); +} + +else if (matchDomain('cambiocolombia.com')) { + let author = document.querySelector('head > meta[name="author"]'); + if (author && !document.querySelector('article section')) + refreshCurrentTab(); + let ads = 'div[role="banner"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('cartacapital.com.br')) { + if (!window.location.pathname.endsWith('/amp/')) { + let paywall = document.querySelector('aside.paywall'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json[1].articleBody.replace(/\s{2,}/g, '\r\n\r\n'); + let content = document.querySelector('section.s-content__text'); + if (json_text && content) { + content.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.appendChild(article_new); + } + } + } catch (err) { + console.log(err); + } + } + } else { + let content_soft = document.querySelector('div.contentSoft'); + if (content_soft) { + content_soft.removeAttribute('class'); + let freemium = document.querySelectorAll('div[class^="s-freemium"], div.maggazine-add'); + removeDOMElement(...freemium); + } + } + let ads = 'div.div_ros_topo'; + hideDOMStyle(ads); + } else + ampToHtml(); +} + +else if (matchDomain('cronista.com')) { + let ads = 'div#ad-slot-header, div.ad-slot-intext, div#selectMediaNota, div.b-suscription-container'; + hideDOMStyle(ads); +} + +else if (matchDomain('crusoe.com.br')) { + getJsonUrl('section.paywall', '', 'div#content_post', {art_append: 1}); + let ads = 'div#gpt-leaderboard, div.ads_desktop, div[class^="container-banner-"], div.catchment-box'; + hideDOMStyle(ads); +} + +else if (matchDomain('diplomatique.org.br')) { + getJsonUrl('div.entry-content div.module_row', '', 'div.entry-content'); +} + +else if (matchDomain(pe_grupo_elcomercio_domains)) { + let paywall = document.querySelector('.paywall'); + if (paywall) { + paywall.removeAttribute('class'); + paywall.removeAttribute('style'); + let fade = document.querySelector('p.story-contents--fade'); + if (fade) + fade.classList.remove('story-contents--fade'); + } + let ads = 'div[class^="content_gpt"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('elespectador.com')) { + if (window.location.search.includes('outputType=amp')) { + amp_unhide_subscr_section('[class^="Widget"], amp-fx-flying-carpet', false); + let googledoc_iframes = document.querySelectorAll('div > amp-iframe[src^="https://docs.google.com/viewer"][class]'); + for (let elem of googledoc_iframes) { + let a_link = document.createElement('a'); + a_link.href = elem.getAttribute('src'); + a_link.innerText = 'pdf-link'; + a_link.target = '_blank'; + elem.removeAttribute('class'); + elem.parentNode.before(a_link); + } + } else { + amp_redirect('div.exclusive_validation'); + } +} + +else if (matchDomain('elmercurio.com')) { + if (window.location.hostname.startsWith('digital.')) { + window.setTimeout(function () { + let elem_hidden = document.querySelectorAll('[style="visibility:hidden"]'); + for (let elem of elem_hidden) + elem.removeAttribute('style'); + let page_pdf_content = document.querySelector('div.page_pdf_content'); + let close_html = document.querySelector('div.close_html'); + let cont_page_full = document.querySelector('div.cont_page_full'); + removeDOMElement(page_pdf_content, close_html, cont_page_full); + }, 1000); + window.setTimeout(function () { + let cont_articlelight = document.querySelector('div.cont_articlelight'); + if (cont_articlelight) + cont_articlelight.setAttribute('style', 'height: 100% !important; width: 90% !important'); + }, 3000); + if (window.location.pathname.startsWith('/mobile')) { + let lessreadmore = document.querySelectorAll('article.lessreadmore'); + for (let article of lessreadmore) + article.classList.remove('lessreadmore'); + let bt_readmore = document.querySelectorAll('div[id*="bt_readmore_"]'); + removeDOMElement(...bt_readmore); + } + } else if (window.location.pathname.endsWith('/Registro/Login.aspx')) { + header_nofix('body'); + } +} + +else if (matchDomain('elobservador.com.uy')) { + if (window.location.pathname.endsWith('/amp')) { + amp_unhide_access_hide('="observador.mostrarNota"'); + let amp_images = document.querySelectorAll('div.fixed-container > amp-img.null'); + for (let amp_image of amp_images) { + let elem = document.createElement('img'); + Object.assign(elem, { + src: amp_image.getAttribute('src'), + alt: amp_image.getAttribute('alt'), + title: amp_image.getAttribute('title') + }); + amp_image.parentNode.replaceChild(elem, amp_image); + } + } else { + amp_redirect('div.mensaje_member', '', window.location.pathname + '/amp'); + } +} + +else if (matchDomain('eltiempo.com')) { + let modulos = document.querySelector('div.modulos'); + if (modulos) + modulos.classList.remove('modulos'); + let ads = '[class^="c-add"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('eltribuno.com')) { + let lazy_images = document.querySelectorAll('img.lazyload[data-src]:not([src])'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-src'); + elem.classList.remove('lazyload'); + } +} + +else if (matchDomain('eluniverso.com')) { + let paywall = document.querySelectorAll('head > meta[name][content="premium"]'); + let article = document.querySelector('section.article-body'); + if (paywall.length && article) { + removeDOMElement(...paywall); + let fusion_script = document.querySelector('script#fusion-metadata'); + if (fusion_script && fusion_script.text.includes('Fusion.globalContent=')) { + try { + let json = JSON.parse(fusion_script.text.split('Fusion.globalContent=')[1].split(';Fusion.')[0]); + if (json) { + article.innerHTML = ''; + let parser = new DOMParser(); + let pars = json.content_elements; + for (let par of pars) { + let par_new; + if (['header', 'text'].includes(par.type)) { + if (par.content) { + let doc = parser.parseFromString('

' + par.content + '

', 'text/html'); + par_new = doc.querySelector('p'); + } + } else if (par.type === 'interstitial_link') { + if (par.url && par.content) { + par_new = document.createElement('p'); + int_link = document.createElement('a'); + int_link.href = par.url; + int_link.innerText = par.content; + par_new.appendChild(int_link); + } + } else if (par.type === 'image') { + if (par.url) { + let caption_text = par.caption; + if (par.credits && par.credits.by && par.credits.by[0] && par.credits.by[0].name) + caption_text += ' - ' + par.credits.by[0].name; + par_new = makeFigure(par.url, caption_text); + } + } else if (par.type === 'raw_html') { + let doc = parser.parseFromString('
' + par.content + '
', 'text/html'); + par_new = doc.querySelector('div'); + } else if (par.raw_oembed) { + if (par.raw_oembed.html) { + let doc = parser.parseFromString('
' + par.raw_oembed.html + '
', 'text/html'); + par_new = doc.querySelector('div'); + } + } else if (par.type === 'list') { + if (par.items) { + par_new = document.createElement('ul'); + for (let item of par.items) { + let li = document.createElement('li'); + let doc = parser.parseFromString('' + item.content + '', 'text/html'); + let span = doc.querySelector('span'); + li.appendChild(span); + par_new.appendChild(li); + } + } + } else if (par.type === 'table') { + if (par.header && par.rows) { + par_new = document.createElement('table'); + let h_row = document.createElement('tr'); + for (let item of par.header) { + let th = document.createElement('th'); + let doc = parser.parseFromString('' + item.content + '', 'text/html'); + let span = doc.querySelector('span'); + th.appendChild(span); + h_row.appendChild(th); + } + par_new.appendChild(h_row); + for (let row of par.rows) { + let tr = document.createElement('tr'); + for (let item of row) { + let td = document.createElement('td'); + let doc = parser.parseFromString('' + item.content + '', 'text/html'); + let span = doc.querySelector('span'); + td.appendChild(span); + tr.appendChild(td); + } + par_new.appendChild(tr); + } + } + } else if (!['quote'].includes(par.type)) { + console.log(par); + } + if (par_new) + article.appendChild(par_new); + } + } + } catch (err) { + console.log(err); + } + } + let banner = pageContains('div > span', /Contenido exclusivo para suscriptores/); + if (banner.length) + removeDOMElement(banner[0].parentNode); + } + let ads = 'div[id^="ad-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('em.com.br')) { + if (!window.location.pathname.endsWith('/amp.html')) { + amp_redirect('.news-blocked-content'); + hideDOMStyle(ads); + } else { + amp_unhide_subscr_section('amp-fx-flying-carpet'); + let compress_text = document.querySelector('div.compress-text'); + if (compress_text) + compress_text.classList.remove('compress-text'); + } +} + +else if (matchDomain('estadao.com.br')) { + if (window.location.pathname.match(/(\.amp$|^\/amp\/)/) || window.location.search.startsWith('?amp')) { + amp_unhide_access_hide('="outputValue=\'hide_paywall\'"', '="outputValue=\'show_paywall\'"', 'amp-fx-flying-carpet, div[class^="pAd"], div.ads-container'); + } else { + let paywall = document.getElementById('paywall-wrapper-iframe-estadao'); + removeDOMElement(paywall); + let ads = 'div[class^="styles__Container-sc-"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('exame.com')) { + window.localStorage.removeItem('pywllcount'); + let ads = 'div[id^="ads_"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('uol.com.br')) { + if (matchDomain('folha.uol.com.br')) { + if (matchDomain('piaui.folha.uol.com.br')) { + header_nofix('div.paywall__content', 'div.revista--interna__assineonly'); + } else if (window.location.pathname.startsWith('/amp/')) { + amp_unhide_subscr_section('amp-sticky-ad'); + } else { + let signup = document.querySelector('.c-top-signup'); + removeDOMElement(signup); + } + } + let ads = 'div[class*="advertising"], div.jupiter-ads, div.up-floating, div[data-cp-id$="asfads"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('gazetadopovo.com.br')) { + if (window.location.pathname.endsWith('/amp/')) { + amp_unhide_subscr_section('div.ads-amp, div.tpl-wrapper', false); + } else { + let ads = 'div[class*="c-ads"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('globo.com')) { + if (matchDomain('valor.globo.com')) { + if (!window.location.pathname.startsWith('/google/amp/')) { + amp_redirect('div.paywall'); + } else { + amp_unhide_subscr_section(); + amp_images_replace(); + } + } else if (window.location.pathname.includes('/amp/')) + ampToHtml(); + if (!window.location.pathname.includes('/amp/')) { + let ads = 'div[id^="ad-container"], div.content-ads, div[class^="block__advertising"], div#pub-in-text-wrapper, div.area_publicidade_container'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('lanacion.com.ar')) { + setCookie(/^metering_arc/, '', 'lanacion.com.ar', '/', 0); + let ads = 'div.ln-banner-container'; + hideDOMStyle(ads); +} + +else if (matchDomain('latercera.com')) { + let ads = 'div.ads-block'; + hideDOMStyle(ads); +} + +else if (matchDomain('nsctotal.com.br')) { + let ads = 'div.ad, div[id^="floater"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('revistaoeste.com')) { + if (window.location.pathname.startsWith('/revista/')) { + let loading_content = document.querySelector('div.loading_content'); + if (loading_content) + loading_content.removeAttribute('class'); + let spinner = document.querySelector('svg.spinner-eclipse'); + removeDOMElement(spinner); + let lazy_images = document.querySelectorAll('img[src^="data:image/"][data-src]'); + for (let elem of lazy_images) + elem.src = elem.getAttribute('data-src'); + } else { + let div_expandable = document.querySelector('div.expandable'); + if (div_expandable) + div_expandable.classList.remove('expandable'); + let ads = 'section.ad-wrapper, div.autozep-outer'; + hideDOMStyle(ads); + } +} + +} + +if (document.querySelector('head > link[href*="/leaky-paywall"], script[src*="/leaky-paywall"], div[id^="issuem-leaky-paywall-"]')) { + let js_cookie = document.querySelector('script#leaky_paywall_cookie_js-js-extra'); + if (js_cookie && js_cookie.text.includes('"post_container":"')) { + let post_sel = js_cookie.text.split('"post_container":"')[1].split('"')[0]; + if (post_sel) { + let post = document.querySelector(post_sel); + if (post) + post.removeAttribute('class'); + } + } +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function matchCookies(name) { + return document.cookie.split(';').filter(x => x.trim().match(name)).map(y => y.split('=')[0].trim()) +} + +function setCookie(names, value, domain = '', path = '/', days = 0) { + var max_age = days * 24 * 60 * 60; + let ck_names = Array.isArray(names) ? names : []; + if (names instanceof RegExp) + ck_names = matchCookies(names); + else if (typeof names === 'string') + ck_names = [names]; + for (let ck_name of ck_names) { + document.cookie = ck_name + "=" + (value || "") + (domain ? "; domain=" + domain : '') + (path ? "; path=" + path : '') + "; max-age=" + max_age; + } + window.localStorage.clear(); +} + +function cookieExists(name) { + return document.cookie.split(';').some(ck => ck.trim().indexOf(name + '=') === 0) +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function makeFigure(url, caption_text, img_attrib = {}, caption_attrib = {}) { + let elem = document.createElement('figure'); + let img = document.createElement('img'); + img.src = url; + for (let attrib in img_attrib) + if (img_attrib[attrib]) + img.setAttribute(attrib, img_attrib[attrib]); + elem.appendChild(img); + if (caption_text) { + let caption = document.createElement('figcaption'); + for (let attrib in caption_attrib) + if (caption_attrib[attrib]) + caption.setAttribute(attrib, caption_attrib[attrib]); + let cap_par = document.createElement('p'); + cap_par.innerText = caption_text; + caption.appendChild(cap_par); + elem.appendChild(caption); + } + return elem; +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function amp_images_replace() { + window.setTimeout(function () { + let amp_images = document.querySelectorAll('figure amp-img[src^="http"]'); + for (let amp_image of amp_images) { + let elem = document.createElement('img'); + elem.src = amp_image.getAttribute('src'); + elem.alt = amp_image.getAttribute('alt'); + elem.style = 'width: 100%;'; + amp_image.parentNode.replaceChild(elem, amp_image); + } + }, 1000); +} + +function amp_iframes_replace(weblink = false, source = '') { + let amp_iframes = document.querySelectorAll('amp-iframe' + (source ? '[src*="' + source + '"]' : '')); + let par, elem; + for (let amp_iframe of amp_iframes) { + if (!weblink) { + if (amp_iframe.offsetHeight > 10) { + elem = document.createElement('iframe'); + elem.src = amp_iframe.getAttribute('src').replace(/^http:/, 'https:'); + elem.style = 'height: ' + amp_iframe.offsetHeight + 'px; width: 100%; border: 0px;'; + if (amp_iframe.getAttribute('sandbox')) + elem.sandbox = amp_iframe.getAttribute('sandbox'); + amp_iframe.parentNode.replaceChild(elem, amp_iframe); + } + } else { + par = document.createElement('p'); + par.style = 'margin: 20px 0px;'; + elem = document.createElement('a'); + elem.innerText = 'Media-link'; + elem.setAttribute('href', amp_iframe.getAttribute('src')); + elem.setAttribute('target', '_blank'); + par.appendChild(elem); + amp_iframe.parentNode.replaceChild(par, amp_iframe); + } + } +} + +function amp_redirect_not_loop(amphtml) { + if (!check_loop()) { + window.location.href = amphtml.href; + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > redirect to amp failed (disable amp-to-html extension/add-on or browser setting)'); + } +} + +function amp_redirect(paywall_sel, paywall_action = '', amp_url = '') { + let paywall = document.querySelectorAll(paywall_sel); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (!amphtml && amp_url) + amphtml = {href: amp_url}; + if (paywall.length && amphtml) { + clearPaywall(paywall, paywall_action); + amp_redirect_not_loop(amphtml); + } +} + +function amp_unhide_subscr_section(amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let preview = document.querySelectorAll('[subscriptions-section="content-not-granted"]'); + removeDOMElement(...preview); + let subscr_section = document.querySelectorAll('[subscriptions-section="content"]'); + for (let elem of subscr_section) + elem.removeAttribute('subscriptions-section'); + hideDOMStyle(amp_ads_sel, 5); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function amp_unhide_access_hide(amp_access = '', amp_access_not = '', amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let access_hide = document.querySelectorAll('[amp-access' + amp_access + '][amp-access-hide]:not([amp-access="error"], [amp-access^="message"], .piano)'); + for (let elem of access_hide) + elem.removeAttribute('amp-access-hide'); + if (amp_access_not) { + let amp_access_not_dom = document.querySelectorAll('[amp-access' + amp_access_not + ']'); + removeDOMElement(...amp_access_not_dom); + } + hideDOMStyle(amp_ads_sel, 6); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function getJsonUrlText(article, callback, article_id = '', key = '', url_rest = false, url_slash = false) { + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + let json_url; + if (json_url_dom) + json_url = json_url_dom.href; + if (!json_url && article_id) + json_url = window.location.origin + '/wp-json/wp/v2/posts/' + article_id; + if (url_rest) + json_url = json_url.replace('/wp-json/', '/?rest_route=/'); + else if (url_slash) + json_url = json_url.replace('/wp-json/', '//wp-json/'); + if (json_url) { + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = parseHtmlEntities(!key ? json.content.rendered : getNestedKeys(json, key)); + if (json_text && json_text !== 'undefined') + callback(json_text, article); + } catch (err) { + console.log(err); + } + }); + } + }); + } +} + +function getJsonUrlAdd(json_text, article, art_options = {}) { + let art_type = 'div'; + let art_attrib = ''; + if (Object.keys(art_options).length) { + if (art_options.art_type) + art_type = art_options.art_type; + if (art_options.art_class) + art_attrib += ' class="' + art_options.art_class + '"'; + if (art_options.art_id) + art_attrib += ' id="' + art_options.art_id + '"'; + if (art_options.art_style) + art_attrib += ' style="' + art_options.art_style + '"'; + if (art_options.func_text) + json_text = art_options.func_text(json_text); + } + let parser = new DOMParser(); + let doc = parser.parseFromString('<' + art_type + art_attrib + '>' + json_text + '', 'text/html'); + let article_new = doc.querySelector(art_type); + if (art_options.art_append || !article.parentNode) { + if (!art_options.art_hold) + article.innerHTML = ''; + article.appendChild(article_new); + } else + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); +} + +function getJsonUrl(paywall_sel, paywall_action = '', article_sel, art_options = {}, article_id = '', key = '', url_rest = false, url_slash = false) { + let paywall = document.querySelectorAll(paywall_sel); + let article = document.querySelector(article_sel); + if (paywall.length && article) { + clearPaywall(paywall, paywall_action); + getJsonUrlText(article, (json_text, article) => { + if (json_text && article) + getJsonUrlAdd(json_text, article, art_options); + }, article_id, key, url_rest, url_slash); + } +} + +function pageContains(selector, text) { + let elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function (element) { + return RegExp(text).test(element.textContent); + }); +} + +function parseHtmlEntities(encodedString) { + let parser = new DOMParser(); + let doc = parser.parseFromString('', 'text/html'); + let dom = doc.querySelector('textarea'); + return dom.value; +} + +})(); diff --git a/userscript/bpc.fi.se.user.js b/userscript/bpc.fi.se.user.js new file mode 100644 index 0000000..954a690 --- /dev/null +++ b/userscript/bpc.fi.se.user.js @@ -0,0 +1,350 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - fi/se +// @version 4.0.8.1 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fi.se.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fi.se.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.berlingske.dk/* +// @match *://*.dn.se/* +// @match *://*.etc.se/* +// @match *://*.suomensotilas.fi/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +if (matchDomain('berlingske.dk')) { + let paywall = document.querySelector('div#paywall'); + removeDOMElement(paywall); + let ads = 'div.advert-unit'; + hideDOMStyle(ads); +} + +else if (matchDomain('dn.se')) { + let url = window.location.href; + getArchive(url, 'div.paywall-wrapper', '', 'article'); + let ads = 'div.bad'; + hideDOMStyle(ads); +} + +else if (matchDomain('etc.se')) { + let paywall = document.querySelector('section.prose-feature > section.teaser-section'); + if (paywall) { + paywall.classList.remove('teaser-section'); + paywall.parentNode.querySelectorAll('.hidden').forEach(e => e.classList.remove('hidden')); + } + let ads = 'div[class$="-ad"], article section.font-sans'; + hideDOMStyle(ads); + let video_iframes = document.querySelectorAll('div.embed-block > iframe[width][height]'); + for (let elem of video_iframes) { + if (elem.width > 1000) { + let ratio = elem.width / (mobile ? 320 : 640); + elem.width = elem.width / ratio; + elem.height = elem.height / ratio; + } + } +} + +else if (matchDomain('suomensotilas.fi')) { + let obscured = document.querySelector('div.epfl-pw-obscured'); + if (obscured) + obscured.classList.remove('epfl-pw-obscured'); +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', 'archive.is'], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function nftLink(url, text_fail = 'BPC > Full article text:\r\n') { + return externalLink(['1ft.io'], 'https://{domain}/{url}', url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +})(); diff --git a/userscript/bpc.fr.user.js b/userscript/bpc.fr.user.js new file mode 100644 index 0000000..3bc546b --- /dev/null +++ b/userscript/bpc.fr.user.js @@ -0,0 +1,1863 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - fr +// @version 4.1.0.1 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fr.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.fr.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.fr/* +// @match *://*.arcinfo.ch/* +// @match *://*.businessam.be/* +// @match *://*.connaissancedesarts.com/* +// @match *://*.courrierinternational.com/* +// @match *://*.dhnet.be/* +// @match *://*.femmesdaujourdhui.be/* +// @match *://*.flair.be/fr/* +// @match *://*.jeuneafrique.com/* +// @match *://*.journaldunet.com/* +// @match *://*.lacote.ch/* +// @match *://*.lalibre.be/* +// @match *://*.lavenir.net/* +// @match *://*.ledevoir.com/* +// @match *://*.legrandcontinent.eu/* +// @match *://*.lenouvelliste.ch/* +// @match *://*.lerevenu.com/* +// @match *://*.lesinrocks.com/* +// @match *://*.levif.be/* +// @match *://*.loeildelaphotographie.com/* +// @match *://*.marianne.net/* +// @match *://*.monacomatin.mc/* +// @match *://*.parismatch.com/* +// @match *://*.philonomist.com/fr/* +// @match *://*.pourleco.com/* +// @match *://*.science-et-vie.com/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @connect apps.lemonde.fr +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var be_groupe_ipm_domains = ['dhnet.be', 'lalibre.be', 'lavenir.net']; +var be_roularta_domains = ['femmesdaujourdhui.be', 'flair.be', 'levif.be']; +var fr_groupe_la_depeche_domains = ['centrepresseaveyron.fr', 'journaldemillau.fr', 'ladepeche.fr', 'lindependant.fr', 'midilibre.fr', 'nrpyrenees.fr', 'petitbleu.fr', 'rugbyrama.fr']; +var fr_groupe_nice_matin_domains = ['monacomatin.mc', 'nicematin.com', 'varmatin.com']; + +if (matchDomain('alternatives-economiques.fr')) { + window.setTimeout(function () { + let paywall = document.querySelector('#temp-paywall'); + removeDOMElement(paywall); + let data_ae_poool = document.querySelector('div[data-ae-poool]'); + if (data_ae_poool) + data_ae_poool.removeAttribute('style'); + }, 1000); // Delay (in milliseconds) +} + +else if (matchDomain(['arcinfo.ch', 'lacote.ch', 'lenouvelliste.ch'])) {// Groupe ESH Médias + let paywall = document.querySelector('section#paywall-articles'); + if (paywall) { + removeDOMElement(paywall); + let url_id = window.location.pathname.match(/\d+$/).pop(); + let html = document.documentElement.outerHTML; + let json; + if (html.includes('window.__NUXT__=')) { + json = html.split('window.__NUXT__=')[1].split('')[0].trim().replace(/blocs:\[\{.*?\}\],/g, ''); + if (url_id && !json.includes('{"' + url_id + '":')) + refreshCurrentTab(); + } + let article = document.querySelector('div.html-content'); + let no_intro = false; + if (!article) { + article = document.querySelector('div.container-mobile-full'); + no_intro = true; + } + if (article && json) { + let content = ''; + if (json.includes('text_1="')) + content = json.split('text_1="').pop().split('";')[0]; + else { + let parts = json.split('html:"'); + parts.splice(0, 1); + for (let part of parts) + content += part.split('",has_pre_content')[0]; + } + if (content) { + content = content.replace(/\\u003C/g, '<').replace(/\\u003E/g, '>').replace(/\\u002F/g, '/').replace(/\\"/g, '"').replace(/\\r\\n/g, ''); + let parser = new DOMParser(); + let content_new = parser.parseFromString('
' + content + '
', 'text/html'); + let iframely = content_new.querySelectorAll('div > div.fr-iframely'); + for (let elem of iframely) { + let url_dom = elem.querySelector('[data-iframely-url]'); + if (url_dom) { + let iframe = document.createElement('iframe'); + iframe.src = url_dom.getAttribute('data-iframely-url'); + iframe.style = 'width: 100%; height: 400px;'; + elem.parentNode.replaceChild(iframe, elem); + } + } + let article_top; + if (!no_intro) { + article_top = article.parentNode.parentNode; + removeDOMElement(article.parentNode); + } else + article_top = article; + article_top.appendChild(content_new.querySelector('div')); + } else { + refreshCurrentTab(); + } + } + } + let ads = 'div[class*="ads_type_"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('atlantico.fr')) { + let ads = 'div#pv_atf, div#infeed'; + hideDOMStyle(ads); +} + +else if (matchDomain('autohebdo.fr')) { + if (window.location.hostname.startsWith('www.') && window.location.pathname.endsWith('.html')) + getJsonUrl('div.box-info.yellow', '', 'div.editor', {art_append: 1}); +} + +else if (matchDomain(be_groupe_ipm_domains)) { + let paywall = document.querySelector('div.is-preview'); + if (paywall) { + paywall.classList.remove('is-preview'); + window.setTimeout(function () { + let div_hidden = document.querySelector('div.is-hidden'); + if (div_hidden) + div_hidden.classList.remove('is-hidden'); + }, 500); + } + let ads = 'div.ap-AdContainer, div.ap-Outbrain'; + hideDOMStyle(ads); +} + +else if (matchDomain('businessam.be')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.text-gradient'); + if (article) { + let filter = /window\.fullcontent64\s?=\s?"/; + let content_script = getSourceJsonScript(filter); + if (content_script) { + try { + let content = decode_utf8(atob(content_script.text.split(filter)[1].split('";')[0])); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + content + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.parentNode.replaceChild(content_new, article); + } catch (err) { + console.log(err); + } + } + } + } +} + +else if (matchDomain('capital.fr')) { + let videos = document.querySelectorAll('div > div#prisma-player-leader[data-ads-core*="Dailymotion"]'); + for (let video of videos) { + try { + let json = JSON.parse(video.getAttribute('data-ads-core')); + if (json && json.playerVideoId) { + let iframe = document.createElement('iframe'); + iframe.src = 'https://www.dailymotion.com/embed/video/' + json.playerVideoId; + iframe.style = 'height: ' + video.offsetHeight + 'px; width: ' + video.offsetWidth + 'px;'; + video.parentNode.replaceChild(iframe, video); + } + } catch (err) { + console.log(err); + } + } + let ads = 'div.containerAds, div.ads-introText, div.outbrain-ads'; + hideDOMStyle(ads); +} + +else if (matchDomain(['challenges.fr', 'sciencesetavenir.fr'])) { + if (window.location.pathname.endsWith('.amp')) { + amp_unhide_access_hide('="paywall.access OR cha.access"', '="NOT (paywall.access OR cha.access)"'); + } else { + let content = document.querySelectorAll('.user-paying-content'); + for (let elem of content) { + elem.classList.remove('user-paying-content'); + elem.removeAttribute('hidden'); + } + let paywall = document.querySelector('.temp-paywall'); + removeDOMElement(paywall); + let amorce = 'div.amorce.manual'; + let ads = 'div[class^="pub-container"], div[id^="moneytag-"]'; + hideDOMStyle(amorce + ', ' + ads); + } +} + +else if (matchDomain('charliehebdo.fr')) { + window.setTimeout(function () { + let paywalled_content = document.querySelector('div.ch-paywalled-content'); + if (paywalled_content) + paywalled_content.removeAttribute('style'); + }, 500); +} + +else if (matchDomain('connaissancedesarts.com')) { + let ads = 'div[class*="banniere"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('courrierinternational.com')) { + let url = window.location.href; + getArchive(url, 'div#bloc_paywall', '', 'article'); +} + +else if (matchDomain('elle.fr')) { + if (window.location.hostname.startsWith('amp.')) { + amp_unhide_access_hide('="poool.access OR cmi_premium.access"'); + } else { + let hidden_images = document.querySelectorAll('img[src^="data:image/"][data-src]'); + for (let hidden_image of hidden_images) + hidden_image.setAttribute('src', hidden_image.getAttribute('data-src')); + let subscription_bar = document.querySelector('.tc-subscription-bar'); + removeDOMElement(subscription_bar); + } + let ads = 'div[class*="--placeholder"]'; + hideDOMStyle(ads); +} + +else if (matchDomain(fr_groupe_la_depeche_domains)) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.article-full__body-content'); + if (article) { + article.removeAttribute('style'); + article.removeAttribute('data-state'); + } + } + let ads = 'div.ad'; + hideDOMStyle(ads); +} + +else if (matchDomain(fr_groupe_nice_matin_domains)) { + if (window.location.pathname.startsWith('/amp/')) { + amp_iframes_replace(); + let qiota_script = document.querySelector('amp-script.i-amphtml-layout-size-defined[src$="/qiota-amp.js"]'); + if (qiota_script) { + qiota_script.classList.remove('i-amphtml-layout-size-defined'); + let amp_images = document.querySelectorAll('amp-img > img.i-amphtml-fill-content'); + for (let elem of amp_images) + elem.removeAttribute('class'); + let sizers = document.querySelectorAll('i-amphtml-sizer'); + removeDOMElement(...sizers); + } + } + let ads = 'div[class^="ad-slot-"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('jeuneafrique.com')) { + let paywall = document.querySelector('div#poool-widget'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.article__content > div[data-mrf-recirculation]'); + let article_id = window.location.pathname.split('/')[1]; + if (article && article_id) { + let limit_low = 50 + randomInt(50); + let limit_high = 600 + randomInt(100); + function show_data(article, body) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + body + '
', 'text/html'); + let article_new = doc.querySelector('div'); + article.innerHTML = ''; + article.parentNode.replaceChild(article_new, article); + } + function fetch_data(limit) { + let url_src = 'https://www.jeuneafrique.com/api/mobile/v6.0/featured/?limit=' + limit; + fetch(url_src, {headers: {"x-exp": "1741079242710", "x-sig": "b431724e94023a6969c5427133e1614db2cbe90e"}}) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let src_articles = json.articles.filter(x => !x.content_status_open); + if (src_articles) { + let src_article = src_articles.filter(x => x.id == article_id)[0]; + let ls_update = true; + if (src_article) + show_data(article, src_article.content_full); + else + header_nofix(article, '', 'BPC > no fix (source file)'); + if (ls_update) { + if (!ls_date || limit > limit_low || now_date > ls_date) + ls_json_articles = {}; + for (let art of src_articles) + ls_json_articles[art.id] = art.content_full; + localStorage.setItem('###_json_date', now_date); + localStorage.setItem('###_json', JSON.stringify(ls_json_articles)); + } + } + } catch (err) { + console.log(err); + } + }) + } else + header_nofix(article, '', 'BPC > no fix (source file)') + }).catch(x => header_nofix(article, '', 'BPC > no fix (source file)')) + } + let json_date; + let json_script = document.querySelector('script[type="application/ld+json"]'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json['@graph']) { + let date_arr = json['@graph'].filter(x => x.datePublished); + if (date_arr.length) + json_date = date_arr[0].datePublished; + } + } catch (err) { + console.log(err); + } + } + let now_date = (new Date()).toISOString().split('T')[0]; + let art_date = json_date ? json_date.split('T')[0] : now_date; + let ls_date = localStorage.getItem('###_json_date') || ''; + let ls_json_articles = {}; + if (ls_date) { + let ls_articles = localStorage.getItem('###_json'); + ls_json_articles = JSON.parse(ls_articles); + if (ls_date < art_date) + fetch_data(limit_high); + else { + let art_data = ls_json_articles[article_id]; + if (art_data) + show_data(article, art_data); + else if (now_date === art_date) + fetch_data(limit_low); + else + header_nofix(article, '', 'BPC > no fix (source file)') + } + } else { + fetch_data(limit_high); + } + } + } + let ads = 'div.banner-ad, div.box-ad-brand'; + hideDOMStyle(ads); +} + +else if (matchDomain('journaldunet.com')) { + let reg_wall = document.querySelector('div.reg_wall'); + removeDOMElement(reg_wall); + let entry_reg_wall = document.querySelector('div.entry_reg_wall[style]'); + if (entry_reg_wall) + entry_reg_wall.removeAttribute('style'); +} + +else if (matchDomain('lanouvellerepublique.fr')) { + let ads = 'aside.dfp'; + hideDOMStyle(ads); +} + +else if (matchDomain('lecourrierdesstrateges.fr')) { + let paywall = document.querySelector('div.jpw-truncate-btn'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let content = document.querySelector('div.content-inner'); + if (json_text && content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + content.parentNode.replaceChild(content_new, content); + let hidden_images = document.querySelectorAll('img[src][srcset]'); + for (let elem of hidden_images) + elem.removeAttribute('srcset'); + let entry_content = document.querySelector('div.entry-content[style]'); + if (entry_content) + entry_content.removeAttribute('style'); + } + } + } + } +} + +else if (matchDomain('ledevoir.com')) { + setCookie('pw6', '', 'ledevoir.com', '/', 0); + let counter = document.querySelector('.paywall-breakpoint-wrapper'); + removeDOMElement(counter); +} + +else if (matchDomain('lefigaro.fr')) { + let paywall = document.querySelector('div#fig-premium-paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div[data-component="fig-content-body"]'); + if (article) { + let resource_key = '34e68a3419a876e36729503e2107dfa556e1a105892e27010130a30018ccbe60'; + let url = window.location.href.split([/\?#/])[0]; + let url_src = 'https://api-graphql.lefigaro.fr/graphql?id=FigaroCoreMobile_resourceByUrl_persistent_' + resource_key + '&variables={%22url%22:%20%22' + url + '%22}'; + fetch(url_src) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let pars = json.data.resource.body.structured; + if (pars.length) + article.innerHTML = ''; + let parser = new DOMParser(); + for (let par of pars) { + let elem; + let sub_elem; + let par_type = par.__typename; + if (['Heading', 'Paragraph', 'ParagraphWithPaywall'].includes(par_type)) { + if (par.paywall) + par = par.paywall; + if (par.text.replace(/ /g, '')) { + let doc = parser.parseFromString('

' + par.text + '

', 'text/html'); + elem = doc.querySelector('p'); + if (par_type === 'Heading') + elem.style = 'font-weight: bold; font-size: 1.85rem;'; + } + } else if (['Photo', 'VideoFigaro'].includes(par_type)) { + if (par.thumbnail) + par = par.thumbnail; + if (par.image) { + elem = document.createElement('p'); + elem.className = 'fig-paragraph'; + let img = makeFigure(par.image.url, par.caption.replace(/<[^<]*>/g, '') + ' ' + par.credit, '', {class: 'fig-media__legend'}); + elem.append(img, document.createElement('br')); + } + } else if (par_type === 'Frame') { + if (par.text) { + elem = document.createElement('p'); + elem.className = 'fig-paragraph'; + let title = document.createElement('p'); + title.innerText = par.title; + title.className = 'fig-paragraph'; + title.style = 'font-weight: bold;'; + let doc = parser.parseFromString('
' + par.text + '
', 'text/html'); + let text = doc.querySelector('div'); + elem.append(title, text); + } + } else if (par_type.endsWith('Link')) { + if (par.link) + par = par.link; + if (par.title && par.url) { + elem = document.createElement('p'); + if (par.prefix) { + let prefix = document.createElement('span'); + prefix.innerText = par.prefix + ' '; + elem.append(prefix); + } + let link_elem = document.createElement('a'); + link_elem.href = par.url; + link_elem.innerText = par.title.replace(/<[^<]*>/g, ''); + link_elem.target = '_blank'; + elem.append(link_elem); + } + } else if (['FreeHtml', 'Tweet'].includes(par_type)) { + if (par.sourceCode) { + let doc = parser.parseFromString('
' + par.sourceCode + '
', 'text/html'); + elem = doc.querySelector('div'); + let tweet_link = elem.querySelector('a[href^="https://twitter.com/"], a[href^="https://x.com/"]'); + if (tweet_link) { + tweet_link.innerText = tweet_link.href; + tweet_link.target = '_blank'; + } + } + } else if (par_type === 'Youtube') { + if (par.id) { + elem = document.createElement('iframe'); + elem.src = 'https://www.youtube.com/embed/' + par.id; + elem.style = 'width: 100%; height: 400px;'; + } + } else if (par_type === 'List') { + if (par.list) { + elem = document.createElement('ul'); + elem.style = 'list-style: inside;'; + for (let item of par.list) { + let li = document.createElement('li'); + li.style = 'margin: 10px 0px;'; + let doc = parser.parseFromString('' + item + '', 'text/html'); + let span = doc.querySelector('span'); + li.appendChild(span); + elem.appendChild(li); + } + } + } else if (par_type === 'HorizontalRule') { + elem = document.createElement('hr'); + } else if (par_type === 'Quote') { + elem = document.createElement('blockquote'); + elem.style = 'margin: 30px;'; + let qtext = document.createElement('p'); + qtext.innerText = parseHtmlEntities(par.text); + qtext.style = 'font-weight: bold; font-size: 28px; margin: 15px 0px;'; + let qcredit = document.createElement('p'); + qcredit.innerText = par.credit ? parseHtmlEntities(par.credit) : ''; + elem.append(qtext, qcredit); + } else if (!['Brightcove'].includes(par_type)) { + console.log(par); + } + if (elem) + article.appendChild(elem); + } + } catch (err) { + console.log(err); + } + }) + } + }).catch(x => header_nofix(article, '', 'BPC > no fix (source file)')) + } + } +} + +else if (matchDomain('legrandcontinent.eu')) { + let paywall = document.querySelector('body.paywall, body.pw, body.softwall'); + if (paywall) + paywall.classList.remove('paywall', 'pw', 'softwall'); + let banners = document.querySelectorAll('div#fix-pw, div.disposableBanner'); + removeDOMElement(...banners); +} + +else if (matchDomain(['lejdd.fr', 'parismatch.com', 'public.fr'])) { + let banners = '.forbidden'; + let ads = 'div[class^="lmn-"], div.premium-hidden, div.p-aside--placeholder, section.outbrain-container'; + hideDOMStyle(banners + ', ' + ads); + let bottom_hide = document.querySelector('.cnt[data-poool-mode="hide"]'); + if (bottom_hide) { + bottom_hide.removeAttribute('data-poool-mode'); + bottom_hide.removeAttribute('style'); + } +} + +else if (matchDomain('lemagit.fr')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.classList.remove('paywall'); + let banners = document.querySelectorAll('p#firstP, div#inlineRegistrationWrapper'); + removeDOMElement(...banners); + } +} + +else if (matchDomain('lemonde.fr')) { + let url = window.location.href.split(/[\?#]/)[0]; + let paywall = document.querySelector('section.lmd-paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('.article__content'); + if (article) { + let match = url.match(/article.*_(\d+)_/); + if (match) { + let id = match[1]; + let url_base = 'https://apps.lemonde.fr/aec/v1/' + (window.location.pathname.startsWith('/en/') ? 'en/' : '') + 'premium-android-phone/article/'; + let url_src = url_base + id; + let json_key = 'template_vars.content'; + getExtFetch(url_src, json_key, {}, main_lemonde); + function main_lemonde(url, data) { + try { + if (data) { + let parser = new DOMParser(); + let doc = parser.parseFromString(data, 'text/html'); + let article_new = doc.querySelector('.article_content'); + if (article_new) { + article_new.className = 'article__content'; + article_new.querySelectorAll('p').forEach(e => e.className = 'article__paragraph'); + article_new.querySelectorAll('h2').forEach(e => e.className = 'article__sub-title'); + article_new.querySelectorAll('h3.question').forEach(e => e.className = 'article__question'); + article_new.querySelectorAll('figure').forEach(e => e.style = 'margin: 0px 10px;'); + article_new.querySelectorAll('div.see-also-container, div.reference').forEach(e => e.style = 'margin: 20px 0px;'); + let image_divs = article_new.querySelectorAll('div.image'); + for (let elem of image_divs) { + elem.style = 'margin: 20px 0px;'; + let img = elem.querySelector('a > img[data-src]'); + if (img) { + if (img.src.startsWith('data:image/')) + img.src = img.getAttribute('data-src'); + img.parentNode.before(img); + } + } + let videos = article_new.querySelectorAll('div.video-container'); + for (let video of videos) { + let video_id_dom = video.querySelector('div[data-provider="dailymotion"][data-id]'); + if (video_id_dom) { + let iframe = document.createElement('iframe'); + iframe.src = 'https://www.dailymotion.com/embed/video/' + video_id_dom.getAttribute('data-id'); + iframe.style = 'height: 400px; width: 100%; margin: 20px 0px;'; + video.parentNode.replaceChild(iframe, video); + } + } + let cartes = article_new.querySelectorAll('div.cartes > div.carte > img[src_700][src_350]'); + for (let elem of cartes) { + elem.parentNode.parentNode.removeAttribute('class'); + elem.src = mobile ? elem.getAttribute('src_350') : elem.getAttribute('src_700'); + elem.style = 'width: 90%; margin: auto;'; + } + let inread = article_new.querySelectorAll('div.inread-container'); + removeDOMElement(...inread); + let links = article_new.querySelectorAll('div.link-container > a[href^="lmfr://"]'); + function link_lemonde(url, data, elem) { + if (data) + elem.href = data; + } + for (let elem of links) { + let url_link = elem.href; + let url_match = url_link.split(/[\?#]/)[0].match(/^lmfr:\/\/.*element\/article\/(\d+)/); + if (url_match) { + let id = url_match[1]; + let url_src = url_base + id; + let json_key = 'element.url'; + getExtFetch(url_src, json_key, {}, link_lemonde, [elem]); + } else if (url_link.match(/^lmfr:\/.*\/live\/\d+\?/) && url_link.includes('www.lemonde.fr')) { + url_link = decodeURIComponent('https://www.lemonde.fr' + url_link.replace(/%25/g, '%').split('www.lemonde.fr')[1].split('.html')[0] + '.html'); + link_lemonde(url, url_link, elem); + } + } + article.innerHTML = ''; + article.parentNode.replaceChild(article_new, article); + } + } + } catch (err) { + console.log(err); + } + } + } + } + } + let ads = 'div.dfp-slot, div.dfp__container'; + hideDOMStyle(ads); +} + +else if (matchDomain('leparisien.fr')) { + if (window.location.pathname.startsWith('/amp/')) + ampToHtml(); + else { + let url = window.location.href; + getArchive(url, 'div.paywall', '', 'article'); + } +} + +else if (matchDomain('lepoint.fr')) { + function lepoint_main() { + function decryptVariable(a) { + var t = ["point", "les", "payants", "top"], + n = ["le", "avec", "articles", "c"], + o = (function () { + var o = []; + for (var e = 0; e < 4; e++) + o.push(n[e]), o.push(t[e]); + return o + })(), + e = { + stringify: function (o) { + var e = { + ct: o.ciphertext.toString(CryptoJS.enc.Base64) + }; + return o.iv && (e.iv = o.iv.toString()), + o.salt && (e.s = o.salt.toString()), + JSON.stringify(e) + }, + parse: function (o) { + var e = JSON.parse(o), + t = CryptoJS.lib.CipherParams.create({ + ciphertext: CryptoJS.enc.Base64.parse(e.ct) + }); + return e.iv && (t.iv = CryptoJS.enc.Hex.parse(e.iv)), + e.s && (t.salt = CryptoJS.enc.Hex.parse(e.s)), + t + } + }; + return JSON.parse(CryptoJS.AES.decrypt(JSON.stringify(a), o.join(" "), { + format: e + }).toString(CryptoJS.enc.Utf8)) + } + let article = document.querySelector('div#contenu'); + if (article && window.variable_article_poool) + article.innerHTML = decryptVariable(window.variable_article_poool); + } + if (!matchDomain(['journal.lepoint.fr'])) { + let paywall = document.querySelectorAll('aside.paywall'); + if (paywall.length) { + removeDOMElement(...paywall); + insert_script(lepoint_main); + } + let ads = 'div[id*="WRAP_"], div#StickyPaywall, div#paywall-sticky, #article-body div.slotpub, div.sticky-block'; + hideDOMStyle(ads); + } else { + let url = window.location.href; + getArchive(url, 'div.accnt-cmp', '', 'article'); + } +} + +else if (matchDomain('lequipe.fr')) { + let paywall = document.querySelector('div.Article__paywall'); + if (paywall) { + removeDOMElement(paywall); + let article_id = window.location.pathname.match(/\d+$/)[0]; + let article = document.querySelector('div.article__body'); + let notes = window.location.pathname.includes('Article/Les-notes-'); + if (notes) + header_nofix(article, '', 'BPC > no fix'); + else if (article_id && article) { + let url_src = 'https://dwh.lequipe.fr/api/v4/efr/news/' + article_id; + fetch(url_src) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let pars = json.items.filter(x => x.layout === 'article_body')[0].objet.paragraphs; + pars.shift(); + article.innerHTML = ''; + article.className += ' Article__paragraph'; + article.appendChild(document.createElement('br')); + addStyle('div.article__body > p.Paragraph {font-family: "DINNextLTPro-Regular", sans-serif; font-size: 18px; font-weight: 400; line-height: 26px;}'); + let parser = new DOMParser(); + for (let par of pars) { + let elem; + if (par.content) { + if ((par.content.match(/(^$)/g) || []).length !== 1) { + let elem_type = par.content.includes('div>') ? 'div' : 'p'; + let doc = parser.parseFromString('<' + elem_type + ' class="Paragraph">' + par.content + '', 'text/html'); + elem = doc.querySelector(elem_type); + } + } else if (par.title) { + elem = document.createElement('h2'); + elem.innerText = par.title; + } else if (par.media) { + if (par.media.url && par.media.ratio) { + let ratio = par.media.ratio; + if (!parseInt(ratio)) + ratio = 1.5; + let url = par.media.url.replace(/\\u002F/g, '/').replace('{width}', '400').replace('{height}', parseInt(400 / ratio)).replace('{quality}', '75'); + let caption = par.media.legende && par.media.legende.length > 2 ? par.media.legende : ''; + elem = makeFigure(url, caption, {}, {'style': 'font-weight: bold;'}); + } else if (par.media.__type === 'video' && par.media.id) { + let url = par.media.image.url.replace('{width}', '400').replace('{height}', 400).replace('{quality}', '75'); + elem = makeFigure(url, par.media.legend); + let video_link = document.createElement('a'); + video_link.href = video_link.innerText = 'https://geo.dailymotion.com/player.html?video=' + par.media.id; + video_link.style = 'text-decoration: underline;'; + video_link.target = '_blank'; + elem.appendChild(video_link); + } + } else if (!['article_paragraph_pub'].includes(par.__type)) + console.log(par); + if (elem) + article.appendChild(elem); + } + } catch (err) { + console.log(err); + } + }) + } + }).catch(x => header_nofix(article, '', 'BPC > no fix (source file)')) + } + } + let ads = 'div.AmPlaceholder, div.Modal[data-modal="amsBlock"]'; + hideDOMStyle(ads); + let noscroll = document.querySelector('html.no-scroll'); + if (noscroll) + noscroll.classList.remove('no-scroll'); +} + +else if (matchDomain('lerevenu.com')) { + let ads = 'div.wrapperAd'; + hideDOMStyle(ads); +} + +else if (matchDomain('lesechos.fr')) { + if (window.location.pathname.startsWith('/amp/')) { + ampToHtml(); + } else { + window.setTimeout(function () { + let paywall = document.querySelector('div#paywall, div#registerWall'); + if (paywall) { + removeDOMElement(paywall); + let filter = /window\.__REACT_QUERY_STATE__\s?=\s?/; + let json_script = getSourceJsonScript(filter); + if (json_script) { + try { + let json = JSON.parse(json_script.text.split(filter)[1].split('};')[0] + '}'); + let data_article = json.queries.filter(x => x.state.data.stripes)[0].state; + let url = window.location.href; + let url_loaded = data_article.data.path; + if (url_loaded && (!url_loaded.slice(-7).match(/\d+/) || !url.includes(url_loaded.slice(-7)))) + refreshCurrentTab(); + else { + let json_text = data_article.data.stripes[0].mainContent[0].data.description; + let article = document.querySelector('div.post-paywall'); + if (article) { + let contentNode = document.createElement('div'); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let error_iframes = article_new.querySelectorAll('iframe[allow*="fullscreen"][allowfullscreen]'); + for (let iframe of error_iframes) + iframe.removeAttribute('allowfullscreen'); + if (article.parentNode && article_new) { + article.parentNode.replaceChild(article_new, article); + let article_lastnode = document.querySelector('.post-paywall > :last-child'); + if (article_lastnode) { + article_lastnode.setAttribute('style', 'height: auto !important; overflow: hidden !important; max-height: none !important;'); + } + } + } + let styleElem = document.head.appendChild(document.createElement('style')); + styleElem.innerText = ".post-paywall::after {height: auto !important;}"; + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div.sc-1u9r8h-0'; + hideDOMStyle(ads); + }, 500); + } +} + +else if (matchDomain('lesinrocks.com')) { + if (window.location.search.match(/(\?|&)amp/)) { + let size_defined = document.querySelector('amp-script.i-amphtml-layout-size-defined'); + if (size_defined) + size_defined.style = 'overflow:visible !important;'; + let overlays = document.querySelectorAll('section.learn_more, div.sidebar, div.menu-footer, div.tooltip_bib, footer.content-info'); + removeDOMElement(...overlays); + } +} + +else if (matchDomain('letelegramme.fr')) { + let paywall = document.querySelectorAll('div.tlg-paywalled'); + for (let elem of paywall) + elem.classList.remove('tlg-paywalled'); + let ads = 'div[id^="pub_"]'; + hideDOMStyle(ads); +} + +else if (matchDomain(be_roularta_domains)) { + let paywall = document.querySelector('div[id*="wall-modal"]'); + if (paywall) { + removeDOMElement(paywall); + let html = document.querySelector('html[class]'); + if (html) + html.removeAttribute('class'); + function roularta_noscroll(node) { + node.removeAttribute('style'); + node.removeAttribute('class'); + } + waitDOMAttribute('html', 'html', 'class', roularta_noscroll, true); + let intro = document.querySelectorAll('div.article-body > p, div.article-body > style'); + removeDOMElement(...intro); + let locked = document.querySelector('body.locked'); + if (locked) + locked.classList.remove('locked'); + } + if (!window.navigator.userAgent.toLowerCase().includes('chrome') && window.location.href.match(/\/(\w+-){2,}/)) { + let lazy_images = document.querySelectorAll('img[src^="data:image/"][data-lazy-src]'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-lazy-src'); + } + } + let ads = 'div.rmgAd, div.c-header__ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('lexpress.fr')) { + let ads = 'div[class^="block_pub"], div[class^="bottom-bar"], div.teads__block, div.ban-bottom, div[class^="placeholder--ban-atf"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('liberation.fr')) { + let paywall = document.querySelector('div.article-body-paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('article[data-datawall-status]'); + if (article) { + let url_src = 'https://arc.api.liberation.fr/content/v4/?website=liberation&website_url=' + encodeURIComponent(window.location.pathname); + let x_api_key = 'ejeePeingeitaegho3weengeeyohpu'; + fetch(url_src, {headers: {"x-api-key": x_api_key}}) + .then(response => { + if (response.ok) { + response.json().then(json => { + if (json && json.content_elements) { + let pars = json.content_elements; + if (pars.length) + article.innerHTML = ''; + let parser = new DOMParser(); + for (let par of pars) { + let elem = document.createElement('p'); + let sub_elem; + if (['header', 'raw_html', 'text'].includes(par.type)) { + if (par.content) { + let doc = parser.parseFromString('
' + par.content + '
', 'text/html'); + sub_elem = doc.querySelector('div'); + if (par.type === 'header') + sub_elem.style = 'font-weight: bold; font-size: 1.85rem;'; + } + } else if (par.type === 'correction') { + if (par.text) { + sub_elem = document.createElement('span'); + elem.innerText = par.text; + } + } else if (par.type === 'image') { + if (par.url) { + sub_elem = document.createElement('img'); + sub_elem.src = par.url; + } + } else if (par.type === 'custom_embed') { + if (par.embed && par.embed.config) { + let config = par.embed.config; + sub_elem = document.createElement('div'); + sub_elem.style = 'border: 1px solid black;'; + if (config.title) { + let sub_item = document.createElement('p'); + sub_item.innerText = config.title; + sub_item.style = 'font-weight: bold; margin: 20px;'; + sub_elem.appendChild(sub_item); + } + if (config.content) { + let sub_item = document.createElement('p'); + sub_item.innerText = config.content; + sub_item.style = 'margin: 20px;'; + sub_elem.appendChild(sub_item); + } + } else + console.log(par); + } else if (par.type === 'oembed_response') { + if (par.raw_oembed && par.raw_oembed.html) { + if (!par.subtype === 'twitter') { + let doc = parser.parseFromString('
' + par.raw_oembed.html + '
', 'text/html'); + sub_elem = doc.querySelector('div'); + } else if (par.raw_oembed.url) { + sub_elem = document.createElement('a'); + sub_elem.href = sub_elem.innerText = par.raw_oembed.url; + sub_elem.target = '_blank'; + } + } + } else if (par.type === 'link_list') { + if (par.items) { + sub_elem = document.createElement('p'); + sub_elem.appendChild(document.createElement('hr')); + sub_elem.appendChild(document.createTextNode('Lire aussi')); + sub_elem.appendChild(document.createElement('br')); + for (let item of par.items) { + if (item.content && item.url) { + let item_link = document.createElement('a'); + item_link.href = item.url; + item_link.innerText = item.content; + sub_elem.appendChild(item_link); + sub_elem.appendChild(document.createElement('br')); + } + } + sub_elem.appendChild(document.createElement('hr')); + } + } else if (!['quote'].includes(par.type)) { + console.log(par); + } + if (sub_elem) { + elem.appendChild(sub_elem); + article.appendChild(elem); + } + } + } + }) + } + }).catch(x => header_nofix(article, '', 'BPC > no fix (source file)')) + } + } + let ads = 'div[class^="StickyAd"], div[class^="default__OutbrainWrapper"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('loeildelaphotographie.com')) { + let paywall = document.querySelector('.paywall'); + if (paywall) { + paywall.removeAttribute('class'); + } + let premium_pic_boxes = document.querySelectorAll('.premium-pic-box'); + let banners = document.querySelectorAll('.membership-promo-container, .login_form_litle'); + removeDOMElement(...premium_pic_boxes, ...banners); + let blurred_images = document.querySelectorAll('img[style*="blur"]'); + for (let blurred_image of blurred_images) + blurred_image.removeAttribute('style'); +} + +else if (matchDomain('lopinion.fr')) { + let url = window.location.href; + getArchive(url, 'div.paywall-premium', '', 'div.mainBody', '', 'div[style*=";line-height:1.8;"] div[style*=";line-height:1.8;"]'); +} + +else if (matchDomain('marianne.net')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div > div.js-poool-wrapper'); + if (article) { + let limit_low = 50; + let limit_high = 400; + function show_data(article, body) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + body + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let lazy_images = article_new.querySelectorAll('img.lazyload[data-src]:not([src])'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-src'); + elem.classList.remove('lazyload'); + } + article.innerHTML = ''; + article.parentNode.replaceChild(article_new, article); + } + function fetch_data(limit, offset = 0) { + let url_src = 'https://mobile.marianne.net/premium?limit=' + limit + '&offset=' + offset; + fetch(url_src) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let src_articles = json.feed_auto; + if (src_articles) { + let src_article = src_articles.filter(x => x.urlWeb === url)[0]; + let ls_update = true; + if (src_article) + show_data(article, src_article.body); + else if (limit === limit_low) { + ls_update = false; + fetch_data(limit_high); + } else + header_nofix(article, '', 'BPC > no fix (source file)'); + if (ls_update) { + let now_date = (new Date()).toISOString().split('T')[0]; + if (!ls_date || limit > limit_low || now_date > ls_date) + ls_json_articles = {}; + for (let art of src_articles) + ls_json_articles[art.urlWeb] = art.body; + localStorage.setItem('###_json_date', now_date); + localStorage.setItem('###_json', JSON.stringify(ls_json_articles)); + } + } + } catch (err) { + console.log(err); + } + }) + } + }).catch(x => header_nofix(article, '', 'BPC > no fix (source file)')) + } + let url = window.location.href.split(/[#\?]/)[0]; + let meta_date = document.querySelector('head > meta[property="article:published_time"][content]'); + let art_date = ''; + if (meta_date) + art_date = meta_date.content.split('T')[0]; + let ls_date = localStorage.getItem('###_json_date') || ''; + let ls_json_articles = {}; + if (ls_date) { + let ls_articles = localStorage.getItem('###_json'); + ls_json_articles = JSON.parse(ls_articles); + if (ls_date <= art_date) + fetch_data(limit_low); + else { + let art_data = ls_json_articles[url]; + if (art_data) + show_data(article, art_data); + else if (Object.keys(ls_json_articles).length <= limit_low) + fetch_data(limit_high); + else + header_nofix(article, '', 'BPC > no fix (source file)') + } + } else { + fetch_data(limit_low); + } + } + } + let ads = 'div[class*="--placeholder"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('philonomist.com')) { + let paywall = document.querySelector('div.content-bandeau'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = parseHtmlEntities(findKeyJson(json, ['articleBody'])).replace(/\s{2,}/g, '\r\n\r\n'); + let article = document.querySelector('div.main-body'); + if (json_text && article) { + let par_last = article.querySelector('div > p:last-child'); + if (par_last) { + let par_last_str = par_last.innerText.substring(0, 50); + if (json_text.replace(/<[^<]*>/g, '').includes(par_last_str)) { + par_last.innerText = json_text.substring(json_text.indexOf(par_last_str)); + } else { + article.innerHTML = ' '; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + article.appendChild(article_new); + } + } + } + } + } + } +} + +else if (matchDomain('pourleco.com')) { + let paywall = document.querySelector('div[data-pleco-poool^="paywall"]'); + if (paywall) { + let intro = document.querySelector('div[data-pleco-transition="fade"]'); + removeDOMElement(paywall, intro); + let article = document.querySelector('div[class*="article-"][style]'); + if (article) + article.removeAttribute('style'); + } +} + +else if (matchDomain('reforme.net')) { + let article_sel = 'div.elementor-widget-theme-post-content'; + getJsonUrl(article_sel + ' section', '', article_sel); + let banner = 'div.free-access-banner'; + hideDOMStyle(banner); +} + +else if (matchDomain('science-et-vie.com')) { + if (window.location.hostname.startsWith('amp.')) { + let pars = document.querySelectorAll('.qiota_reserve > p, .qiota_reserve > h2'); + let pars_text = []; + for (let par of pars) { + if (pars_text.includes(par.innerText)) + removeDOMElement(par); + else + pars_text.push(par.innerText); + } + let sizer = document.querySelector('div.article-content > amp-script > i-amphtml-sizer'); + removeDOMElement(sizer); + let replaced_content = document.querySelector('div.i-amphtml-replaced-content'); + if (replaced_content) + replaced_content.removeAttribute('class'); + } +} + +else if (matchDomain(['sudouest.fr', 'charentelibre.fr', 'larepubliquedespyrenees.fr'])) { + let paywall = document.querySelectorAll('.visible-not-premium'); + if (paywall.length) { + removeDOMElement(...paywall); + let visible_premium = document.querySelectorAll('div.visible-premium'); + for (let elem of visible_premium) + elem.classList.remove('visible-premium'); + } + let footer_premium = '.footer-premium'; + let ads = 'div.pub, div.ph-easy-subscription'; + hideDOMStyle(footer_premium + ', ' + ads); +} + +else if (matchDomain('telerama.fr')) { + let paywall = document.querySelector('section.paywall'); + if (paywall) { + removeDOMElement(paywall); + let article_sel = 'article.article__page-content'; + let article = document.querySelector(article_sel); + if (article) { + let url_src = 'https://apps.telerama.fr/tlr/v1/premium-android-tablet/element?id=' + encodeURIComponent(window.location.pathname); + let json_key = 'templates.raw_content.content'; + getExtFetch(url_src, json_key, {}, main_telerama); + function main_telerama(url, data) { + try { + if (data) { + let parser = new DOMParser(); + let doc = parser.parseFromString(data, 'text/html'); + let article_new = doc.querySelector(article_sel); + if (article_new && article.parentNode) { + article_new.querySelectorAll('a[href^="tlrm://element?id="]').forEach(e => e.href = decodeURIComponent(e.href.split('tlrm://element?id=')[1])); + article_new.querySelectorAll('figure > img[data-src]:not([src])').forEach(e => e.src = e.getAttribute('data-src')); + article.parentNode.replaceChild(article_new, article); + } + } + } catch (err) { + console.log(err); + } + } + } + } + let ads = 'div.dfp-slot'; + hideDOMStyle(ads); +} + +else if (matchDomain('lamontagne.fr') || document.querySelector('head > meta[name="google-play-app"][content^="app-id=com.centrefrance"]')) {// Groupe Centre France + let paywall = document.querySelector('div#poool-widget'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let content = document.querySelector('div.entry-content'); + if (json_text && content) { + content.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + content.appendChild(article_new); + } + } + } + } +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function urlHost(url) { + if (/^http/.test(url)) { + try { + return new URL(url).hostname; + } catch (e) { + console.log(`url not valid: ${url} error: ${e}`); + } + } + return url; +} + +function matchUrlDomain(domains, url) { + return matchDomain(domains, urlHost(url)); +} + +function setCookie(name, value, domain, path, days, localstorage_hold = false) { + var max_age = days * 24 * 60 * 60; + document.cookie = name + "=" + (value || "") + "; domain=" + domain + "; path=" + path + "; max-age=" + max_age; + if (!localstorage_hold) + window.localStorage.clear(); +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function makeFigure(url, caption_text, img_attrib = {}, caption_attrib = {}) { + let elem = document.createElement('figure'); + let img = document.createElement('img'); + img.src = url; + for (let attrib in img_attrib) + if (img_attrib[attrib]) + img.setAttribute(attrib, img_attrib[attrib]); + elem.appendChild(img); + if (caption_text) { + let caption = document.createElement('figcaption'); + for (let attrib in caption_attrib) + if (caption_attrib[attrib]) + caption.setAttribute(attrib, caption_attrib[attrib]); + let cap_par = document.createElement('p'); + cap_par.innerText = caption_text; + caption.appendChild(cap_par); + elem.appendChild(caption); + } + return elem; +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function waitDOMElement(selector, tagName = '', callback, multiple = false) { + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (!tagName || (node.tagName === tagName)) { + if (node.matches(selector)) { + callback(node); + if (!multiple) + this.disconnect(); + } + } + } + } + }).observe(document, { + subtree: true, + childList: true + }); +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function insert_script(func, insertAfterDom) { + let bpc_script = document.querySelector('script#bpc_script'); + if (!bpc_script) { + let script = document.createElement('script'); + script.setAttribute('id', 'bpc_script'); + script.appendChild(document.createTextNode('(' + func + ')();')); + let insertAfter = insertAfterDom ? insertAfterDom : (document.body || document.head || document.documentElement); + insertAfter.appendChild(script); + } +} + +function getSourceJsonScript(filter, attributes = ':not([src], [type])') { + if (typeof filter === 'string') + filter = new RegExp(filter.replace(/\./g, '\\.')); + let scripts = document.querySelectorAll('script' + attributes); + for (let script of scripts) { + if (script.text.match(filter)) + return script; + } + return false; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function getJsonUrlText(article, callback, article_id = '', key = '', url_rest = false, url_slash = false) { + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + let json_url; + if (json_url_dom) + json_url = json_url_dom.href; + if (!json_url && article_id) + json_url = window.location.origin + '/wp-json/wp/v2/posts/' + article_id; + if (url_rest) + json_url = json_url.replace('/wp-json/', '/?rest_route=/'); + else if (url_slash) + json_url = json_url.replace('/wp-json/', '//wp-json/'); + if (json_url) { + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = parseHtmlEntities(!key ? json.content.rendered : getNestedKeys(json, key)); + callback(json_text, article); + } catch (err) { + console.log(err); + } + }); + } + }); + } +} + +function getJsonUrlAdd(json_text, article, art_options = {}) { + let art_type = 'div'; + let art_attrib = ''; + if (Object.keys(art_options).length) { + if (art_options.art_type) + art_type = art_options.art_type; + if (art_options.art_class) + art_attrib += ' class="' + art_options.art_class + '"'; + if (art_options.art_id) + art_attrib += ' id="' + art_options.art_id + '"'; + if (art_options.art_style) + art_attrib += ' style="' + art_options.art_style + '"'; + if (art_options.func_text) + json_text = art_options.func_text(json_text); + } + let parser = new DOMParser(); + let doc = parser.parseFromString('<' + art_type + art_attrib + '>' + json_text + '', 'text/html'); + let article_new = doc.querySelector(art_type); + if (art_options.art_append || !article.parentNode) { + if (!art_options.art_hold) + article.innerHTML = ''; + article.appendChild(article_new); + } else + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); +} + +function getJsonUrl(paywall_sel, paywall_action = '', article_sel, art_options = {}, article_id = '', key = '', url_rest = false, url_slash = false) { + let paywall = document.querySelectorAll(paywall_sel); + let article = document.querySelector(article_sel); + if (paywall.length && article) { + clearPaywall(paywall, paywall_action); + getJsonUrlText(article, (json_text, article) => { + if (json_text && article) + getJsonUrlAdd(json_text, article, art_options); + }, article_id, key, url_rest, url_slash); + } +} + +function parseHtmlEntities(encodedString) { + let parser = new DOMParser(); + let doc = parser.parseFromString('', 'text/html'); + let dom = doc.querySelector('textarea'); + return dom.value; +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function getExtFetch(url, json_key = '', headers = {}, callback = '', args = []) { + GM.xmlHttpRequest({ + method: "GET", + url: url, + headers: headers, + onload: function (response) { + let html = response.responseText; + if (json_key) { + try { + let json = JSON.parse(html); + if (json) + html = getNestedKeys(json, json_key); + } catch (err) { + console.log(err); + } + } + callback(url, html, ...args); + } + }) +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function nftLink(url, text_fail = 'BPC > Full article text:\r\n') { + return externalLink(['1ft.io'], 'https://{domain}/{url}', url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function removeClassesByPrefix(el, prefix) { + let el_classes = el.classList; + for (let el_class of el_classes) { + if (el_class.startsWith(prefix)) + el_classes.remove(el_class); + } +} + +function amp_iframes_replace(weblink = false, source = '') { + let amp_iframes = document.querySelectorAll('amp-iframe' + (source ? '[src*="' + source + '"]' : '')); + let par, elem; + for (let amp_iframe of amp_iframes) { + if (!weblink) { + if (amp_iframe.offsetHeight > 10) { + elem = document.createElement('iframe'); + elem.src = amp_iframe.getAttribute('src').replace(/^http:/, 'https:'); + elem.style = 'height: ' + amp_iframe.offsetHeight + 'px; width: 100%; border: 0px;'; + if (amp_iframe.getAttribute('sandbox')) + elem.sandbox = amp_iframe.getAttribute('sandbox'); + amp_iframe.parentNode.replaceChild(elem, amp_iframe); + } + } else { + par = document.createElement('p'); + par.style = 'margin: 20px 0px;'; + elem = document.createElement('a'); + elem.innerText = 'Media-link'; + elem.setAttribute('href', amp_iframe.getAttribute('src')); + elem.setAttribute('target', '_blank'); + par.appendChild(elem); + amp_iframe.parentNode.replaceChild(par, amp_iframe); + } + } +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function amp_redirect_not_loop(amphtml) { + if (!check_loop()) { + window.location.href = amphtml.href; + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > redirect to amp failed (disable amp-to-html extension/add-on or browser setting)'); + } +} + +function amp_redirect(paywall_sel, paywall_action = '', amp_url = '') { + let paywall = document.querySelectorAll(paywall_sel); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (!amphtml && amp_url) + amphtml = {href: amp_url}; + if (paywall.length && amphtml) { + clearPaywall(paywall, paywall_action); + amp_redirect_not_loop(amphtml); + } +} + +function amp_unhide_subscr_section(amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let preview = document.querySelectorAll('[subscriptions-section="content-not-granted"]'); + removeDOMElement(...preview); + let subscr_section = document.querySelectorAll('[subscriptions-section="content"]'); + for (let elem of subscr_section) + elem.removeAttribute('subscriptions-section'); + hideDOMStyle(amp_ads_sel, 5); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function amp_unhide_access_hide(amp_access = '', amp_access_not = '', amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let access_hide = document.querySelectorAll('[amp-access' + amp_access + '][amp-access-hide]:not([amp-access="error"], [amp-access^="message"], .piano)'); + for (let elem of access_hide) + elem.removeAttribute('amp-access-hide'); + if (amp_access_not) { + let amp_access_not_dom = document.querySelectorAll('[amp-access' + amp_access_not + ']'); + removeDOMElement(...amp_access_not_dom); + } + hideDOMStyle(amp_ads_sel, 6); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +})(); diff --git a/userscript/bpc.it.user.js b/userscript/bpc.it.user.js new file mode 100644 index 0000000..fbcf71d --- /dev/null +++ b/userscript/bpc.it.user.js @@ -0,0 +1,622 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - it +// @version 4.0.9.0 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.it.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.it.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.it/* +// @match *://*.eastwest.eu/* +// @match *://*.ilsole24ore.com/* +// @match *://*.italian.tech/* +// @match *://*.quotidiano.net/* +// @match *://*.tuttosport.com/* +// ==/UserScript== + +(function() { + //'use strict'; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var it_gedi_domains = ['huffingtonpost.it', 'italian.tech', 'lastampa.it', 'lescienze.it', 'moda.it', 'repubblica.it']; +var it_ilmessaggero_domains = ['corriereadriatico.it', 'ilgazzettino.it', 'ilmattino.it', 'ilmessaggero.it', 'quotidianodipuglia.it']; +var it_quotidiano_domains = ['ilgiorno.it', 'ilrestodelcarlino.it', 'iltelegrafolivorno.it', 'lanazione.it', 'quotidiano.net']; + +if (matchDomain('corriere.it')) { + if (window.location.pathname.endsWith('_amp.html')) { + amp_unhide_subscr_section(''); + } else { + if (window.location.pathname.includes('_preview.shtml') && !window.location.pathname.startsWith('/podcast/')) { + window.setTimeout(function () { + window.location.href = window.location.pathname.replace('_preview.shtml', '.shtml'); + }, 500); + } + } +} + +else if (matchDomain('corrieredellosport.it')) { + if (!window.location.pathname.startsWith('/amp/')) { + amp_redirect('div[class^="MainTextTruncated_paragraph__"]'); + let ads = 'div[class^="AdUnit_placeholder"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('eastwest.eu')) { + let paywall = document.querySelector('.paywall'); + if (paywall) { + paywall.removeAttribute('style'); + paywall.classList.remove('paywall'); + let intro = document.querySelectorAll('div#testo_articolo > p, div#testo_articolo > h3'); + let offerta = document.querySelectorAll('div.offerta_abbonamenti'); + removeDOMElement(...intro, ...offerta); + } +} + +else if (matchDomain('editorialedomani.it')) { + if (window.location.search.startsWith('?amp=1')) + ampToHtml(); +} + +else if (matchDomain('gazzetta.it')) { + if (window.location.pathname.endsWith('_preview.shtml')) { + let paywall = document.querySelector('section.bck-freemium__wall'); + if (paywall) { + removeDOMElement(paywall); + if (!window.location.search.startsWith('?reason=unauthenticated')) { + window.location.href = window.location.pathname.replace('_preview', '') + '?gaa_at=g'; + } else { + let json_script = getArticleJsonScript(); + let header = 'div.content > h2'; + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody.replace(/(\s{3}| )/g, '\r\n\r\n'); + let content = document.querySelector('div.content > p.has-first-letter'); + if (json_text && content) { + let content_new = document.createElement('p'); + content_new.innerText = json_text; + content.parentNode.replaceChild(content_new, content); + let article_body = document.querySelector('section.body-article'); + if (article_body) + article_body.style = 'height: auto;'; + } else + header_nofix(header); + } + } else + header_nofix(header); + } + } + } else if (window.location.pathname.endsWith('_amp.shtml')) + ampToHtml(); +} + +else if (matchDomain('ilfattoquotidiano.it')) { + if (window.location.pathname.endsWith('/amp/')) { + amp_unhide_subscr_section('div#_4sVideoContainer, div#post-consent-ui'); + let logo = document.querySelector('a > amp-img[src$="/svg/logo-tablet.svg"]'); + if (logo) { + let logo_new = document.createElement('img'); + logo_new.src = logo.getAttribute('src').replace('/svg/logo-tablet.svg', '/fq-www/logo-ifq-it.svg'); + logo_new.height = logo.getAttribute('height'); + logo_new.width = logo.getAttribute('width'); + logo.parentNode.replaceChild(logo_new, logo); + } + } else { + let paywall = document.querySelector('div#ifq-paywall-metered'); + if (paywall) { + removeDOMElement(paywall); + let art_hidden = document.querySelector('article[id].cropped'); + if (art_hidden) + art_hidden.classList.remove('cropped'); + } else + header_nofix('div.ifq-post__content', 'div#ifq-paywall-hard'); + } + let ads = 'div.adv, div.st-adunit, div[id^="ifq-adv-"], div.mgbox'; + hideDOMStyle(ads); + let ad_units = document.querySelectorAll('div[id^="div-flx-"] > div[data-adunit]'); + for (let elem of ad_units) + hideDOMElement(elem.parentNode); +} + +else if (matchDomain('ilfoglio.it')) { + if (window.location.pathname.endsWith('/amp/')) { + amp_unhide_subscr_section('amp-ad, [class^="adv-"], div#gmpVideoContainer'); + } else { + amp_redirect('div.paywall'); + let ads = '.advertisement'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('ilmanifesto.it')) { + let paywall = document.querySelector('div[class*="before:bg-gradient-to-t"]'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('article div.prose'); + if (article) { + let filter = /^self\.__next_f\.push\(\[1,"/; + let scripts = document.querySelectorAll('script:not([src], [type])'); + for (let script of scripts) { + if (script.text.match(filter) && script.text.includes('canonical_url')) { + if (!script.text.includes(window.location.href)) + refreshCurrentTab(); + break; + } + } + let source_script = getSourceJsonScript(/^self\.__next_f\.push\(\[1,"\\u003c/); + if (source_script) { + let source_text = source_script.text.split(filter)[1].split('"])')[0].replace(/\\u003c/g, '<').replace(/\\u003e/g, '>').replace(/\\"/g, '"').replace(/\\n/g, ''); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + source_text + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let figures = article_new.querySelectorAll('figure[style]'); + for (let elem of figures) + elem.removeAttribute('style'); + article.innerHTML = ''; + article.appendChild(article_new); + } + } + } +} + +else if (matchDomain('ilsole24ore.com')) { + header_nofix('div.paywalltext', 'div.lock'); + waitDOMAttribute('body', 'BODY', 'style', node => node.removeAttribute('style'), true); + let ads = 'div.background-adv, div.abox, div.ob-smartfeed-wrapper, div.s24_adb'; + hideDOMStyle(ads); +} + +else if (domain = matchDomain(['iltirreno.it', 'lanuovasardegna.it']) || matchDomain(['gazzettadimodena.it', 'gazzettadireggio.it', 'lanuovaferrara.it'])) { + if (window.location.pathname.includes('/news/')) { + let paywall = document.querySelector('span > img[alt*="Paywall"]'); + if (paywall) { + let header = paywall.parentNode.parentNode; + header_nofix(header); + removeDOMElement(paywall.parentNode); + } + window.setTimeout(function () { + let banners = document.querySelectorAll('div.MuiSnackbar-root, div.css-16cchgy'); + removeDOMElement(...banners); + }, 1000); + } + setCookie(/__mtr$/, '', domain, '/', 0); +} + +else if (matchDomain(it_ilmessaggero_domains)) { + if (window.location.pathname.toLowerCase().includes('/amp/')) { + amp_unhide_subscr_section(); + } else { + let noscroll = document.querySelector('html[style]'); + if (noscroll) + noscroll.removeAttribute('style'); + let ads = 'div.adv_banner, div.inread_adv, div#outbrain'; + hideDOMStyle(ads); + } +} + +else if (matchDomain(it_quotidiano_domains)) { + if (window.location.pathname.endsWith('/amp') || window.location.search.startsWith('?amp')) { + amp_unhide_access_hide('="c.customGranted"', '="NOT c.customGranted"', 'amp-fx-flying-carpet, .watermark-adv, .amp__watermark'); + } else { + amp_redirect('div[data-testid="paywall-container"], div[class^="Paywall_paywall_"]', '', window.location.pathname + '/amp'); + let ads = 'div[id^="div-gpt-ad"]'; + hideDOMStyle(ads); + } +} + +else if (matchDomain('italiaoggi.it')) { + let paywall = document.querySelector('div.boxAbb'); + if (paywall) { + let overlay = document.querySelector('div.article-locked-overlay'); + removeDOMElement(paywall, overlay); + let article_locked = document.querySelector('div.article-locked'); + if (article_locked) { + article_locked.classList.remove('article-locked'); + let json_script = getArticleJsonScript(); + if (json_script) { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json.articleBody; + let content = article_locked.querySelector('section'); + if (json_text && content) { + let parser = new DOMParser(); + json_text = json_text.replace(/&apos;/g, "'").replace(/;/g, ''); + let doc = parser.parseFromString('
' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + content.parentNode.replaceChild(content_new, content); + } + } + } + } + } +} + +else if (domain = matchDomain(it_gedi_domains)) { + let amp = window.location.pathname.match(/\/amp(\/)?$/); + if (matchDomain(['huffingtonpost.it', 'lastampa.it'])) { + if (window.location.pathname.includes('/news/')) { + if (!amp) { + let paywall = document.querySelector('iframe[id^="__limio_frame"]'); + if (paywall) { + setCookie(/blaize_session/, '', domain, '/', 0); + refreshCurrentTab(false); + } + let modal = document.querySelector('aside#widgetDP'); + removeDOMElement(modal); + } else + ampToHtml(); + } + } else if (matchDomain('repubblica.it')) { + if (!amp) + amp_redirect('iframe[id^="__limio_frame"]', '', window.location.pathname + 'amp/'); + else { + amp_unhide_subscr_section(); + if (!mobile) + addStyle('img.i-amphtml-fill-content {min-height: 50% !important; min-width: 50% !important;}'); + let paywall = document.querySelector('div.not_granted__content'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.story__wrapper'); + if (article) { + let url = window.location.href.split(/[#\?]/)[0].replace(/\/amp\/$/, ''); + article.before(googleSearchToolLink(url)); + } + } + } + } else { + if (!amp) { + let paywall = document.querySelector('div#ph-paywall'); + removeDOMElement(paywall); + setCookie(/blaize_session/, '', domain, '/', 0); + } else + ampToHtml(); + } + let ads = 'div[id^="adv"]'; + hideDOMStyle(ads); +} + +else if (matchDomain('milanofinanza.it')) { + let paywall = document.querySelector('div.paywall-content, section.payment'); + if (paywall) { + removeDOMElement(paywall); + let json_script = getArticleJsonScript(); + if (json_script) { + try { + let json = JSON.parse(json_script.text.replace(/!=/g, '').replace(/!function\(\){[^!]+(\(\);|0;[a-z])/g, '')); + if (json) { + let json_text = parseHtmlEntities(json.articleBody); + let article = document.querySelector('div.article-locked'); + if (json_text && article) { + article.innerHTML = ''; + let article_new = document.createElement('p'); + article_new.innerText = json_text; + article.appendChild(article_new); + } + } + } catch (err) { + console.log(err); + header_nofix('div.article-locked', '', 'BPC > no fix (json-error)'); + } + } + } +} + +else if (matchDomain('sky.it')) { + let paywall = document.querySelector('div.c-paywall'); + if (paywall && window.location.hostname.match(/^(sport|tg24)\./)) { + removeDOMElement(paywall); + let article = document.querySelector('div > div.c-article-abstract'); + let json_script = getArticleJsonScript(); + if (article && json_script) { + try { + let json = JSON.parse(json_script.text); + if (json) { + let json_text = json[0].articleBody; + if (json_text) { + let par_new = document.createElement('p'); + par_new.innerText = json_text; + article.parentNode.appendChild(par_new); + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div.c-adv'; + hideDOMStyle(ads); +} + +else if (matchDomain('tuttosport.com')) { + if (!window.location.pathname.startsWith('/amp/')) { + let paywall = document.querySelector('div[class^="MainTextTruncated_premium"]'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div > div[class^="MainTextTruncated_truncatedContent"]'); + if (article) { + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.news && json.props.pageProps.news.content) { + let url_next = json.props.pageProps.news.href; + if (url_next && !window.location.pathname.includes(url_next)) + window.location.href = window.location.pathname; + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json.props.pageProps.news.content + '
', 'text/html'); + let article_new = doc.querySelector('div'); + article.parentNode.replaceChild(article_new, article); + } else + refreshCurrentTab(); + } catch (err) { + console.log(err); + } + } + } + } + let ads = 'div[class^="AdUnit_"]'; + hideDOMStyle(ads); + } +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function matchCookies(name) { + return document.cookie.split(';').filter(x => x.trim().match(name)).map(y => y.split('=')[0].trim()) +} + +function setCookie(names, value, domain = '', path = '/', days = 0) { + var max_age = days * 24 * 60 * 60; + let ck_names = Array.isArray(names) ? names : []; + if (names instanceof RegExp) + ck_names = matchCookies(names); + else if (typeof names === 'string') + ck_names = [names]; + for (let ck_name of ck_names) { + document.cookie = ck_name + "=" + (value || "") + (domain ? "; domain=" + domain : '') + (path ? "; path=" + path : '') + "; max-age=" + max_age; + } + window.localStorage.clear(); +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function amp_iframes_replace(weblink = false, source = '') { + let amp_iframes = document.querySelectorAll('amp-iframe' + (source ? '[src*="' + source + '"]' : '')); + let par, elem; + for (let amp_iframe of amp_iframes) { + if (!weblink) { + if (amp_iframe.offsetHeight > 10) { + elem = document.createElement('iframe'); + elem.src = amp_iframe.getAttribute('src').replace(/^http:/, 'https:'); + elem.style = 'height: ' + amp_iframe.offsetHeight + 'px; width: 100%; border: 0px;'; + if (amp_iframe.getAttribute('sandbox')) + elem.sandbox = amp_iframe.getAttribute('sandbox'); + amp_iframe.parentNode.replaceChild(elem, amp_iframe); + } + } else { + par = document.createElement('p'); + par.style = 'margin: 20px 0px;'; + elem = document.createElement('a'); + elem.innerText = 'Media-link'; + elem.setAttribute('href', amp_iframe.getAttribute('src')); + elem.setAttribute('target', '_blank'); + par.appendChild(elem); + amp_iframe.parentNode.replaceChild(par, amp_iframe); + } + } +} + +function amp_redirect_not_loop(amphtml) { + if (!check_loop()) { + window.location.href = amphtml.href; + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > redirect to amp failed (disable amp-to-html extension/add-on or browser setting)'); + } +} + +function amp_redirect(paywall_sel, paywall_action = '', amp_url = '') { + let paywall = document.querySelectorAll(paywall_sel); + let amphtml = document.querySelector('head > link[rel="amphtml"]'); + if (!amphtml && amp_url) + amphtml = {href: amp_url}; + if (paywall.length && amphtml) { + clearPaywall(paywall, paywall_action); + amp_redirect_not_loop(amphtml); + } +} + +function amp_unhide_subscr_section(amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let preview = document.querySelectorAll('[subscriptions-section="content-not-granted"]'); + removeDOMElement(...preview); + let subscr_section = document.querySelectorAll('[subscriptions-section="content"]'); + for (let elem of subscr_section) + elem.removeAttribute('subscriptions-section'); + hideDOMStyle(amp_ads_sel, 5); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function amp_unhide_access_hide(amp_access = '', amp_access_not = '', amp_ads_sel = '', replace_iframes = true, amp_iframe_link = false, source = '') { + let access_hide = document.querySelectorAll('[amp-access' + amp_access + '][amp-access-hide]:not([amp-access="error"], [amp-access^="message"], .piano)'); + for (let elem of access_hide) + elem.removeAttribute('amp-access-hide'); + if (amp_access_not) { + let amp_access_not_dom = document.querySelectorAll('[amp-access' + amp_access_not + ']'); + removeDOMElement(...amp_access_not_dom); + } + hideDOMStyle(amp_ads_sel, 6); + if (replace_iframes) + amp_iframes_replace(amp_iframe_link, source); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +function getSourceJsonScript(filter, attributes = ':not([src], [type])') { + if (typeof filter === 'string') + filter = new RegExp(filter); + let scripts = document.querySelectorAll('script' + attributes); + for (let script of scripts) { + if (script.text.match(filter)) + return script; + } + return false; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function parseHtmlEntities(encodedString) { + let parser = new DOMParser(); + let doc = parser.parseFromString('', 'text/html'); + let dom = doc.querySelector('textarea'); + return dom.value; +} + +})(); diff --git a/userscript/bpc.nl.user.js b/userscript/bpc.nl.user.js new file mode 100644 index 0000000..4428cf5 --- /dev/null +++ b/userscript/bpc.nl.user.js @@ -0,0 +1,1120 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - nl/be +// @version 4.0.9.0 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.nl.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.nl.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.nl/* +// @match *://*.artsenkrant.com/* +// @match *://*.businessam.be/* +// @match *://*.demorgen.be/* +// @match *://*.doorbraak.be/* +// @match *://*.flair.be/nl/* +// @match *://*.gva.be/* +// @match *://*.hbvl.be/* +// @match *://*.hln.be/* +// @match *://*.humo.be/* +// @match *://*.knack.be/* +// @match *://*.kw.be/* +// @match *://*.libelle.be/* +// @match *://*.nieuwsblad.be/* +// @match *://*.projectcargojournal.com/* +// @match *://*.railfreight.cn/* +// @match *://*.railfreight.com/* +// @match *://*.railtech.be/* +// @match *://*.railtech.com/* +// @match *://*.standaard.be/* +// @match *://*.taxipro.be/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var be_mediahuis_domains = ['gva.be', 'hbvl.be', 'nieuwsblad.be', 'standaard.be']; +var be_roularta_domains = ['artsenkrant.com', 'beleggersbelangen.nl', 'flair.be', 'knack.be', 'kw.be', 'libelle.be']; +var nl_dpg_adr_domains = ['ad.nl', 'bd.nl', 'bndestem.nl', 'destentor.nl', 'ed.nl', 'gelderlander.nl', 'pzc.nl', 'tubantia.nl']; +var nl_dpg_media_domains = ['demorgen.be', 'flair.nl', 'humo.be', 'libelle.nl', 'margriet.nl', 'parool.nl', 'trouw.nl', 'volkskrant.nl']; +var nl_mediahuis_region_domains = ['gooieneemlander.nl', 'haarlemsdagblad.nl', 'ijmuidercourant.nl', 'leidschdagblad.nl', 'limburger.nl', 'noordhollandsdagblad.nl']; + +if (matchDomain(be_mediahuis_domains)) { + window.setTimeout(function () { + let video = document.querySelector('div.video, div[data-testid="article-video"]'); + func_post = function () { + let article = document.querySelector(article_sel); + if (article) { + if (video) { + let video_new = article.querySelector('div[id$="-streamone"], div[id^="video-player-"], div[id^="player_"]'); + if (video_new && video_new.parentNode) + video_new.parentNode.replaceChild(video, video_new); + else { + let header = article.querySelector('h1'); + let br = document.createElement('br'); + if (header) + header.after(br, video, br); + } + } + if (mobile) { + if (article_main) { + let div_next = document.querySelector('div[id="__next"]'); + if (div_next) + article.style.width = div_next.offsetWidth + 'px'; + } + let lazy_images = article.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + let figures = article.querySelectorAll('figure div'); + for (let elem of figures) { + elem.removeAttribute('style'); + let svg = elem.querySelector('svg'); + removeDOMElement(svg); + } + } + let pars = article.querySelectorAll('div[style*="font-size"]'); + if (pars.length < 5) + article.before(googleSearchToolLink(url)); + } + } + let url = window.location.href; + let paywall_sel = 'head > meta[name$="article_ispaidcontent"][content="true"]'; + let article_sel = 'main > article'; + let article_main = document.querySelector(article_sel); + if (!article_main) + article_sel = 'article[role="article"] div[id]'; + getArchive(url, paywall_sel, '', article_sel); + let popup = document.querySelector('div[data-testid="close-popup-button"]'); + if (popup) + popup.click(); + }, 1500); +} + +else if (matchDomain('businessam.be')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.text-gradient'); + if (article) { + let scripts = document.querySelectorAll('script:not([src]):not([type])'); + let content_script; + for (let script of scripts) { + if (script.text.match(/window\.fullcontent64\s?=\s?"/)) { + content_script = script; + break; + } + } + if (content_script) { + try { + let content = decode_utf8(atob(content_script.text.split(/window\.fullcontent64\s?=\s?"/)[1].split('";')[0])); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + content + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.parentNode.replaceChild(content_new, article); + } catch (err) { + console.log(err); + } + } + } + } +} + +else if (matchDomain('businessinsider.nl')) { + getJsonUrl('div.piano-article__paywall', '', 'div.piano-article__content'); +} + +else if (matchDomain('doorbraak.be')) { + let paywall_sel = 'div.paywall'; + let paywall = document.querySelector(paywall_sel); + if (paywall) { + removeDOMElement(paywall); + waitDOMElement(paywall_sel, 'DIV', removeDOMElement, false); + let json_script = document.querySelector('script#__NUXT_DATA__'); + if (json_script) { + try { + if (!json_script.text.substr(0, 500).includes(window.location.pathname)) + refreshCurrentTab(); + let json = JSON.parse(json_script.text); + json = json.filter(x => typeof x === 'string' && x.startsWith('

')); + let json_text = json[0]; + if (json_text) { + let parser = new DOMParser(); + let doc = parser.parseFromString('

' + json_text + '
', 'text/html'); + let content_new = doc.querySelector('div'); + let article = document.querySelector('div > div.prose'); + if (article) { + article.appendChild(content_new); + } + } + } catch (err) { + console.log(err); + } + } + } +} + +else if (matchDomain(be_roularta_domains)) { + if (matchDomain('beleggersbelangen.nl')) { + let paywall = document.querySelector('div.unlimited-access'); + if (paywall) { + removeDOMElement(paywall); + let no_account = document.querySelector('div.no-account'); + if (no_account) + no_account.classList.remove('no-account'); + let content_inner = document.querySelector('div.content-inner[style]'); + if (content_inner) + content_inner.removeAttribute('style'); + } + } else { + let paywall = document.querySelector('div[id*="wall-modal"]'); + if (paywall) { + removeDOMElement(paywall); + let html = document.querySelector('html[class]'); + if (html) + html.removeAttribute('class'); + function roularta_noscroll(node) { + node.removeAttribute('style'); + node.removeAttribute('class'); + } + waitDOMAttribute('html', 'html', 'class', roularta_noscroll, true); + let intro = document.querySelectorAll('div.article-body > p, div.article-body > style'); + removeDOMElement(...intro); + let locked = document.querySelector('body.locked'); + if (locked) + locked.classList.remove('locked'); + } + if (!window.navigator.userAgent.toLowerCase().includes('chrome') && !matchDomain(['artsenkrant.com', 'kw.be']) && window.location.href.match(/\/(\w+-){2,}/)) { + let lazy_images = document.querySelectorAll('img[src^="data:image/"][data-lazy-src]'); + for (let elem of lazy_images) { + elem.src = elem.getAttribute('data-lazy-src'); + } + } + } + let ads = 'div.rmgAd, div.c-header__ad'; + hideDOMStyle(ads); +} + +else if (matchDomain('ftm.nl')) { + let videos = document.querySelectorAll('div.body > div.video-pp'); + for (let video of videos) { + let video_id_dom = video.querySelector('a.video[data-youtube-id]'); + if (video_id_dom) { + video_new = document.createElement('iframe'); + video_new.src = 'https://www.youtube.com/embed/' + video_id_dom.getAttribute('data-youtube-id'); + video_new.style = 'width: 95%; height: 400px; margin: 0px 20px;'; + video.parentNode.replaceChild(video_new, video); + } + } + let audio_controls = document.querySelectorAll('audio[controls][style]'); + for (let elem of audio_controls) + elem.removeAttribute('style'); + document.querySelectorAll('div.foldable').forEach(e => e.classList.remove('foldable')); + let banners = 'div.banner-pp'; + hideDOMStyle(banners); +} + +else if (matchDomain('groene.nl')) { + let url = window.location.href; + getArchive(url, 'div#closed-block', '', 'article'); + let more = pageContains('div.wrapper > h2', 'Verder lezen?'); + if (more.length) { + let link_text = 'https://www.groene.nl/populair'; + let a_link = document.createElement('a'); + a_link.href = link_text; + a_link.innerText = 'BPC > ' + link_text.split('www.')[1]; + more[0].parentNode.append(document.createElement('br'), a_link); + } +} + +else if (matchDomain(['lc.nl', 'dvhn.nl']) || document.querySelector('head > link[href*=".ndcmediagroep.nl/"]')) { + let paywall = document.querySelector('div.signupPlus, div.pw-wrapper'); + if (paywall) { + let intro = document.querySelector('div.startPayWall'); + let html = document.documentElement.outerHTML; + if (html.includes('window.__NUXT__=')) { + removeDOMElement(paywall, intro); + try { + let json = html.split('window.__NUXT__=')[1].split('')[0].trim(); + let json_match = json.includes('type:"article",'); + if (json_match) { + let path_match = window.location.pathname.match(/-(\d+)\./); + if (path_match) { + let article_id = path_match[1]; + json_match = json.includes(',id:"' + article_id + '",'); + if (!json_match && json.match(/[(,]null,/)) { + let art_match = json.split(/[(,]null,/)[1].match(new RegExp('-' + article_id + '\\.', 'g')); + json_match = art_match && art_match.length > 1; + } + } + } + if (!json_match) + refreshCurrentTab(); + else if (json.includes(',body:')) { + let intro; + let intro_match = json.match(/,leadtext_raw:"([^"]+)",/); + if (intro_match) { + intro = document.createElement('p'); + intro.innerText = intro_match[1]; + intro.style = 'font-weight: bold;'; + } + let json_text = json.split(',body:')[1].split(/,(leadText|brand_key|tts|pianoKeywords):/)[0].replace(/([{,])(\w+)(?=:(["\{\[]|[\w$]{1,2}[,\}]))/g, "$1\"$2\"").replace(/(Image\\":)(\d)([,}])/g, '$1\\"$2\\"$3').replace(/\":(\[)?([\w\$\.]+)([\]},])/g, "\":$1\"$2\"$3"); + let article = document.querySelector('div.content'); + if (article) { + article.innerHTML = ''; + if (intro) + article.appendChild(intro); + let pars = JSON.parse(json_text); + function addParText(elem, par_text, add_br = false) { + if (par_text) { + if (par_text.length <= 2) + par_text = ' ... '; + let span = document.createElement('span'); + span.innerText = par_text; + elem.appendChild(span); + if (add_br) + elem.appendChild(document.createElement('br')); + } + } + function addLink(elem, link_text, href, add_br = false) { + let par_link = document.createElement('a'); + par_link.href = href; + par_link.innerText = link_text; + elem.appendChild(par_link); + if (add_br) + elem.appendChild(document.createElement('br')); + } + function addImage(elem, child) { + let figure = document.createElement('figure'); + let img = document.createElement('img'); + img.src = child.relation.href; + figure.appendChild(img); + if (child.relation.caption && child.relation.caption.length > 2) { + let caption = document.createElement('figcaption'); + caption.innerText = child.relation.caption; + figure.appendChild(caption); + } + elem.appendChild(figure); + } + function addChildren(elem, children, add_br = false) { + for (let child of children) { + if (child.text) { + addParText(elem, child.text, add_br); + } else if (child.relation && (child.type === 'img' || child.relation.caption) && child.relation.href) { + let img_par = document.createElement('p'); + addImage(img_par, child); + elem.appendChild(img_par); + } else if (child.relation && child.relation.link && child.relation.link.length > 2) { + addLink(elem, decodeURIComponent(child.relation.title.length > 2 ? child.relation.title : child.relation.link), child.relation.link); + } else if (child.children && child.children[0]) { + if (child.children[0].text) { + if ((child.href && child.href.length > 2) || (child.relation && child.relation.follow && child.relation.follow.url)) { + if (child.children[0].text.length > 2) + addLink(elem, child.children[0].text, child.href || child.relation.follow.url, add_br); + } else + addParText(elem, child.children[0].text); + } else + addChildren(elem, child.children); + } + } + } + for (let par of pars) { + let elem = document.createElement('p'); + if (par.code) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + par.code + '
', 'text/html'); + elem = doc.querySelector('div'); + } else if (par.insertbox_head || par.insertbox_text) { + if (par.insertbox_head && par.insertbox_head.length > 2) + addParText(elem, par.insertbox_head, true); + if (par.insertbox_text) { + for (let item of par.insertbox_text) { + if (item.children) + addChildren(elem, item.children, true); + } + } + } else if (par.text) { + addParText(elem, par.text); + } else if (par.children) { + addChildren(elem, par.children); + } else if (par.typename.length > 2) + console.log(par); + if (elem.hasChildNodes()) { + article.appendChild(elem); + } + } + } + } + } catch (err) { + console.log(err); + } + } + } + let ads = 'div.top__ad, div.marketingblock-article'; + hideDOMStyle(ads); +} + +else if (matchDomain('linda.nl')) { + window.setTimeout(function () { + let paywall = document.querySelector('div.premium-login-box_login-box'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('article'); + if (article) { + let filter = /^window\.__INITIAL_PROPS__\s?=\s?/; + let json_script = getSourceJsonScript(filter); + if (json_script) { + try { + let json = JSON.parse(json_script.text.split(filter)[1]); + if (json) { + let slug = json.slug; + if ((slug && !window.location.pathname.includes(slug)) || !json.viewData) + refreshCurrentTab(); + if (json && json.viewData.article && json.viewData.article.modules) { + let modules = json.viewData.article.modules; + for (let elem of modules) { + let type = elem.acf_fc_layout; + if (type) { + let item = document.createElement('div'); + if (['body_text', 'intro', 'quote'].includes(type)) { + if (elem.text) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + (elem.title ? elem.title : '') + elem.text.replace(/\r\n/g, '
') + '
', 'text/html'); + item = doc.querySelector('div'); + if (type === 'intro') { + let intro = item.querySelector('p'); + if (intro) + intro.style = 'font-weight: bold; '; + } else if (type === 'quote') + item.style['text-align'] = 'center'; + article.append(item); + } + } else if (type === 'image') { + let elem_images = elem.images_portrait || elem.images_landscape; + if (elem_images && elem_images.length) { + for (let img of elem_images) { + let url = img.image.sizes.large; + let caption_text = img.credits ? img.credits.replace(/(\n|<[^<]*>)/g, '') : ''; + item = makeFigure(url, caption_text, {style: 'width: 100%;'}); + article.append(item); + } + } + } else + console.log(elem); + } + } + } else + header_nofix('div.article-content_base'); + } + } catch (err) { + console.log(err); + } + } + } + } + }, 1000); +} + +else if (matchDomain(nl_dpg_adr_domains.concat(['hln.be']))) { + let sub_sel = 'article[id^="PURCHASE"]'; + let sub = document.querySelector(sub_sel + ' > button'); + if (sub) + sub.click(); + func_post = function () { + let shades = document.querySelectorAll('div[style*="background-color"][style*=";width"]'); + for (let elem of shades) + elem.style.width = '85%'; + let lazy_images = document.querySelectorAll('picture img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + let widgets = document.querySelectorAll('div[old-src^="https://valley.ad.nl/widgets/"]:not([src])'); + for (let elem of widgets) { + let iframe = document.createElement('iframe'); + iframe.src = elem.getAttribute('old-src'); + iframe.style = 'height: 400px; border: none;'; + elem.parentNode.replaceChild(iframe, elem); + } + header_nofix('footer', sub_sel, 'BPC > no archive-fix'); + } + let article_sel = 'div#remaining-paid-content'; + let url = window.location.href; + getArchive(url, article_sel + '[data-reduced="true"]', {rm_attrib: 'data-reduced'}, article_sel); +} + +else if (matchDomain(nl_dpg_media_domains)) { + setCookie('TID_ID', '', '', '/', 0); + let banners = 'aside[data-temptation-position^="ARTICLE_"], div[data-temptation-position^="PAGE_"], div[class^="ad--"], div[id^="article_paragraph_"]'; + hideDOMStyle(banners); + window.setTimeout(function () { + let elem_hidden = document.querySelectorAll('[class^="artstyle__"][style="display: none;"]'); + for (let elem of elem_hidden) + elem.removeAttribute('style'); + }, 500); +} + +else if (matchDomain(nl_mediahuis_region_domains)) { + let video = document.querySelector('div.video, div[data-testid="article-video"]'); + func_post = function () { + let article = document.querySelector(article_sel); + if (article) { + if (video) { + let video_new = article.querySelector('div[id$="-streamone"], div[id^="video-player-"], div[id^="player_"]'); + if (video_new && video_new.parentNode) + video_new.parentNode.replaceChild(video, video_new); + else { + let header = article.querySelector('h1'); + let br = document.createElement('br'); + if (header) + header.after(br, video, br); + } + } + if (mobile) { + let div_next = document.querySelector('div[id="__next"]'); + if (div_next) + article.style.width = div_next.offsetWidth - 20 + 'px'; + let lazy_images = article.querySelectorAll('figure img[loading="lazy"][style]'); + for (let elem of lazy_images) + elem.style = 'width: 95%;'; + let figures = article.querySelectorAll('figure div'); + for (let elem of figures) { + elem.removeAttribute('style'); + let svg = elem.querySelector('svg'); + removeDOMElement(svg); + } + } + if (article.innerText.length < 1000) { + let header = article.querySelector('hgroup'); + if (header) + header.before(googleSearchToolLink(url)); + } + } + } + let paywall_sel = 'head > meta[name$="article_ispaidcontent"][content="true"]'; + let article_sel = 'main > article'; + let url = window.location.href; + getArchive(url, paywall_sel, '', article_sel); + window.setTimeout(function () { + let noscroll = document.querySelector('body[class*="style_disable-scroll-popup"]'); + if (noscroll) + noscroll.style = 'position: static !important; overflow: visible !important'; + }, 500); + let banners = 'div[class*="style_popover"]';; + hideDOMStyle(banners); +} + +else if (matchDomain('nrc.nl')) { + setCookie('counter', '', '', '/', 0, true); + let banners = document.querySelectorAll('div[id$="modal__overlay"], div.header__subscribe-bar, div.banner'); + removeDOMElement(...banners); +} + +else if (matchDomain('telegraaf.nl')) { + let premium = document.querySelector('div[class^="Article__premium"] > label, div.PopupWrapper__paywall'); + let paywall = document.querySelector('data-hydrate[data-name="PaywallHandler"]'); + let article = document.querySelector('section > div.DetailArticleImage') || document.querySelector('section > p.Article__intro'); + if (paywall && window.location.pathname.startsWith('/video/')) + removeDOMElement(paywall); + if (premium && paywall && article) { + let div_main = document.createElement('div'); + div_main.style = 'margin: 20px 0px;'; + let div_elem = document.createElement('div'); + let par_style = 'font-weight: normal; font-size: 16px; line-height: 1.5;'; + function show_text(window_text, div_main) { + window_text = window_text.split('window.telegraaf.')[0].replace(/(^\s?=\s?"|";$|\\")/gm, '').replace(/\\\\u003c/gm, '<'); + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + window_text + '
', 'text/html'); + let article_new = doc.querySelector('div'); + let pars = article_new.querySelectorAll('p'); + for (let par of pars) + par.style = 'margin: 10px 0px;'; + let placeholders = article_new.querySelectorAll('div.TeaserImage__placeholder'); + for (let elem of placeholders) + elem.removeAttribute('class'); + let media = article_new.querySelectorAll('div.NewsletterForm, div.DetailArticleVideo'); + removeDOMElement(...media); + let twitter_quotes = article_new.querySelectorAll('blockquote.twitter-tweet > a[href]'); + for (let elem of twitter_quotes) { + if (!elem.innerText) { + elem.innerText = elem.href; + elem.target = '_blank'; + } + } + if (mobile) { + let art_images = article_new.querySelectorAll('div.DetailArticleImage > div > img'); + for (let elem of art_images) + elem.style.width = '95%'; + } + let error_iframes = article_new.querySelectorAll('iframe[allow*="fullscreen"][allowfullscreen]'); + for (let iframe of error_iframes) + iframe.removeAttribute('allowfullscreen'); + div_main.appendChild(article_new); + } + let window_script = document.querySelector('script#scr-tlg-body'); + if (window_script && window_script.text.includes('window.telegraaf.articleBodyBlocks')) { + removeDOMElement(paywall); + let window_text = window_script.text.split('window.telegraaf.articleBodyBlocks')[1]; + if (window_text) + show_text(window_text, div_main); + } else { + removeDOMElement(paywall); + let url = window.location.href.split(/[#\?]/)[0]; + fetch(url) + .then(response => { + if (response.ok) { + response.text().then(html => { + if (html.includes('window.telegraaf.articleBodyBlocks')) { + let window_text = html.split('window.telegraaf.articleBodyBlocks')[1].split('')[0]; + if (window_text) + show_text(window_text, div_main); + } + }) + } + }) + } + article.after(div_main); + } + let ads = 'div.WebpushOptin, div[data-ad-position]'; + hideDOMStyle(ads); +} + +else if (matchDomain('vn.nl')) { + let paywall = document.querySelectorAll('section[class^="c-paywall"]'); + if (paywall.length) { + removeDOMElement(...paywall); + let article = document.querySelector('div.c-article-content__container'); + if (article) { + let json_script = document.querySelector('script#__NEXT_DATA__'); + if (json_script) { + try { + let json = JSON.parse(json_script.text); + if (json && json.props.pageProps.article && json.props.pageProps.article.content) { + let parser = new DOMParser(); + let doc = parser.parseFromString('
' + json.props.pageProps.article.content + '
', 'text/html'); + let content_new = doc.querySelector('div'); + article.innerHTML = ''; + article.appendChild(content_new); + } else + refreshCurrentTab(); + } catch (err) { + console.log(err); + } + } + } + let noscroll = document.querySelector('html[class]'); + if (noscroll) + noscroll.removeAttribute('class'); + } +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function urlHost(url) { + if (/^http/.test(url)) { + try { + return new URL(url).hostname; + } catch (e) { + console.log(`url not valid: ${url} error: ${e}`); + } + } + return url; +} + +function matchUrlDomain(domains, url) { + return matchDomain(domains, urlHost(url)); +} + +function setCookie(name, value, domain, path, days, localstorage_hold = false) { + var max_age = days * 24 * 60 * 60; + document.cookie = name + "=" + (value || "") + "; domain=" + domain + "; path=" + path + "; max-age=" + max_age; + if (!localstorage_hold) + window.localStorage.clear(); +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function waitDOMElement(selector, tagName = '', callback, multiple = false) { + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (!tagName || (node.tagName === tagName)) { + if (node.matches(selector)) { + callback(node); + if (!multiple) + this.disconnect(); + } + } + } + } + }).observe(document, { + subtree: true, + childList: true + }); +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function nftLink(url, text_fail = 'BPC > Full article text:\r\n') { + return externalLink(['1ft.io'], 'https://{domain}/{url}', url, text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function getJsonUrlText(article, callback, article_id = '', key = '', url_rest = false, url_slash = false) { + let json_url_dom = document.querySelector('head > link[rel="alternate"][type="application/json"][href]'); + let json_url; + if (json_url_dom) + json_url = json_url_dom.href; + if (!json_url && article_id) + json_url = window.location.origin + '/wp-json/wp/v2/posts/' + article_id; + if (url_rest) + json_url = json_url.replace('/wp-json/', '/?rest_route=/'); + else if (url_slash) + json_url = json_url.replace('/wp-json/', '//wp-json/'); + if (json_url) { + fetch(json_url) + .then(response => { + if (response.ok) { + response.json().then(json => { + try { + let json_text = parseHtmlEntities(!key ? json.content.rendered : getNestedKeys(json, key)); + callback(json_text, article); + } catch (err) { + console.log(err); + } + }); + } + }); + } +} + +function getJsonUrlAdd(json_text, article, art_options = {}) { + let art_type = 'div'; + let art_attrib = ''; + if (Object.keys(art_options).length) { + if (art_options.art_type) + art_type = art_options.art_type; + if (art_options.art_class) + art_attrib += ' class="' + art_options.art_class + '"'; + if (art_options.art_id) + art_attrib += ' id="' + art_options.art_id + '"'; + if (art_options.art_style) + art_attrib += ' style="' + art_options.art_style + '"'; + if (art_options.func_text) + json_text = art_options.func_text(json_text); + } + let parser = new DOMParser(); + let doc = parser.parseFromString('<' + art_type + art_attrib + '>' + json_text + '', 'text/html'); + let article_new = doc.querySelector(art_type); + if (art_options.art_append || !article.parentNode) { + if (!art_options.art_hold) + article.innerHTML = ''; + article.appendChild(article_new); + } else + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); +} + +function getJsonUrl(paywall_sel, paywall_action = '', article_sel, art_options = {}, article_id = '', key = '', url_rest = false, url_slash = false) { + let paywall = document.querySelectorAll(paywall_sel); + let article = document.querySelector(article_sel); + if (paywall.length && article) { + clearPaywall(paywall, paywall_action); + getJsonUrlText(article, (json_text, article) => { + if (json_text && article) + getJsonUrlAdd(json_text, article, art_options); + }, article_id, key, url_rest, url_slash); + } +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function pageContains(selector, text) { + let elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function (element) { + return RegExp(text).test(element.textContent); + }); +} + +function parseHtmlEntities(encodedString) { + let translate_re = /&(nbsp|amp|quot|lt|gt|deg|hellip|laquo|raquo|ldquo|rdquo|lsquo|rsquo|mdash);/g; + let translate = {"nbsp": " ", "amp": "&", "quot": "\"", "lt": "<", "gt": ">", "deg": "°", "hellip": "…", + "laquo": "«", "raquo": "»", "ldquo": "“", "rdquo": "”", "lsquo": "‘", "rsquo": "’", "mdash": "—"}; + return encodedString.replace(translate_re, function (match, entity) { + return translate[entity]; + }).replace(/&#(\d+);/gi, function (match, numStr) { + let num = parseInt(numStr, 10); + return String.fromCharCode(num); + }); +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +})(); diff --git a/userscript/bpc.pl.user.js b/userscript/bpc.pl.user.js new file mode 100644 index 0000000..68fa283 --- /dev/null +++ b/userscript/bpc.pl.user.js @@ -0,0 +1,526 @@ +// ==UserScript== +// @name Bypass Paywalls Clean - pl +// @version 3.9.2.3 +// @description Bypass Paywalls of news sites +// @author magnolia1234 +// @downloadURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.pl.user.js +// @updateURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=userscript/bpc.pl.user.js +// @homepageURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @supportURL https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters +// @license MIT; https://gitflic.ru/project/magnolia1234/bypass-paywalls-clean-filters/blob/raw?file=LICENSE +// @match *://*.auto-swiat.pl/* +// @match *://*.businessinsider.com.pl/* +// @match *://*.forbes.pl/* +// @match *://*.komputerswiat.pl/* +// @match *://*.magazyn-kuchnia.pl/* +// @match *://*.newsweek.pl/* +// @match *://*.onet.pl/* +// @match *://*.parkiet.com/* +// @match *://*.pb.pl/* +// @match *://*.rp.pl/* +// @match *://*.wyborcza.biz/* +// @match *://*.wyborcza.pl/* +// @match *://*.wysokieobcasy.pl/* +// @connect archive.fo +// @connect archive.is +// @connect archive.li +// @connect archive.md +// @connect archive.ph +// @connect archive.vn +// @grant GM.xmlHttpRequest +// ==/UserScript== + +(function() { + //'use strict'; + +var func_post; +var fetch_headers = {}; + +window.setTimeout(function () { + +var domain; +var mobile = window.navigator.userAgent.toLowerCase().includes('mobile'); +var csDoneOnce; +var cs_param = {}; + +var overlay = document.querySelector('body.didomi-popup-open'); +if (overlay) + overlay.classList.remove('didomi-popup-open'); +var ads = 'div.OUTBRAIN, div[id^="taboola-"], div.ad-container, div[class*="-ad-container"], div[class*="_ad-container"], div.arc_ad, div[id^="poool-"], amp-ad, amp-embed[type="mgid"], amp-embed[type="outbrain"], amp-embed[type="taboola"]'; +hideDOMStyle(ads, 10); + +var pl_ringier_domains = ['auto-swiat.pl', 'businessinsider.com.pl', 'forbes.pl', 'komputerswiat.pl', 'newsweek.pl', 'onet.pl']; + +if (matchDomain('pb.pl')) { + let paywall = document.querySelector('div.paywall'); + if (paywall) { + paywall.classList.remove('paywall'); + let article_hidden = paywall.querySelector('section.o-article-content'); + if (article_hidden) + article_hidden.removeAttribute('class'); + let loader = document.querySelector('div.o-piano-template-loader-box'); + removeDOMElement(loader); + } +} + +else if (matchDomain(pl_ringier_domains)) { + if (matchDomain('businessinsider.com.pl')) { + let paywall = document.querySelector('div#content-premium-offer'); + removeDOMElement(paywall); + } + let premium = document.querySelector('div.contentPremium[style]'); + if (premium) { + premium.removeAttribute('class'); + premium.removeAttribute('style'); + } + let ads = 'div.adPlaceholder , div[class^="Ad"][class*="Placeholder_"], div[data-placeholder-caption], div[data-run-module$=".floatingAd"], aside[data-ad-container], aside.adsContainer, [class^="pwAds"], .hide-for-paying, div.onet-ad, div.bottomBar, ad-default'; + hideDOMStyle(ads); +} + +else if (matchDomain(['rp.pl', 'parkiet.com'])) { + let paywall = document.querySelector('div.paywallComp'); + if (paywall) { + removeDOMElement(paywall); + let article = document.querySelector('div.article--content'); + if (article) { + let url = window.location.href; + article.firstChild.before(googleSearchToolLink(url)); + } + } +} + +else if (matchDomain(['wyborcza.biz', 'wyborcza.pl', 'wysokieobcasy.pl', 'magazyn-kuchnia.pl'])) { + let url = window.location.href; + func_post = function () { + let empty_spans = document.querySelectorAll('figure > a > span:empty'); + removeDOMElement(...empty_spans); + } + if (matchDomain(['wyborcza.biz', 'wyborcza.pl'])) + getArchive(url, 'div.article--content-fadeout', {rm_attrib: 'class'}, 'div.container[class*="pt"]', '', 'div.body > div:not([style*="background-color:"]):not([old-position])'); + else + getArchive(url, 'section.fade-out-article', {rm_attrib: 'class'}, 'article'); + let ads = 'div[id^="adUnit"], div[id^="ads-"]'; + hideDOMStyle(ads); +} + +}, 1000); + +// General Functions + +function matchDomain(domains, hostname) { + var matched_domain = false; + if (!hostname) + hostname = window.location.hostname; + if (typeof domains === 'string') + domains = [domains]; + domains.some(domain => (hostname === domain || hostname.endsWith('.' + domain)) && (matched_domain = domain)); + return matched_domain; +} + +function urlHost(url) { + if (/^http/.test(url)) { + try { + return new URL(url).hostname; + } catch (e) { + console.log(`url not valid: ${url} error: ${e}`); + } + } + return url; +} + +function matchUrlDomain(domains, url) { + return matchDomain(domains, urlHost(url)); +} + +function setCookie(name, value, domain, path, days, localstorage_hold = false) { + var max_age = days * 24 * 60 * 60; + document.cookie = name + "=" + (value || "") + "; domain=" + domain + "; path=" + path + "; max-age=" + max_age; + if (!localstorage_hold) + window.localStorage.clear(); +} + +function removeDOMElement(...elements) { + for (let element of elements) { + if (element) + element.remove(); + } +} + +function hideDOMElement(...elements) { + for (let element of elements) { + if (element) + element.style = 'display:none !important;'; + } +} + +function hideDOMStyle(selector, id = 1) { + let style = document.querySelector('head > style#ext'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'ext' + id; + sheet.innerText = selector + ' {display: none !important;}'; + document.head.appendChild(sheet); + } +} + +function addStyle(css, id = 1) { + let style = document.querySelector('head > style#add'+ id); + if (!style && document.head) { + let sheet = document.createElement('style'); + sheet.id = 'add' + id; + sheet.innerText = css; + document.head.appendChild(sheet); + } +} + +function clearPaywall(paywall, paywall_action) { + if (paywall) { + if (!paywall_action) + removeDOMElement(...paywall); + else { + for (let elem of paywall) { + if (paywall_action.rm_class) + elem.classList.remove(paywall_action.rm_class); + else if (paywall_action.rm_attrib) + elem.removeAttribute(paywall_action.rm_attrib); + } + } + } +} + +function waitDOMElement(selector, tagName = '', callback, multiple = false) { + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + for (let node of mutation.addedNodes) { + if (!tagName || (node.tagName === tagName)) { + if (node.matches(selector)) { + callback(node); + if (!multiple) + this.disconnect(); + } + } + } + } + }).observe(document, { + subtree: true, + childList: true + }); +} + +function waitDOMAttribute(selector, tagName = '', attributeName = '', callback, multiple = false) { + let targetNode = document.querySelector(selector); + if (!targetNode) + return; + new window.MutationObserver(function (mutations) { + for (let mutation of mutations) { + if (mutation.target.attributes[attributeName]) { + callback(mutation.target); + if (!multiple) + this.disconnect(); + } + } + }).observe(targetNode, { + attributes: true, + attributeFilter: [attributeName] + }); +} + +function getSelectorLevel(selector) { + if (selector.replace(/,\s+/g, ',').match(/[>\s]+/)) + selector = selector.replace(/,\s+/g, ',').split(',').map(x => x.match(/[>\s]+/) ? x + ', ' + x.split(/[>\s]+/).pop() : x).join(', '); + return selector; +} + +function getArticleSrc(url, url_src, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_fetch = url_src || url; + GM.xmlHttpRequest({ + method: "GET", + url: url_fetch, + headers: fetch_headers, + onload: function (response) { + let html = response.responseText; + if (proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let recursive; + if (url.startsWith('https://archive.')) { + if (url_fetch.includes('/https')) { + if (html.includes('
')[0].split('href="')[1].split('"')[0]; + getArticleSrc(url, url_src, proxy, base64, selector, text_fail, selector_source, selector_archive); + recursive = true; + } else + html = ''; + } + } + if (!recursive) + replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail, selector_source, selector_archive); + } + }); +} + +function replaceDomElementExt(url, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + if (!article) + return; + if (proxy) { + if (!text_fail) { + if (url.startsWith('https://archive.')) + text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n'; + else if (!matchUrlDomain(window.location.hostname, url)) + text_fail = 'BPC > failed to load from external site:\r\n'; + } + getArticleSrc(url, '', proxy, base64, selector, text_fail, selector_source, selector_archive); + } else { + fetch(url, {headers: fetch_headers}) + .then(response => { + let article = document.querySelector(selector); + if (response.ok) { + response.text().then(html => { + replaceDomElementExtSrc(url, '', html, false, base64, selector, text_fail, selector_source); + }); + } else { + replaceTextFail(url, article, proxy, text_fail); + } + }).catch(function (err) { + replaceTextFail(url, article, proxy, text_fail); + }); + } +} + +var selector_level = false; +function replaceDomElementExtSrc(url, url_src, html, proxy, base64, selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let article = document.querySelector(selector); + let article_link = document.querySelector(selector_archive); + let no_content_msg = ' | no article content found! | :'; + if (html) { + if (!proxy && base64) { + html = decode_utf8(atob(html)); + selector_source = 'body'; + } + let parser = new DOMParser(); + window.setTimeout(function () { + if (url.startsWith('https://archive.') && url_src) { + let domain_archive = url.match(/^https:\/\/(archive\.\w{2})/)[1]; + let pathname = new URL(url_src).pathname; + html = html.replace(new RegExp('https:\\/\\/' + domain_archive.replace('.', '\\.') + '\\/o\\/\\w+\\/', 'g'), '').replace(new RegExp("(src=\"|background-image:url\\(')" + pathname.replace('/', '\\/'), 'g'), "$1" + 'https://' + domain_archive + pathname); + } + let doc = parser.parseFromString(html, 'text/html'); + if (selector_level) + selector_source = getSelectorLevel(selector_source); + let article_new = doc.querySelector(selector_source); + if (article_new) { + if (article && article.parentNode) { + if (url.startsWith('https://archive.')) { + let arch_dom = (selector_archive !== selector) ? (article_new.querySelector(selector_archive) || document.querySelector(selector_archive)) : article_new; + if (arch_dom) { + if (arch_dom.firstChild) + arch_dom = arch_dom.firstChild; + let arch_div = document.createElement('div'); + arch_div.appendChild(archiveLink_renew(url_src)); + arch_div.appendChild(archiveLink(window.location.href, 'BPC > Full article text fetched from (no need to report issue for external site):\r\n')); + arch_div.style = 'margin: 0px 0px 50px;'; + arch_dom.before(arch_div); + } + let targets = article_new.querySelectorAll('a[target="_blank"][href^="' + window.location.origin + '"]'); + for (let elem of targets) + elem.removeAttribute('target'); + let invalid_links = article_new.querySelectorAll('link[rel*="preload"]:not([href])'); + removeDOMElement(...invalid_links); + } + window.setTimeout(function () { + if (article.parentNode) { + article.parentNode.replaceChild(article_new, article); + if (func_post) + func_post(); + } + }, 200); + } + } else + replaceTextFail(url, article_link, proxy, text_fail.replace(':', no_content_msg)); + }, 200); + } else { + replaceTextFail(url, article_link, proxy, url_src ? text_fail.replace(':', no_content_msg) : text_fail); + } +} + +function replaceTextFail(url, article, proxy, text_fail) { + if (text_fail && article) { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_fail'; + text_fail_div.setAttribute('style', 'margin: 0px 50px; font-weight: bold; color: red;'); + text_fail_div.appendChild(document.createTextNode(text_fail)); + if (proxy) { + if (url.startsWith('https://archive.')) { + text_fail_div = archiveLink(url.replace(/^https:\/\/archive\.\w{2}\//, ''), text_fail); + } else { + let a_link = document.createElement('a'); + a_link.innerText = url; + a_link.href = url; + a_link.target = '_blank'; + text_fail_div.appendChild(a_link); + } + } + if (article.firstChild) + article.firstChild.before(text_fail_div); + else + article.appendChild(text_fail_div); + } +} + +function randomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); +} + +function archiveRandomDomain() { + let tld_array = ['fo', 'is', 'li', 'md', 'ph', 'vn']; + let tld = tld_array[randomInt(6)]; + return 'archive.' + tld; +} + +function getArchive(url, paywall_sel, paywall_action = '', selector, text_fail = '', selector_source = selector, selector_archive = selector) { + let url_archive = 'https://' + archiveRandomDomain() + '/' + url.split(/[#\?]/)[0]; + let paywall = document.querySelectorAll(paywall_sel); + if (paywall.length) { + clearPaywall(paywall, paywall_action); + replaceDomElementExt(url_archive, true, false, selector, text_fail, selector_source, selector_archive); + } +} + +function archiveLink(url, text_fail = 'BPC > Try for full article text (no need to report issue for external site):\r\n') { + return externalLink(['archive.today', archiveRandomDomain()], 'https://{domain}?run=1&url={url}', url, text_fail); +} + +function archiveLink_renew(url, text_fail = 'BPC > Only use to renew if text is incomplete or updated:\r\n') { + return externalLink([new URL(url).hostname], '{url}/again?url=' + window.location.href, url, text_fail); +} + +function googleSearchToolLink(url, text_fail = 'BPC > Try for full article text (test url & copy html (tab) code to [https://codebeautify.org/htmlviewer]):\r\n') { + return externalLink(['search.google.com'], 'https://search.google.com/test/rich-results?url={url}', encodeURIComponent(url), text_fail); +} + +function externalLink(domains, ext_url_templ, url, text_fail = 'BPC > Full article text:\r\n') { + let text_fail_div = document.createElement('div'); + text_fail_div.id = 'bpc_archive'; + text_fail_div.setAttribute('style', 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'); + let parser = new DOMParser(); + text_fail = text_fail.replace(/\[(?[^\]]+)\]/g, function (match, url) { + return "" + new URL(url).hostname + ""; + }); + let doc = parser.parseFromString('' + text_fail + '', 'text/html'); + let elem = doc.querySelector('span'); + text_fail_div.appendChild(elem); + for (let domain of domains) { + let ext_url = ext_url_templ.replace('{domain}', domain).replace('{url}', url.split('?')[0]); + let a_link = document.createElement('a'); + a_link.innerText = domain; + a_link.href = ext_url; + a_link.target = '_blank'; + text_fail_div.appendChild(document.createTextNode(' | ')); + text_fail_div.appendChild(a_link); + } + return text_fail_div; +} + +function getArticleJsonScript() { + let scripts = document.querySelectorAll('script[type="application/ld+json"]'); + let json_script; + for (let script of scripts) { + if (script.innerText.match(/"(articlebody|text)":/i)) { + json_script = script; + break; + } + } + return json_script; +} + +function getNestedKeys(obj, key) { + if (key in obj) + return obj[key]; + let keys = key.split('.'); + let value = obj; + for (let i = 0; i < keys.length; i++) { + value = value[keys[i]]; + if (value === undefined) + break; + } + return value; +} + +function header_nofix(header, cond_sel = '', msg = 'BPC > no fix') { + if (header && typeof header === 'string') + header = document.querySelector(header); + if (header && !document.querySelector('div#bpc_nofix')) { + if (cond_sel) { + let elem = document.querySelectorAll(cond_sel); + if (elem.length) + removeDOMElement(...elem); + else + return false; + } + let nofix_div = document.createElement('div'); + nofix_div.id = 'bpc_nofix'; + nofix_div.style = 'margin: 20px; font-size: 20px; font-weight: bold; color: red;'; + nofix_div.innerText = msg; + header.before(nofix_div); + } +} + +function pageContains(selector, text) { + let elements = document.querySelectorAll(selector); + return Array.prototype.filter.call(elements, function (element) { + return RegExp(text).test(element.textContent); + }); +} + +function parseHtmlEntities(encodedString) { + let translate_re = /&(nbsp|amp|quot|lt|gt|deg|hellip|laquo|raquo|ldquo|rdquo|lsquo|rsquo|mdash);/g; + let translate = {"nbsp": " ", "amp": "&", "quot": "\"", "lt": "<", "gt": ">", "deg": "°", "hellip": "…", + "laquo": "«", "raquo": "»", "ldquo": "“", "rdquo": "”", "lsquo": "‘", "rsquo": "’", "mdash": "—"}; + return encodedString.replace(translate_re, function (match, entity) { + return translate[entity]; + }).replace(/&#(\d+);/gi, function (match, numStr) { + let num = parseInt(numStr, 10); + return String.fromCharCode(num); + }); +} + +function encode_utf8(str) { + return unescape(encodeURIComponent(str)); +} + +function decode_utf8(str) { + return decodeURIComponent(escape(str)); +} + +function ampToHtml() { + window.setTimeout(function () { + let canonical = document.querySelector('head > link[rel="canonical"][href]'); + if (canonical) + window.location.href = canonical.href; + }, 1000); +} + +function check_loop(interval = 2000) { + let loop = true; + let loop_date = Number(sessionStorage.getItem('###_loop')); + if (!(loop_date && (Date.now() - loop_date < interval))) { + sessionStorage.setItem('###_loop', Date.now()); + loop = false; + } + return loop; +} + +function refreshCurrentTab(not_loop = true) { + if (!not_loop || !check_loop(5000)) { + window.setTimeout(function () { + window.location.reload(true); + }, 500); + } else { + let header = (document.body && document.body.firstChild) || document.documentElement; + header_nofix(header, '', 'BPC > refresh loop stopped'); + } +} + +})();