NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @id Explain XKCD Button
// @name Explain XKCD Button
// @icon http://i.imgur.com/bktNyTc.png
// @version 1.2
// @namespace http://obskyr.io/
// @homepageURL http://obskyr.io/
// @author Samuel (@obskyr)
// @description Add a link to explainxkcd to each and every XKCD page.
// @include /^https?://(www.)?xkcd.com/([0-9]+/)?$/
// @exclude /^https?://(www.)?xkcd.com/404/?$/
// @run-at document-end
// ==/UserScript==
var comicNumberRe = new RegExp("Permanent link to this comic: https?://xkcd.com/([0-9]+)", "g");
var middleContainer = document.getElementById("middleContainer");
var pageText = middleContainer.textContent || middleContainer.innerText;
var comicNumber = comicNumberRe.exec(pageText)[1];
var titleDiv = document.getElementById("ctitle");
var comicTitle = titleDiv.textContent || middleContainer.innerText;
var comicNavs = document.getElementsByClassName("comicNav");
var explainUrl = "http://www.explainxkcd.com/wiki/index.php/" + comicNumber.toString() + ":_" + encodeURIComponent(comicTitle.split(" ").join("_"));
for (var i = 0; i < comicNavs.length; i++) {
var nav = comicNavs[i];
var li = document.createElement("li");
var button = document.createElement("a");
var buttonText = document.createTextNode("Explain");
button.appendChild(buttonText);
button.setAttribute("href", explainUrl);
li.appendChild(button);
nav.insertBefore(li, nav.children[3]);
}