Welcome to the independent BOXBOY WIKI!

After ten years on Fandom, we forked on January 14, 2025. If you have edited the Fandom wiki and would like to reclaim your account, click here. To ensure that you only visit the independent wiki going forward, install the Indie Wiki Buddy browser extension.

MediaWiki:Gadget-RCThanks.js: Difference between revisions

From BOXBOY WIKI!
Jump to navigationJump to search
(Creating)
 
(No difference)

Latest revision as of 18:42, 14 January 2025

/**
 * Inserts thank links (Extension:Thanks) on recent changes and watchlist pages.
 * Created by SuperHamster on Nookipedia (https://nookipedia.com/wiki/User:SuperHamster)
 * Licensed under CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/)
 **/

function confirmThank(revid) {
	document.getElementById("rc-thank-" + revid).style.display = "none";
	document.getElementById("rc-thank-confirm-" + revid).style.display = "inline";
	document.getElementById("rc-thank-cancel-" + revid).style.display = "inline";
}

function cancelThank(revid) {
	document.getElementById("rc-thank-" + revid).style.display = "inline";
	document.getElementById("rc-thank-confirm-" + revid).style.display = "none";
	document.getElementById("rc-thank-cancel-" + revid).style.display = "none";
}

function sendThank(revid) {
	document.getElementById("rc-thank-confirm-" + revid).style.display = "none";
	document.getElementById("rc-thank-cancel-" + revid).style.display = "none";
	var thankSpan = document.getElementById("rc-thank-span-" + revid);
	thankSpan.innerHTML = "\u00A0[thanking...]";
	new mw.Api().postWithToken( 'csrf', {
	 	action: "thank",
		rev: revid
	}).done(function(response) {
		if (response.result.success == 1) {
			thankSpan.innerHTML = "\u00A0[thanked]";
		} else {
			thankSpan.innerHTML = "\u00A0[thank failed]";
		}
	 	console.log("Thank sent for revision ID " + revid);
	});
}

if (mw.config.get("wgPageName") === "Special:RecentChanges" || mw.config.get("wgPageName") === "Special:Watchlist") {
	// Grab page content to narrow down queried body:
	var content = document.getElementById("mw-content-text");

	// Select elements containing edits from registered users:
	var edits = content.querySelectorAll(".mw-changeslist-user-registered[data-mw-revid]");

	// Loop through edits:
	for (var i = 0; i < edits.length; i++) (function(i) {
		// Extract revid:
	    var revid = edits[i].getAttribute("data-mw-revid");

	    // Grab inner td element that contains edit details:
	    var edit = edits[i].querySelectorAll("td.mw-enhanced-rc-nested, td.mw-changeslist-line-inner")[0];

	    // Check if edit is from self and ignore if so:
	    if (edit.getElementsByClassName("mw-userlink")[0].title.substring(5) !== mw.user.getName()) {
		    // Create thank HTML elements:
		    var thankLink = document.createElement("a");
		    thankLink.className = "mw-thanks-thank-link";
		    thankLink.id = "rc-thank-" + revid;
		    thankLink.href = "#0";
		    thankLink.title = "Send a thank you notification to this user";
		    thankLink.innerHTML = "thank";
			thankLink.onclick = function() {
				confirmThank(revid);
			};

			var confirmThankLink = document.createElement("a");
			confirmThankLink.id = "rc-thank-confirm-" + revid;
			confirmThankLink.href = "#0";
			confirmThankLink.style.display = "none";
			confirmThankLink.title = "Confirm to send thank you notification to this user";
			confirmThankLink.innerHTML = "confirm";
			confirmThankLink.onclick = function() {
				sendThank(revid);
			};
	
			var cancelThankLink = document.createElement("a");
			cancelThankLink.id = "rc-thank-cancel-" + revid;
			cancelThankLink.href = "#0";
			cancelThankLink.style.display = "none";
			cancelThankLink.style.marginLeft = "1ex";
			cancelThankLink.title = "Cancel sending thank you notification to this user";
			cancelThankLink.innerHTML = "cancel";
			cancelThankLink.onclick = function() {
				cancelThank(revid);
			};

			var thankSpan = document.createElement("span");
			thankSpan.id = "rc-thank-span-" + revid;
		    thankSpan.appendChild(document.createTextNode("\u00A0["));
			thankSpan.appendChild(thankLink);
			thankSpan.appendChild(confirmThankLink);
			thankSpan.appendChild(cancelThankLink);
			thankSpan.appendChild(document.createTextNode("]"));
	
			// Append thanks to edit
			edit.appendChild(thankSpan);
	    }
	})(i);
}