Skip to content

Repository files navigation

userscripts

lint licence: MIT conventions: Greasy Fork

Userscripts that ship alternative experiences for legacy web applications — redesigns, not tweaks.

One .user.js file per install unit at the repo root. There is no build step: a userscript manager copies the file verbatim, so whatever is committed here is exactly what runs in the browser. That is a deliberate constraint, not a missing feature — it means the published artefact and the reviewable source are the same bytes.

Catalogue

Script Target Host
leolist-listings-only.user.jsLeoList — listings only: no sponsored, no chrome, photo filmstrip leolist.cc — every classified category: the listing column only, sponsored rows dropped, detail-page photos as a filmstrip, dark by default Sleazy Fork installs
thumbwall.user.jsPornhub, XVideos, XNXX, xHamster & Eporner – Clean Widescreen Gallery pornhub.com · xnxx.com · xvideos.com · eporner.com · xhamster.com — full-bleed thumbnail wall, autohiding header, video page reduced to player + info strip + related Sleazy Fork installs

Host is where the script is published: Greasy Fork for general sites, Sleazy Fork for scripts targeting adult sites. Greasy Fork will reject or relocate the latter — see CONTRIBUTING.md.

Installing

  1. Install a userscript manager. These are developed against Violentmonkey; Tampermonkey and Greasemonkey are expected to work but are not tested.
  2. Install from the listing linked in the catalogue (the green Install button on Greasy Fork / Sleazy Fork). That copy carries the fork's own @updateURL, so your manager picks up every new version automatically.

The files in this repository are the source, not the install channel. There is no @updateURL or @downloadURL in any script here, by design: pointed at a repository, those let a push to main mutate an installed copy on every user's machine with no review. Installing a raw file from here works, but it will never update itself — re-install by hand, or switch to the listing.

Design rules every script holds to

These are not style preferences. Each one is here because its absence broke something real.

  • Anchor on ARIA roles, href values and data attributes — never a generated class name. Framework class names are compiler output and rotate without notice. aria-label is not an anchor either: it is localised, so a selector built on one matches nothing on a non-English UI.
  • !important is not the top of the cascade — a running animation is. A Web Animation on transform outranks author-important. Move things off-canvas with the translate longhand (composes) rather than transform (competes).
  • :has() matches ancestors. Pair a content test with a structural one and confirm the match count is exactly what you intend before you hide anything.
  • Assert state from the DOM each pass, never latch it in a variable.
  • Teardown contract. Register a teardown on window and call any previous one at entry. Never early-return on an "already initialised" flag — that makes a re-run a silent no-op and hides double-injection bugs.
  • Observer discipline. childList-only on head/documentElement; never subtree on a large or virtualised DOM.
  • Failure mode is always degrade to stock. When a selector is renamed upstream, rules stop matching and the page renders as the site intended. A script that mangles the page on a miss is a defect, not a degradation.

Per-script reasoning — the measured, dated evidence for why each selector and cascade trick is what it is — lives in that script's own header comments.

Contributing

New scripts and fixes are welcome. Start with CONTRIBUTING.md — it covers the metadata block rules, the two lint gates, and the @version trap that has bitten this project more than once.

Licence

MIT — see LICENSE. Contributions are accepted under the same terms.

About

Userscripts shipping alternative experiences for legacy web applications — published to Greasy Fork and Sleazy Fork

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages