Add TheVerge paywall remover user script
This commit is contained in:
21
LICENSE
Normal file
21
LICENSE
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Barış
|
||||||
|
|
||||||
|
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.
|
||||||
58
README.md
Normal file
58
README.md
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# TheVerge Unlimited Reading (Paywall Remover)
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
A lightweight userscript that removes intrusive overlays on The Verge and restores a clean, distraction-free reading experience.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Click below to install directly in Tampermonkey:
|
||||||
|
|
||||||
|
[](https://raw.githubusercontent.com/arg0WAK/theverge-paywall-remover/main/script/theverge-paywall-remover.user.js)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## How it works
|
||||||
|
|
||||||
|
This script uses two layered approaches:
|
||||||
|
|
||||||
|
### DOM observer (fallback)
|
||||||
|
Detects dynamically injected overlays and removes them automatically.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Release Notes
|
||||||
|
|
||||||
|
### v1.0.0
|
||||||
|
- Initial release
|
||||||
|
- Overlay removal system
|
||||||
|
- Scroll restoration fix
|
||||||
|
- Dynamic DOM handling support
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Keywords
|
||||||
|
|
||||||
|
```txt
|
||||||
|
theverge clean view
|
||||||
|
theverge reading mode
|
||||||
|
remove overlay theverge
|
||||||
|
zephr overlay remover
|
||||||
|
article clean mode
|
||||||
|
scroll unlock page
|
||||||
|
website readability enhancer
|
||||||
|
userscript reading fix
|
||||||
|
tampermonkey verge script
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Disclaimer
|
||||||
|
|
||||||
|
This project is intended for educational and UI experimentation purposes.
|
||||||
|
Websites may change structure at any time.
|
||||||
60
script/theverge-paywall-remover.user.js
Normal file
60
script/theverge-paywall-remover.user.js
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
// ==UserScript==
|
||||||
|
// @name TheVerge Unlimited Reading
|
||||||
|
// @namespace https://github.com/arg0WAK
|
||||||
|
// @version 2026-04-23
|
||||||
|
// @description Kills paywall overlays and gives you your scroll back on The Verge.
|
||||||
|
// @author github.com/arg0WAK
|
||||||
|
// @match https://www.theverge.com/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=theverge.com
|
||||||
|
// @grant none
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
const forbiddenSelectors = [
|
||||||
|
'.zephr-zone-footer',
|
||||||
|
'.zephr-footer-container',
|
||||||
|
'.zephr-overlay',
|
||||||
|
'#zephr-zone-footer',
|
||||||
|
'#zephr-footer-container',
|
||||||
|
'#zephr-overlay'
|
||||||
|
];
|
||||||
|
|
||||||
|
const isRoot = el =>
|
||||||
|
el === document.body || el === document.documentElement;
|
||||||
|
|
||||||
|
const fixStyles = el => {
|
||||||
|
if (!isRoot(el)) return;
|
||||||
|
|
||||||
|
const s = getComputedStyle(el);
|
||||||
|
|
||||||
|
if (s.overflow === 'hidden') {
|
||||||
|
el.style.setProperty('overflow', 'unset', 'important');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (s.position === 'fixed') {
|
||||||
|
el.style.cssText += `
|
||||||
|
position:unset !important;
|
||||||
|
padding:0 !important;
|
||||||
|
top:unset !important;
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const clean = () =>
|
||||||
|
forbiddenSelectors.forEach(sel =>
|
||||||
|
document.querySelectorAll(sel).forEach(el => el.remove())
|
||||||
|
);
|
||||||
|
|
||||||
|
new MutationObserver(muts => {
|
||||||
|
muts.forEach(m => {
|
||||||
|
if (m.type === 'attributes') fixStyles(m.target);
|
||||||
|
if (m.type === 'childList') clean();
|
||||||
|
});
|
||||||
|
}).observe(document, {
|
||||||
|
subtree: true,
|
||||||
|
childList: true,
|
||||||
|
attributes: true,
|
||||||
|
attributeFilter: ['style']
|
||||||
|
});
|
||||||
|
|
||||||
|
[document.body, document.documentElement].forEach(fixStyles);
|
||||||
|
clean();
|
||||||
Reference in New Issue
Block a user