diff --git a/MediaWiki Redirects Fixer.user.js b/MediaWiki Redirects Fixer.user.js new file mode 100644 index 0000000..5536fc1 --- /dev/null +++ b/MediaWiki Redirects Fixer.user.js @@ -0,0 +1,46 @@ +// ==UserScript== +// @name MediaWiki Redirects Fixer +// @namespace blankie-scripts +// @match https://*.wikipedia.org/* +// @grant none +// @version 1.0.0 +// @author blankie +// @description Fixes redirects of pages with anchors on Wikipedia/MediaWiki instances when Javascript is disabled +// @inject-into content +// @run-at document-end +// ==/UserScript== + +"use strict"; + +function scrollToHash(scrollTo) { + if (!scrollTo) { + return; + } + + let element = document.querySelector(scrollTo); + if (element) { + element.scrollIntoView(); + } +} + +for (let script of document.querySelectorAll("script")) { + let match = /;RLCONF=({"[\s\S]+?});RLSTATE={"/.exec(script.textContent); + if (!match) { + continue; + } + + let rlconf = JSON.parse(match[1]); + if (rlconf.wgInternalRedirectTargetUrl) { + let url = new URL(rlconf.wgInternalRedirectTargetUrl, location); + let scrollTo = url.hash; + if (location.hash) { + url.hash = location.hash; + scrollTo = null; + } + + history.replaceState(null, "", url); + scrollToHash(scrollTo); + } + + break; +} \ No newline at end of file diff --git a/README.md b/README.md index ca9c8a2..5dbab66 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,11 @@ elements Removes image loading placeholders from images loaded via Javascript, such as https://closeronline.co.uk, https://wired.com, and https://knowyourmeme.com. +## MediaWiki Redirects Fixer + +Fixes redirects of pages with anchors on Wikipedia/MediaWiki instances when +Javascript is disabled + ## nightly.link buttons A script to add [nightly.link](https://nightly.link) buttons on artifacts and