User:Writ Keeper/Scripts/watchlistDiffs.js

if (typeof inspectText == "undefined") {	inspectText = "inspect diff"; } if (typeof showText == "undefined") {	showText = "show diff"; } if (typeof hideText == "undefined") {	hideText = "hide diff"; } if (mw.config.get("wgCanonicalSpecialPageName") == "Watchlist" ||	mw.config.get("wgCanonicalSpecialPageName") == "Recentchanges") {	function inspectionEachHelper(index, element) {		var findString; if (mw.config.get("wgAction") == "history" || $(element).hasClass("mw-enhanced-rc-nested")) {			findString = 'a:contains("prev")'; }		else {			findString = 'a:contains("diff")'; }

var regex;

if (mw.config.get("wgCanonicalSpecialPageName") == "Contributions") {			regex = /&oldid=(\d+)$/;

}		else {			regex = /&diff=(\d+)&oldid=/; }		var diffLink = $(element).find(findString); if (diffLink.length > 0) {			var regexResult = regex.exec(diffLink[0].href); if (regexResult != null && regexResult.length >= 2) {				var diffID = regexResult[1]; //don't re-add if it already exists if ($("#" + diffID).length > 0) {					return; }				var inlineDiffButton; if (typeof inlineDiffBigUI === "undefined") {					inlineDiffButton = document.createElement("a"); inlineDiffButton.href = "#"; inlineDiffButton.innerHTML = ' [ ' + inspectText + ' ] '; }				else {					inlineDiffButton = document.createElement("input"); inlineDiffButton.type = "button"; inlineDiffButton.value = "Inspect edit"; }				inlineDiffButton.id = diffID; $(inlineDiffButton).addClass("inspectDiffButton"); $(inlineDiffButton).click(function 				{					return inspectWatchlistDiff(this);				}				); if ($(element).find("tr:first").length == 0) {					$(inlineDiffButton).insertAfter($(element).find(".mw-changeslist-separator:first")); }				else {					$(inlineDiffButton).insertBefore($(element).find(".mw-title")) $(inlineDiffButton).addClass("mw-enhanced-rc-diff"); /*					$(element).find("tr:first").append(" "); $(element).find("tr:first>td:last").append(inlineDiffButton); */				}			}		}	}	function addWatchlistInspectionBoxes {		mw.loader.using("mediawiki.diff.styles").done(function		{			var entries = $("#mw-content-text table.mw-enhanced-rc");			if (entries.length == 0)			{				$("#mw-content-text ul").each(function (ind, el) {					$(el).children("li").each(inspectionEachHelper); });			}			else			{				entries.each(inspectionEachHelper);				$("td.mw-enhanced-rc-nested").each(inspectionEachHelper);			}		}); }

function inspectWatchlistDiff(button) {		mw.loader.using(['mediawiki.api']).done(function 		{			var mwApi = new mw.Api;			mwApi.get( {				action: "query", prop: "revisions", format: "json", rvprop: "timestamp", rvdiffto: "prev", revids: button.id			} ).done(function (response) {				if (response == null) {					alert("Request failed!"); return false; }

var diffString = response.query.pages[Object.keys(response.query.pages)[0]].revisions[0].diff["*"];

if (diffString == null) {					alert("Request failed!"); return false; }

var newTable = document.createElement("table"); newTable.className = "diff"; $(newTable).html('  ');

$(newTable).append(diffString); diffParent = null; if ($("#" + button.id).hasClass("mw-enhanced-rc-diff")) {					$("#" + button.id).parents("table").after(newTable); }				else {					diffParent = $("#" + button.id).parent; diffParent.append(newTable); }				newTable.id = button.id + "display";

$(button).unbind("click"); if (typeof inlineDiffBigUI === "undefined") {					$(button).html(' [ ' + hideText + ' ] '); $(button).click(function 					{						return hideSmallEditInspection(this);					}					); }				else {					$(button).attr("value", "Hide edit"); $(button).click(function 					{						return hideEditInspection(this);					}					); }				if (typeof markAsViewed != "undefined" && markAsViewed) {					mwApi.postWithToken('csrf',					{						action: "setnotificationtimestamp",						revids: button.id					}					).done(function (data)					{						if (diffParent != null)						{							diffParent.removeClass("mw-changeslist-line-watched");							diffParent.addClass("mw-changeslist-line-not-watched");						}					}					); }			}			);		}		);		return false; }

function showEditInspection(button) {		$("#" + button.id + "display").css("display", ""); $(button).attr("value", "Hide edit"); $(button).unbind("click"); $(button).click(function 		{			return hideEditInspection(this);		}		); return false; }

function hideEditInspection(button) {		$("#" + button.id + "display").css("display", "none"); $(button).attr("value", "Show edit"); $(button).unbind("click"); $(button).click(function 		{			return showEditInspection(this);		}		); return false; }

function showSmallEditInspection(button) {		$("#" + button.id + "display").css("display", ""); $(button).html(' [ ' + hideText + ' ] '); $(button).unbind("click"); $(button).click(function 		{			return hideSmallEditInspection(this);		}		); return false; }

function hideSmallEditInspection(button) {		$("#" + button.id + "display").css("display", "none"); $(button).html(' [ ' + showText + ' ] '); $(button).unbind("click"); $(button).click(function 		{			return showSmallEditInspection(this);		}		); return false; }

mw.hook('wikipage.content').add(addWatchlistInspectionBoxes); }