46 lines
1.1 KiB
JavaScript
46 lines
1.1 KiB
JavaScript
|
// ==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;
|
||
|
}
|