Jump to content

User:SD0001/easy-merge.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by SD0001 (talk | contribs) at 17:11, 12 October 2019 (fix bugs). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// <nowiki>
$.when(
	mw.loader.getScript('/w/index.php?title=MediaWiki:Gadget-morebits.js&action=raw&ctype=text/javascript'),
	importStylesheet('MediaWiki:Gadget-morebits.css'),
	mw.loader.using(['mediawiki.util', 'mediawiki.Title', 'jquery.ui.dialog', 'jquery.tipsy']),
	$.ready
).then(function() {

if (mw.config.get('wgNamespaceNumber') < 0 || !mw.config.get('wgRevisionId')) {
	return;
}

var advert = ' ([[User:SD0001/easy-merge|easy-merge]])';
Morebits.wiki.api.setApiUserAgent('[[w:User:SD0001/easy-merge.js]]');

var menu = mw.util.addPortletLink('p-cactions', '#', 'easy-merge', 'p-easy-merge', 'Redirect to another article and add merge templates to talk pages');
menu.addEventListener('click', callback);

function callback(e) {
	if (e) e.preventDefault();
	var Window = new Morebits.simpleWindow(600, 500);
	Window.setScriptName('easy-merge');
	Window.setTitle("Redirect and add merge templates to talk pages");
	Window.addFooterLink('Merging articles', 'Wikipedia:Merging');

	var form = new Morebits.quickForm(evaluate);

	form.append({
		type: 'input',
		label: 'Target page: ',
		name: 'target'
	});

	form.append({
		type: 'input', // changed to 'date' after render
		name: 'date',
		label: 'Date of merger: ',
		value: new Date().toISOString().slice(0, 10),
		tooltip: 'This date is used in the {{merged-from}} and {{merged-to}} templates'
	});


	form.append({
		type: 'checkbox',
		name: 'actions',
		list: [
			{
				label: 'Redirect this page to the target page',
				name: 'redirect',
				checked: !mw.config.get('wgIsRedirect'),
				tooltip: '{{R from merge}} will be applied to the redirect',
				subgroup: {
					type: 'input',
					label: 'Edit summary: ',
					value: 'Merged content to [[###]], redirecting',
					name: 'summary',
					tooltip: '### will be automatically replaced by name of target page',
					size: '60px'
				}
			},
			{
				label: 'Remove merge tag from target page (if it exists)',
				name: 'removemerge',
				checked: true
			},
			{
				label: 'Add {{merged-from}} to talk page of target page',
				name: 'addmergedfrom',
				checked: true
			},
			{
				label: 'Add {{merged-to}} to talk page of this page',
				name: 'addmergedto',
				checked: true
			},
			{
				label: 'Reset class of WikiProject banners to redirect',
				name: 'resetwikiprojects',
				checked: true
			}
		]
	});

	form.append({ type: 'submit', label: 'Submit' });

	var result = form.render();
	result.date.type = 'date';

	Window.setContent(result);
	Window.display();

}

function evaluate(e) {
	var form = e.target;

	var params = {};
	params.target = form.target.value;
	if (!params.target.trim()) {
		alert('Please enter the target page of merge');
		return;
	}
	params.current = Morebits.pageNameNorm;

	params.redirect = form.redirect.checked;
	params.summary = form['redirect.summary'] && form['redirect.summary'].value.replace('###', params.target);
	params.removemerge = form.removemerge.checked;
	params.addmergedfrom = form.addmergedfrom.checked;
	params.addmergedto = form.addmergedto.checked;
	params.resetwikiprojects = form.resetwikiprojects.checked;
	var dateobj = new Date(form.date.value)
	params.date = dateobj.getUTCDate() + ' ' + dateobj.getUTCMonthName() + ' ' + dateobj.getUTCFullYear();

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(form);

	if (params.redirect) {
		var page = new Morebits.wiki.page(params.current, 'Redirecting');
		page.load(function() {
			page.setPageText('#REDIRECT [[' + params.target + ']]\n\n{{R from merge}}');
			page.setEditSummary(params.summary + advert);
			page.setCreateOption('nocreate');
			page.save();
		});
	}

	if (params.removemerge) {
		var targetpage = new Morebits.wiki.page(params.target, 'Removing {{merge from}} from target page');
		targetpage.load(function(e) {
			var text = e.getPageText();
			var rgx1 = new RegExp('\\{\\{[mM]erge from\\s*\\|' + Morebits.pageNameRegex(params.current) + '[^}]*\\}\\}\\n?');
			var rgx2 = new RegExp('\\{\\{[bB]eing merged\\s*\\|' + Morebits.pageNameRegex(params.current) + '[^}]*\\}\\}\\n?');
			var newtext = text.replace(rgx1, '').replace(rgx2, '');
			if (text !== newtext) {
				targetpage.setPageText(newtext);
				targetpage.setEditSummary('Removing merge template after merging' + advert);
				targetpage.setCreateOption('nocreate');
				targetpage.save();
			} else {
				targetpage.getStatusElement().info('Not found');
			}
		});
	}

	if (params.addmergedfrom) {
		var targettalkpage = new mw.Title(params.target).getTalkPage().toText();
		var targettalk = new Morebits.wiki.page(targettalkpage, 'Adding {{merged-from}} to target talk page');
		targettalk.setPrependText('{{merged-from|' + params.current + '|' + params.date + '}}\n');
		targettalk.setEditSummary('Adding {{merged-from|' + params.current + '}}' + advert);
		targettalk.prepend();
	}

	if (params.addmergedto || params.resetwikiprojects) {
		var curentalkpage = new mw.Title(params.current).getTalkPage().toText();
		var sttext;
		if (params.addmergedto) {
			sttext = 'Adding {{merged-to}} to talk page';
		} else {
			sttext = 'Resetting WikiProject banners';
		}
		var curentalk = new Morebits.wiki.page(curentalkpage, sttext);
		curentalk.setPageSection(0);
		curentalk.load(function(e) {
			var text = e.getPageText();
			if (params.addmergedto) {
				var mergedto = '{{merged-to|' + params.target + '|' + params.date + '}}\n';
				text = mergedto + text;
			}
			if (params.resetwikiprojects) {
				text = text.replace(/\|\s*class=[^}|]*/g, '|class=redirect')
					.replace(/\|[^|}]*?importance=[^}|]*/g, '');
			}
			curentalk.setPageText(text);
			var summary;
			if (params.addmergedto && params.resetwikiprojects) {
				summary = 'Adding {{merged-to|' + params.target + '}} and resetting WikiProject banners';
			} else if (params.addmergedto) {
				summary = 'Adding {{merged-to|' + params.target + '}}';
			} else if (params.resetwikiprojects) {
				summary = 'Resetting WikiProject banners';
			}
			curentalk.setEditSummary(summary + advert);
			curentalk.save();
		});
	}

}

});
// </nowiki>