User:SD0001/easy-merge.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:SD0001/easy-merge. |
// <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: 'checkbox',
name: 'actions',
list: [
{
label: 'Redirect this page to target',
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 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();
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;
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');
}
});
}
var d = new Date();
var currentdate = d.getUTCDate() + ' ' + d.getUTCMonthName() + ' ' + d.getUTCFullYear();
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.target + '|' + currentdate + '}}\n');
targettalk.setEditSummary('Adding {{merged-from|' + params.target + '}}' + 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 + '|' + currentdate + '}}\n';
text = mergedto + text;
}
if (params.resetwikiprojects) {
text = text.replace(/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>