User:SD0001/easy-merge.js

/* jshint maxerr: 999 */ /* */ $.when(	mw.loader.using(['mediawiki.Title', 'ext.gadget.morebits']),	$.ready ).then(function {

// hide on special pages and talk pages if (mw.config.get('wgNamespaceNumber') < 0 || mw.config.get('wgNamespaceNumber') % 2 === 1 || !mw.config.get('wgRevisionId')) { return; }

var advert = ' (easy-merge)';

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',		value: (mw.config.get('wgIsRedirect') && $('div.redirectMsg a').length) ? $('div.redirectMsg a').text : ''	});

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 and  templates'	});

form.append({		type: 'checkbox',		name: 'actions',		list: [			{				label: 'Redirect this page to the target page',				name: 'redirect',				checked: !mw.config.get('wgIsRedirect'),				tooltip: 'Replace contents with redirect to target page. will be applied to the redirect. ' +					' will also be applied if applicable',				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  to talk page of target page',				name: 'addmergedfrom',				checked: true			},			{				label: 'Add  to talk page of this page',				name: 'addmergedto',				checked: true			},			{				label: 'Adjust WikiProject banners and templates', tooltip: 'For WikiProject banners, class is set to redirect and importance is removed. Any media needed templates are also removed', name: 'adjusttalktemplates', checked: true },			{				label: 'Retain categories on redirect', tooltip: 'Do not remove the categories on the page while redirecting', name: 'retaincats', checked: false }		]	});

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

var result = form.render; result.date.type = 'date'; result.date.required = true;

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.adjusttalktemplates = form.adjusttalktemplates.checked; params.retaincats = form.retaincats.checked;

var dateobj = new Morebits.date(form.date.value); if (isNaN(dateobj.getTime)) { alert('Invalid date. Please enter in YYYY-MM-DD format'); // should arise only for browsers w/o datepicker return; }	params.date = dateobj.getUTCDate + ' ' + dateobj.getUTCMonthName + ' ' + dateobj.getUTCFullYear;

Morebits.simpleWindow.setButtonsEnabled(false); Morebits.status.init(form); Morebits.wiki.api.setApiUserAgent('w:User:SD0001/easy-merge.js');

if (params.redirect) { var page = new Morebits.wiki.page(params.current, 'Redirecting'); page.load(function(page) {			var pageText = '#REDIRECT ' + params.target + '\n\n';			if (params.target.indexOf('#') !== -1) {				pageText += '\n';			}			if (params.retaincats) {				var cats = page.getPageText.match(/\[\[[Cc]ategory:.*?\]\]/g);				if (cats) {					pageText += '\n\n' + cats.join('\n');				}			}			page.setPageText(pageText);			page.setEditSummary(params.summary + advert);			page.setCreateOption('nocreate');			page.save;		});	}

if (params.removemerge) { var targetpage = new Morebits.wiki.page(params.target, 'Removing from target page'); targetpage.load(function(e) {			var text = e.getPageText;			var rgx1 = new RegExp('\\{\\{[mM]erge[- ]?[fF]rom\\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 to target talk page'); targettalk.setPrependText('\n'); targettalk.setEditSummary('Adding ' + advert); targettalk.prepend; }

if (params.addmergedto || params.adjusttalktemplates) { var curentalkpage = new mw.Title(params.current).getTalkPage.toText; var sttext; if (params.addmergedto) { sttext = 'Adding to talk page'; } else { sttext = 'Adjusting 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 = '\n';				text = mergedto + text;			}			if (params.adjusttalktemplates) {				text = text					.replace(/\|\s*class\s*=[^}|]*/g, '|class=redirect') // set class to redirect					.replace(/\|[^|}]*?importance\s*=[^}|]*/g, )  // remove importance param					.replace(/\|(?:[^|}]*-needed|needs-[^|}]*)\s*=[^|}]*/g, )  // remove any media-needed or needs-media params					.replace(/\{\{[^|}]* (?:requested|needed)[^}]*\}\}\n?/g, ); // remove any  templates			}			if (text ===  && e.getPageText === '') {				return; // otherwise in this case, page is created as empty. Morebits bug.			} 			curentalk.setPageText(text);			var summary;			if (params.addmergedto && params.adjusttalktemplates) {				summary = 'Adding  and adjusting WikiProject banners';			} else if (params.addmergedto) {				summary = 'Adding '; } else if (params.adjusttalktemplates) { summary = 'Adjusting WikiProject banners'; }			curentalk.setEditSummary(summary + advert); curentalk.save; });	}

}

}); /* */