bypass-paywalls-chrome/contentScript.js
Bela Lubkin 1c3d8d622c Merge 'bypass-paywalls-firefox' extension into 'bypass-paywalls-chrome'
- include the best versions of everything (to the best of my ability...)
- include all supported sites
- update docs to always point to 'bypass-paywalls-chrome' repository
- update docs to be -- not browser-agnostic, but poly-browser
- (tested the 1st 11 sites in alphabetical order, plus WSJ -- using Opera)
- cen.acs.org: retain localstorage ('cookie warning' accepted)
- cen.acs.org: remove .meteredBar '2/3 articles remaining' bar
- XXX centralwesterndaily.com.au: not working (article window-shaded)
- all others tested seem fine (intentionally provoked failures w/ bypass
  disabled, demonstrated success when enabled)
- (end of alphabetical testing)
- move defaultSites{} from background.js & options.js to common.js
- uncertain whether FF contentScript.js code for businessinsider.com,
  haaretz.co.il, wsj.com was helpful, I left them commented out
- use browser-agnostic 'extension_api.*' in place of browser.*, chrome.*
- use 'comma-on-last-item' syntax to allow insertion & sorting without
  breaking structures, minimize commit footprints
- replace 'location.whatever' refs with consistent 'window.location.whatever'
- break structure inits into multi-line format where appropriate
- convert TABs to spaces (background.js had 2-space tabs, manifest.json 4!)
- remove trailing spaces
- sort tables which ought to be sorted, consistently using Linux `LANG=C sort`
  (strict ASCII ordering)
- XXX use of window.location.href.indexOf() considered harmful: for instance,
  'ft.com' will match 'loft.com', or 'ibm.co' (Columbia) matches 'ibm.com';
  intend to replace with something like hostDomainIs('ft.com') -- not now
- XXX Firefox completely untested; I believe a *.xpi with manifest-ff.json
  in place of manifest.json will work, but have not tried
- XXX did not attempt to update updates.json (FF), updates.xml (Chrome)
- XXX why do bypass.svg, *_screenshot.png exist?  At least should not be
  included in *.crx, *.xpi
- XXX same Google Analytics code now in FF build, not sure if this is OK
- version arbitrarily slammed to '1.7.0' (could be '2.0.0')
- code delta -283 lines (mainly defaultSites{}); or -1585 + 3 binaries,
  counting prospective retirement of 'bypass-paywalls-firefox'
- should have been something like 20 separate commits, but got out of hand...

(note 'XXX' problem areas)
2020-03-19 11:04:17 -07:00

402 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var arr_localstorage_hold = ['sfchronicle.com', 'cen.acs.org'];
var localstorage_hold = arr_localstorage_hold.some(function(url) {
return window.location.href.indexOf(url) !== -1;
});
if (!localstorage_hold){
window.localStorage.clear();
}
if (window.location.hostname.endsWith('rep.repubblica.it')) {
if (window.location.href.includes('/pwa/')) {
window.location.href = window.location.href.replace('/pwa/', '/ws/detail/');
}
if (window.location.href.includes('/ws/detail/')) {
const paywall = document.querySelector('.paywall[subscriptions-section="content"]');
if (paywall) {
paywall.removeAttribute('subscriptions-section');
const preview = document.querySelector('div[subscriptions-section="content-not-granted"]');
if (preview) {
preview.remove();
}
}
}
}
if (window.location.href.indexOf("americanbanker.com") !== -1) {
const paywall = document.getElementsByClassName('embargo-content')[0];
if (paywall)
paywall.classList.remove('embargo-content');
}
if (window.location.href.indexOf('telegraaf.nl') !== -1) {
setTimeout(function () {
const paywall = document.getElementById('TEMPRORARY_METERING_ID');
if (paywall) {
window.location.reload(true);
}
}, 1000); // Delay (in milliseconds)
}
if (window.location.href.indexOf('ad.nl') !== -1 || window.location.href.indexOf('ed.nl') !== -1) {
let paywall = document.querySelector('.article__component.article__component--paywall-module-notification');
removeDOMElement(paywall);
}
if (window.location.href.indexOf("washingtonpost.com") !== -1) {
if (window.location.href.includes('/gdpr-consent/')) {
const free_button = document.querySelector('.gdpr-consent-container .continue-btn.button.free');
if (free_button)
free_button.click();
setTimeout(function () {
const gdprcheckbox = document.querySelector('.gdpr-consent-container .consent-page:not(.hide) #agree');
if (gdprcheckbox) {
gdprcheckbox.checked = true;
gdprcheckbox.dispatchEvent(new Event('change'));
document.querySelector('.gdpr-consent-container .consent-page:not(.hide) .continue-btn.button.accept-consent').click();
}
}, 300); // Delay (in milliseconds)
}
}
// if (window.location.href.indexOf("businessinsider.com") !== -1) {
// const paywall = document.getElementsByClassName('tp-modal');
// while (paywall.length > 0) {
// paywall[0].parentNode.removeChild(paywall[0]);
// }
// }
// if (window.location.hostname.endsWith('haaretz.co.il')) {
// const html = document.getElementsByTagName('html');
// if (html && html.length > 0) {
// html[0].style['overflow-y'] = 'auto';
// }
// const msg = document.getElementById('article-wrapper');
// if (msg) {
// msg.style['display'] = 'none';
// }
// }
if (window.location.href.indexOf("wsj.com") !== -1) {
if (window.location.href.includes('/articles/')) {
// document.addEventListener('DOMContentLoaded', () => {
// const paywall = document.getElementById('cx-scrim');
// const candybar = document.getElementById('cx-candybar');
// removeDOMElement(paywall, candybar);
// });
const close_button = document.querySelector('.close-btn');
if (close_button)
close_button.click();
}
}
if (window.location.href.indexOf("sloanreview.mit.edu") !== -1) {
document.querySelector('#cboxClose').click();
}
if (window.location.href.indexOf("mexiconewsdaily.com") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const sideNotification = document.querySelector('.pigeon-widget-prompt');
const subMessage = document.querySelector('.sub_message_container');
const popup = document.querySelector('.popupally-pro-outer-full-width-7-fluid_qemskqa');
const bgFocusRemoverId = document.getElementById('popup-box-pro-gfcr-7');
removeDOMElement(sideNotification, subMessage, popup, bgFocusRemoverId);
});
}
if (window.location.href.indexOf("theathletic.com") !== -1) {
const landing_banner = document.querySelector('.logged-out-landing-banner');
const sample_banner = document.querySelector('.main-sample-banner');
const bottom_banner = document.querySelector('.border-bottom-cc');
const subscribe = document.querySelector('.subscribe-ad-text');
removeDOMElement(landing_banner, sample_banner, bottom_banner, subscribe);
}
if (window.location.href.indexOf("the-american-interest.com") !== -1) {
const counter = document.getElementById('article-counter');
removeDOMElement(counter);
}
if (window.location.href.indexOf("nzherald.co.nz") !== -1) {
const paywall = document.getElementById('article-content');
if (paywall) {
const premium = document.getElementsByClassName('premium-sub')[0];
removeDOMElement(premium);
paywall.classList.remove('premium-content');
paywall.classList.add('full-content');
removeClassesByPrefix(paywall, 'QUnW');
var paras = paywall.querySelectorAll("p, span, h2, div");
for (var i = 0; i < paras.length; i++) {
removeClassesByPrefix(paras[i], 'QUnW');
paras[i].classList.remove("ellipsis");
paras[i].removeAttribute('style');
}
}
}
if (window.location.href.indexOf("thestar.com") !== -1) {
const paywall = document.querySelector('.basic-paywall-new');
removeDOMElement(paywall);
const tbc = document.querySelectorAll('.text-block-container');
for (let i = 0; i < tbc.length; i++) {
tbc[i].removeAttribute('style');
}
}
if (window.location.href.indexOf("techinasia.com") !== -1) {
const paywall = document.querySelector('.paywall-content');
if (paywall){
paywall.classList.remove('paywall-content');
}
const splash_subscribe = document.querySelector('.splash-subscribe');
const paywall_hard = document.querySelector('.paywall-hard');
removeDOMElement(splash_subscribe, paywall_hard);
}
if (window.location.href.indexOf("afr.com") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const hidden_image = document.querySelectorAll('img');
for (let i = 0; i < hidden_image.length; i++) {
var src = hidden_image[i].src;
if ('src: ' + src.indexOf(".gif") !== -1) {
var data_src = hidden_image[i].getAttribute("data-src");
if (data_src)
hidden_image[i].setAttribute('src', data_src);
}
}
const plista = document.querySelector('div[data-plista-placement="underArticle_Group"]');
removeDOMElement(plista);
});
}
if (window.location.href.indexOf("parool.nl") !== -1 || window.location.href.indexOf("trouw.nl") !== -1 || window.location.href.indexOf("volkskrant.nl") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const paywall = document.querySelector('div[data-temptation-position="ARTICLE_BOTTOM"]');
const hidden_section = document.querySelector('div[data-temptation-position="ARTICLE_INLINE"]');
removeDOMElement(paywall, hidden_section);
});
}
if (window.location.href.indexOf("firstthings.com") !== -1) {
const paywall = document.getElementsByClassName('paywall')[0];
removeDOMElement(paywall);
}
if (window.location.href.indexOf("bloomberg.com") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const fence = document.querySelector('.fence-body');
if (fence){
fence.classList.remove('fence-body');
}
const paywall = document.getElementById('paywall-banner');
removeDOMElement(paywall);
});
}
if (window.location.href.indexOf("bloombergquint.com") !== -1) {
const articlesLeftModal = document.getElementsByClassName('paywall-meter-module__story-paywall-container__1UgCE')[0];
const paywall = document.getElementById('paywallDmp');
removeDOMElement(articlesLeftModal, paywall);
}
if (window.location.href.indexOf("medium.com") !== -1) {
const bottomMessageText = 'Get one more story in your member preview when you sign up. Its free.';
const DOMElementsToTextDiv = pageContains('div', bottomMessageText);
if (DOMElementsToTextDiv[2]) removeDOMElement(DOMElementsToTextDiv[2]);
}
if (window.location.href.indexOf("theglobeandmail.com") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const lazy_image = document.querySelectorAll('.js-lazyimage');
for (let i = 0; i < lazy_image.length; i++) {
lazy_image[i].classList.remove('js-lazyimage');
}
const hidden_image = document.querySelectorAll('img');
for (let i = 0; i < hidden_image.length; i++) {
var src = hidden_image[i].src;
if (src.indexOf("data:image/gif") !== -1) {
var data_src = hidden_image[i].getAttribute("data-src");
if (data_src)
hidden_image[i].setAttribute('src', data_src);
var data_bg = hidden_image[i].getAttribute("data-bg");
if (data_bg)
hidden_image[i].setAttribute('src', data_bg);
}
}
});
}
if (window.location.href.indexOf("examiner.com.au") !== -1 ||
window.location.href.indexOf("thecourier.com.au") !== -1 ||
window.location.href.indexOf("theadvocate.com.au") !== -1) {
const subscribe_truncate = document.querySelector('.subscribe-truncate');
if (subscribe_truncate)
subscribe_truncate.classList.remove('subscribe-truncate');
const subscriber_hider = document.querySelectorAll('.subscriber-hider');
for (let i = 0; i < subscriber_hider.length; i++) {
subscriber_hider[i].classList.remove('subscriber-hider');
}
}
if (window.location.href.indexOf('lemonde.fr') !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const hidden_section = document.getElementsByClassName('article__content--restricted-media')[0];
if (hidden_section)
hidden_section.classList.remove('article__content--restricted-media');
const longform_article_restricted = document.getElementsByClassName('article__content--restricted')[0];
if (longform_article_restricted)
longform_article_restricted.classList.remove('article__content--restricted');
const longform_paywall = document.getElementsByClassName('paywall--longform')[0];
if (longform_paywall)
longform_paywall.classList.remove('paywall--longform');
const paywall = document.getElementById('js-paywall-content');
const friend_paywall = document.getElementsByClassName('friend--paywall')[0];
const cookie_banner = document.getElementById('cookie-banner');
removeDOMElement(paywall, friend_paywall, cookie_banner);
});
}
if (window.location.href.indexOf("canberratimes.com.au") !== -1) {
const paywall = document.querySelector('.subscribe-article.news-article-body.article__body');
paywall.classList.remove('subscribe-article');
var subscribe = document.getElementsByClassName('subscriber-container')[0];
removeDOMElement(subscribe);
var content = document.getElementsByClassName('subscriber-hider');
for (var i = 0; i < content.length; i++) {
content[i].classList.remove('subscriber-hider');
}
}
if (window.location.href.indexOf("ledevoir.com") !== -1) {
const counter = document.querySelector('.full.hidden-print.popup-msg');
removeDOMElement(counter);
}
if (window.location.href.includes('ft.com')) {
const cookie_banner = document.querySelector('.n-messaging-banner__outer');
removeDOMElement(cookie_banner);
}
if (window.location.href.indexOf("thehindu.com") !== -1) {
const paywall = document.getElementById('test');
removeDOMElement(paywall);
}
if (window.location.href.indexOf("nytimes.com") !== -1) {
const preview_button = document.querySelector('.css-3s1ce0');
if (preview_button)
preview_button.click();
}
if (window.location.href.indexOf("leparisien.fr") !== -1) {
window.removeEventListener('scroll', this.scrollListener);
const paywall = document.querySelector('.relative.piano-paywall.below_nav.sticky');
removeDOMElement(paywall);
setTimeout(function () {
var content = document.getElementsByClassName('content');
for (var i = 0; i < content.length; i++) {
content[i].removeAttribute("style");
}
}, 300); // Delay (in milliseconds)
}
if (window.location.href.indexOf("caixinglobal.com") !== -1) {
const pay_tip = document.querySelectorAll('.cons-pay-tip');
for (let i = 0; i < pay_tip.length; i++) {
pay_tip[i].removeAttribute('style');
}
const appContent = document.getElementById('appContent');
if (appContent) {
const p_hidden = document.querySelectorAll('p:not([style="display:block;"]');
for (let i = 0; i < p_hidden.length; i++) {
p_hidden[i].setAttribute('style', 'display:block;');
}
}
}
if (window.location.href.indexOf("economist.com") !== -1) {
document.addEventListener('DOMContentLoaded', () => {
const subscribe = document.querySelector('.subscription-proposition');
const advert = document.querySelector('.advert');
const wrapper = document.getElementById('bottom-page-wrapper');
removeDOMElement(subscribe, advert, wrapper);
setTimeout(function () {
const paywall = document.querySelector('.layout-article-regwall'); ;
if (paywall) {
window.location.reload(true);
}
}, 500); // Delay (in milliseconds)
const p_article = document.querySelectorAll('p.article__body-text');
var href;
for (let i = 0; i < p_article.length; i++) {
const anchor = document.querySelectorAll('a');
href = '';
for (let j = 0; j < anchor.length; j++) {
if (anchor[j].href) {
href = anchor[j].href;
} else {
anchor[j].href = href;
}
}
}
});
}
if (window.location.href.indexOf("bizjournals.com") !== -1) {
const sheet_overlay = document.querySelector('.sheet-overlay');
const chunk_paywall = document.querySelector('.chunk--paywall');
removeDOMElement(sheet_overlay, chunk_paywall);
const overlaid = document.querySelectorAll('.is-overlaid');
for (var i = 0; i < overlaid.length; i++) {
overlaid[i].classList.remove('is-overlaid');
}
const body_hidden = document.querySelector('.js-pre-chunks__story-body');
body_hidden.removeAttribute('style');
}
if (window.location.href.indexOf("the-tls.co.uk") !== -1) {
const paywall = document.querySelector('.tls-subscriptions-banner__closed-skin');
removeDOMElement(paywall);
}
if (window.location.href.indexOf("cen.acs.org") !== -1) {
const paywall = document.querySelector('.meteredBar');
removeDOMElement(paywall);
}
if (window.location.href.indexOf("elpais.com") !== -1) {
setTimeout(function () {
const paywall = document.querySelector('.fc-ab-root');
const body = document.querySelector('.salida_articulo');
removeDOMElement(paywall);
body.removeAttribute('style');
}, 500); // Delay (in milliseconds)
}
function removeDOMElement(...elements) {
for (let element of elements) {
if (element)
element.remove();
}
}
function removeClassesByPrefix(el, prefix) {
for (var i = 0; i < el.classList.length; i++){
if (el.classList[i].startsWith(prefix)) {
el.classList.remove(el.classList[i]);
}
}
}
function pageContains(selector, text) {
let elements = document.querySelectorAll(selector);
return Array.prototype.filter.call(elements, function(element){
return RegExp(text).test(element.textContent);
});
}