Community Central
Community Central
No edit summary
(revert script)
Line 1: Line 1:
 
mw.loader.load('//internal-soap.fandom.com/index.php?title=User:Mr_Pie_5/scripts-ucp.js&action=raw&ctype=text/javascript');
 
mw.loader.load('//internal-soap.fandom.com/index.php?title=User:Mr_Pie_5/scripts-ucp.js&action=raw&ctype=text/javascript');
 
mw.loader.using('mediawiki.api').then(function(){
 
if (mw.config.get('wgWikiaEnvironment') !== "sandbox") return;
 
if (mw.config.get('skin') === "fandomdesktop") return;
 
if (mw.config.get('wgCanonicalSpecialPageName') === "ThemeDesigner") return;
 
new mw.Api().saveOption('skin','fandomdesktop').then(function() {
 
location.reload();
 
});
 
});
 
   
 
// Turn the page title into a link to the page
 
// Turn the page title into a link to the page
Line 21: Line 12:
 
title.append(link);
 
title.append(link);
 
}
 
}
  +
  +
// Creates links to automatically revert a page to a specific revision with summary
 
mw.loader.using('mediawiki.api').then(function() {
  +
const api = new mw.Api();
  +
  +
function revert(id){
  +
// get the information about the desired revision
  +
api.get({
  +
"action": "query",
  +
"format": "json",
  +
"prop": "revisions",
  +
"revids": id,
  +
"formatversion": "2",
  +
"rvprop": "timestamp|user|content"
  +
}).then(function(data) {
  +
// parse and format the desired revision
  +
const revision = data.query.pages[0].revisions[0];
  +
const revisionLink = `[[Special:Permalink/${id}|${id}]]`;
  +
const user = (revision.anon) ? `[[Special:Contributions/${revision.user}|${revision.user}]]` : `[[User:${revision.user}|${revision.user}]]`;
  +
const date = new Date(revision.timestamp);
  +
const timestamp = `[[Special:Permalink/${id}|${date.getUTCHours()}:${date.getUTCMinutes()}, ${date.getUTCDate()} ${date.toLocaleString('en-us', {month:'long', timeZone:'UTC'})} ${date.getUTCFullYear()} (UTC)]]`;
  +
  +
// post the edit reverting the page to the desired revision
  +
api.post({
  +
"action": "edit",
  +
"format": "json",
  +
"pageid": data.query.pages[0].pageid,
  +
"text": revision.content,
  +
"summary": `Reverted to revision ${revisionLink} by ${user} at ${timestamp}.`,
  +
"formatversion": "2",
  +
"token": mw.user.tokens.get('csrfToken'),
  +
}).then(function(data){
  +
if(data.edit.result == "Success"){
 
location.reload();
  +
}
  +
else {
  +
console.log("Something went wrong. Response follows:");
  +
console.log(data);
  +
}
  +
});
 
});
  +
}
  +
  +
function appendRevertLink(element, id){
  +
let revertLink = document.createElement('a');
  +
revertLink.textContent = 'revert';
  +
revertLink.setAttribute('href', 'javascript:;');
  +
revertLink.addEventListener('click', function(){revert(id)});
  +
  +
let revertContainer = document.createElement('span');
  +
revertContainer.classList.add('pie-revert');
  +
revertContainer.append(' (');
  +
revertContainer.append(revertLink)
  +
revertContainer.append(')');
  +
  +
element.append(revertContainer);
  +
}
  +
  +
// Adds the link on history pages
  +
if(document.getElementById('pagehistory')){
  +
for(element of document.getElementById('pagehistory').children) {
  +
const id = element.getAttribute('data-mw-revid');
  +
  +
appendRevertLink(element, id);
  +
}
  +
}
  +
  +
// Adds the link on diff pages
  +
if(document.getElementsByClassName('diff-title')[0]){
  +
for(element of document.getElementsByClassName('diff-title')[0].children) {
  +
const id = element.querySelector('a[href*="oldid="]').href.match(/oldid=(\d+)/)[1];
  +
appendRevertLink(element.getElementsByTagName('strong')[0], id);
  +
}
  +
}
  +
  +
// Adds the link on revision pages
  +
if(document.getElementsByClassName('mw-revision')[0]){
  +
const element = document.getElementsByClassName('mw-revision')[0];
  +
const id = element.querySelector('a[href*="oldid="]').href.match(/oldid=(\d+)/)[1];
  +
appendRevertLink(element, id);
  +
}
  +
 
});

Revision as of 01:01, 14 January 2022

mw.loader.load('//internal-soap.fandom.com/index.php?title=User:Mr_Pie_5/scripts-ucp.js&action=raw&ctype=text/javascript');

// Turn the page title into a link to the page
{
  const title = document.getElementById("firstHeading");
  // MediaWiki doesn't support backticks so piecemeal this :/
  link = document.createElement('a');
  link.href = window.location.pathname;
  link.style.color = "inherit";
  link.textContent = title.textContent;
  title.textContent = "";
  title.append(link);
}

// Creates links to automatically revert a page to a specific revision with summary
mw.loader.using('mediawiki.api').then(function() {
	const api = new mw.Api();
	
	function revert(id){
		// get the information about the desired revision
		api.get({
			"action": "query",
			"format": "json",
			"prop": "revisions",
			"revids": id,
			"formatversion": "2",
			"rvprop": "timestamp|user|content"
		}).then(function(data) {
			// parse and format the desired revision
			const revision = data.query.pages[0].revisions[0];
			const revisionLink = `[[Special:Permalink/${id}|${id}]]`;
			const user = (revision.anon) ? `[[Special:Contributions/${revision.user}|${revision.user}]]` : `[[User:${revision.user}|${revision.user}]]`;
			const date = new Date(revision.timestamp);
			const timestamp = `[[Special:Permalink/${id}|${date.getUTCHours()}:${date.getUTCMinutes()}, ${date.getUTCDate()} ${date.toLocaleString('en-us', {month:'long', timeZone:'UTC'})} ${date.getUTCFullYear()} (UTC)]]`;

			// post the edit reverting the page to the desired revision
			api.post({
				"action": "edit",
				"format": "json",
				"pageid": data.query.pages[0].pageid,
				"text": revision.content,
				"summary": `Reverted to revision ${revisionLink} by ${user} at ${timestamp}.`,
				"formatversion": "2",
				"token": mw.user.tokens.get('csrfToken'),
			}).then(function(data){
				if(data.edit.result == "Success"){
					location.reload();
				}
				else {
					console.log("Something went wrong. Response follows:");
					console.log(data);
				}
			});
		});
	}

	function appendRevertLink(element, id){
		let revertLink = document.createElement('a');
		revertLink.textContent = 'revert';
		revertLink.setAttribute('href', 'javascript:;');
		revertLink.addEventListener('click', function(){revert(id)});

		let revertContainer = document.createElement('span');
		revertContainer.classList.add('pie-revert');
		revertContainer.append(' (');
		revertContainer.append(revertLink)
		revertContainer.append(')');

		element.append(revertContainer);
	}

	// Adds the link on history pages
	if(document.getElementById('pagehistory')){
		for(element of document.getElementById('pagehistory').children) {
			const id = element.getAttribute('data-mw-revid');

			appendRevertLink(element, id);
		}
	}

	// Adds the link on diff pages
	if(document.getElementsByClassName('diff-title')[0]){
		for(element of document.getElementsByClassName('diff-title')[0].children) {
			const id = element.querySelector('a[href*="oldid="]').href.match(/oldid=(\d+)/)[1];
			appendRevertLink(element.getElementsByTagName('strong')[0], id);
		}
	}

	// Adds the link on revision pages
	if(document.getElementsByClassName('mw-revision')[0]){
		const element = document.getElementsByClassName('mw-revision')[0];
		const id = element.querySelector('a[href*="oldid="]').href.match(/oldid=(\d+)/)[1];
		appendRevertLink(element, id);
	}

});