MediaWiki:Gadget-Adiutor-RFD-Finalizer.js
Jump to navigation
Jump to search
Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
Documentation for this user script can be added at MediaWiki:Gadget-Adiutor-RFD-Finalizer. |
/*
* Adiutor: Adiutor enables versatile editing options and modules to assist a variety of user actions to enhance the Wikipedia editing experience.
* Author: Vikipolimer
* Learn more at: https://meta.wikimedia.org/wiki/Adiutor
* Licensing and Attribution: Licensed under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
* Module: DR Closer
*/
/* <nowiki> */
// Get essential configuration from MediaWiki
var mwConfig = mw.config.get(["wgPageName"]);
var api = new mw.Api();
var pageNameWithoutPrefix = mwConfig.wgPageName.replace(/^Commons:Deletion_requests\//, '');
var rationaleInput;
var selectedOption, pageName, dialogWarning, actionOption;
var InputFilled = false;
rationaleInput = new OO.ui.MultilineTextInputWidget({
placeholder: 'Please enter your rationale for the result here.',
indicator: 'required',
notices: ['This field is required, please do not leave it blank.'],
classes: ['afd-helper-comment-textarea']
});
var dialogWarning = new OO.ui.MessageWidget({
type: 'warning',
inline: true,
label: new OO.ui.HtmlSnippet('Nomination is being finalized!<br><small>You are currently finalizing the nomination, please provide a rationale to conclude the discussion.</small>')
});
var pageName = new OO.ui.MessageWidget({
type: 'notice',
icon: 'article',
label: new OO.ui.HtmlSnippet('<a href="/wiki/'.concat(pageNameWithoutPrefix.trim(), '" target="_blank">').concat(pageNameWithoutPrefix.trim(), "</a>")),
classes: ['afd-helper-page-name']
});
function closerDialog(config, buttonSelect) {
closerDialog.super.call(this, config, buttonSelect);
}
OO.inheritClass(closerDialog, OO.ui.ProcessDialog);
closerDialog.static.title = 'Adiutor (Beta) - Finalizer for RFD';
closerDialog.static.name = 'closerDialog';
closerDialog.static.actions = [{
action: 'continue',
modes: 'edit,preview',
label: 'Finalize',
disabled: InputFilled,
icon: 'lock',
flags: ['primary', 'progressive']
}, {
modes: 'edit',
label: 'Cancel',
flags: 'safe',
icon: 'close'
}, {
action: 'back',
modes: 'about,preview',
label: 'Back',
flags: 'safe'
}];
closerDialog.prototype.initialize = function() {
closerDialog.super.prototype.initialize.apply(this, arguments);
var buttonOptions = [{
id: 1,
data: 'KEPT',
label: 'Kept',
}, {
id: 3,
data: 'DELETED',
label: 'Deleted',
}];
var buttonSelect = new OO.ui.ButtonSelectWidget({
items: buttonOptions.map(function(option) {
return new OO.ui.ButtonOptionWidget({
id: option.id,
label: option.label,
icon: option.icon,
invisibleLabel: option.invisibleLabel,
data: option.data,
classes: ['afd-opinion-select-btn']
});
}),
classes: ['afd-opinion-select-btn-group']
});
actionOption = new OO.ui.FieldLayout(new OO.ui.CheckboxInputWidget({
selected: true
}), {
align: 'inline',
label: 'Auto-delete page in delete results',
help: 'If you enable this option, nominated pages that result in deletion will be deleted automatically.'
});
buttonSelect.on('select', function() {
selectedOption = buttonSelect.findSelectedItem();
if(selectedOption && selectedOption.data === 'KEPT') {
inputValue = 'no valid reason for deletion.';
}
if(selectedOption && selectedOption.data === 'DELETED') {
inputValue = 'per nomination.';
}
rationaleInput.setValue(inputValue);
updateTemplate();
});
rationaleInput.off('input').on('input', function() {
updateTemplate();
});
rationaleInput.on('change', function() {
updateTemplate();
InputFilled = true;
});
rationaleInput.on('input', function() {
updateTemplate();
InputFilled = true;
});
function updateTemplate() {
var inputValue = rationaleInput.getValue();
deletionFooter = '{{DeletionFooter|' + (selectedOption ? selectedOption.data : '') + '|' + inputValue + '. ~~~~}}';
}
this.closerPanel = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.closerPanel.$element.append(dialogWarning.$element, pageName.$element, '</br>', buttonSelect.$element, '</br>', rationaleInput.$element, actionOption.$element);
this.panel2 = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.stackLayout = new OO.ui.StackLayout({
items: [this.closerPanel]
});
this.$body.append(this.stackLayout.$element);
};
closerDialog.prototype.getSetupProcess = function(data) {
return closerDialog.super.prototype.getSetupProcess.call(this, data).next(function() {
this.actions.setMode('edit');
}, this);
};
closerDialog.prototype.getActionProcess = function(action) {
if(action === 'continue') {
return new OO.ui.Process(function() {
if(rationaleInput.value != "") {
api.postWithToken('csrf', {
action: 'edit',
title: mwConfig.wgPageName,
prependtext: '{{DeletionHeader}}' + "\n",
appendtext: "\n" + deletionFooter + "",
summary: 'Nomination finalized',
tags: 'Adiutor',
format: 'json'
}).done(function() {
if(selectedOption.data === 'KEPT') {
removeDeleteTemplateFromNominated();
}
if(selectedOption.data === 'DELETED') {
if(actionOption.getField().isSelected()) {
deleteNomnated();
}
}
location.reload();
});
} else {
alertDialog("Express your opinion!", "Decisions in deletion nominations are made based on policies and guidelines, not the number of opinions.");
}
});
}
return closerDialog.super.prototype.getActionProcess.call(this, action);
};
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
var dialog = new closerDialog({
size: 'large',
classes: ['afd-helper-window']
});
windowManager.addWindows([dialog]);
windowManager.openWindow(dialog);
function removeDeleteTemplateFromNominated() {
var pageContent;
api.get({
action: 'parse',
page: pageNameWithoutPrefix,
prop: 'wikitext',
format: "json"
}).done(function(data) {
pageContent = data.parse.wikitext['*'];
var templatesCleanedPageContent = pageContent.replace(/\{\{\s*delete\s*\|.*?\}\}\n?/gi, "");
api.postWithToken('csrf', {
action: 'edit',
title: pageNameWithoutPrefix,
text: templatesCleanedPageContent,
summary: 'Removing the template due to [[' + mwConfig.wgPageName + '|finalization]].',
tags: 'Adiutor',
format: 'json'
}).done(function() {
removeNominationFromAfdPage();
});
});
}
function deleteNomnated() {
api.postWithToken('csrf', {
action: 'delete',
title: pageNameWithoutPrefix,
reason: 'Deleted per [[' + mwConfig.wgPageName + '|nomination]].',
tags: 'Adiutor',
format: 'json'
}).done(function() {
api.postWithToken('csrf', {
action: 'delete',
title: "File talk:" + pageNameWithoutPrefix,
reason: 'Deleted per [[' + mwConfig.wgPageName + '|nomination]].',
tags: 'Adiutor',
format: 'json'
}).done(function() {});
});
}
function alertDialog(title, message) {
var AlertDialog = new OO.ui.MessageDialog();
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
windowManager.addWindows([AlertDialog]);
windowManager.openWindow(AlertDialog, {
title: title,
message: message,
});
}
/* </nowiki> */