User:Deathlime/Deredirectification/script

// ==UserScript== // @name        WP:Deredirectification // @description Changes the text of the title of hyperlinks that are redirects to the title of the target of the redirect : // @include     http://*.wikipedia.org/wiki/* // @include     http://*.wikimedia.org/wiki/* // ==/UserScript==

// extracted from json.js (http://www.json.org/json.js ) //   which is Copyright © 2002 JSON.org (go read http://www.json.org/license.html ) String.prototype.parseJSON = function { try { return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( this.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + this + ')'); } catch (e) { return false; } };

var logging = 0; //increment for GM_log diarrhoea!

var titles = []; var A = document.getElementsByTagName("A"); for (var i = 0; i < A.length; i++) if ((/^[A-Z][A-Za-z]?:/.test(A[i].title)) && (titles.indexOf(A[i].title) < 0)) titles.push(A[i].title); titles.sort; //not necessary, but pretty! : if (logging > 0) {GM_log(titles.length + "| " + titles);}

// this is the onload callback function for the GM_xmlhttpRequest function BANZAI(response) { if (logging > 0) {GM_log("status: " + response.status);} if (logging > 1) {GM_log("status text: " + response.statusText);} if (logging > 1) {GM_log("response headers:\n" + response.responseHeaders);} if (logging > 1) {GM_log("response text:\n" + response.responseText);} if (response.status != 200) throw ("You Have Angered The Cabal!\n" + "Try Again In " + response.status + " Years."); var yurik = response.responseText.parseJSON; if (yurik == false) throw ("I Smell A Wumpus!\n" + "Response Isn't JSON."); if (yurik.error) throw ("Beware Of Developers Wielding Cluebats!\n" + "Your Error Was \"" + yurik.error.* + "\"."); var redirects = {}; for (var id in yurik.pages) { var title = yurik.pages[id].title; if (yurik.pages[id].redirect != undefined && yurik.pages[id].redirect.to != undefined) { var redirect = yurik.pages[id].redirect.to.*; redirects[title] = redirect; if (logging > 2) {GM_log(title + "  " + redirect);} } } var A = document.getElementsByTagName("A"); for (var i = 0; i < A.length; i++) if (redirects[A[i].title] != undefined) A[i].title = redirects[A[i].title]; }

var URL = "http://" + document.domain + "/w/query.php" //query the right server! URL += "?noprofile"; //Don't care URL += "&format=json"; //JSON FTW URL += "&what=redirects"; //important URL += "&titles="; //This gets tacked on later ´

if (titles.length > 0) //avoid an empty query { //OK, so WP:WP has like 432 redirect links on it, // which makes shit fly when you stuff all that into one query //Soooo& now we split large queries into chunks and make multiple requests var chunk = 100; for (var k = 0; k < titles.length; k += chunk) { var request = {method: "GET", onload: BANZAI}; request.headers = { "Accept": "application/json", }; request.url = encodeURI(URL + titles.slice(k, k + chunk).join('|')) if (logging > 1) {GM_log(request.url );} GM_xmlhttpRequest(request); } }