//<nowiki>
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'oojs-ui'], function () {
'use strict';
var config = {};
$.when(
mw.loader.using(['mediawiki.util', 'mediawiki.api']),
$.ready
).then(function () {
config.mw = mw.config.get([
"wgPageName",
"wgNamespaceNumber"
]);
var talkNamespaces = [1, 2, 3, 5, 7, 11, 14, 15];
if (talkNamespaces.indexOf(config.mw.wgNamespaceNumber) !== -1) {
mw.util.addPortletLink(
'p-cactions',
'#',
'Blank Page',
'ca-blankPage',
'Blank Page',
null,
'#ca-move'
);
$('#ca-blankPage').on('click', function () {
showBlankOptionsModal();
});
}
function showBlankOptionsModal() {
var windowManager = new OO.ui.WindowManager();
$(document.body).append(windowManager.$element);
function BlankOptionsDialog(config) {
BlankOptionsDialog.super.call(this, config);
}
OO.inheritClass(BlankOptionsDialog, OO.ui.ProcessDialog);
BlankOptionsDialog.static.name = 'blankOptionsDialog';
BlankOptionsDialog.static.title = 'Blank Page';
BlankOptionsDialog.static.actions = [
{ action: 'accept', label: 'Blank Page', flags: ['primary', 'progressive'] },
{ action: 'cancel', label: 'Cancel', flags: 'safe' }
];
BlankOptionsDialog.prototype.initialize = function () {
BlankOptionsDialog.super.prototype.initialize.apply(this, arguments);
var reasonDropdown = new OO.ui.DropdownWidget({
menu: {
items: [
new OO.ui.MenuOptionWidget({ data: 'No useful content', label: 'No useful content' }),
new OO.ui.MenuOptionWidget({ data: 'Out of project scope', label: 'Out of project scope' }),
new OO.ui.MenuOptionWidget({ data: 'other', label: 'Custom reason', selected: true })
]
}
});
var manualInput = new OO.ui.TextInputWidget({
placeholder: 'Enter custom reason',
value: ''
});
var manualField = new OO.ui.FieldLayout(manualInput, {
label: 'Custom reason:',
align: 'top'
});
var dialog = this;
var initialItem = reasonDropdown.getMenu().findSelectedItem();
if (initialItem && initialItem.getData() === 'other') {
manualField.$element.show();
} else {
manualField.$element.hide();
}
dialog.$body.css('min-height', '175px');
reasonDropdown.setLabel(initialItem.getLabel());
dialog.updateSize();
reasonDropdown.getMenu().on('choose', function (item) {
reasonDropdown.setLabel(item.getLabel());
if (item.getData() === 'other') {
manualField.$element.show();
} else {
manualField.$element.hide();
}
dialog.$body.css('min-height', '175px');
dialog.updateSize();
});
this.content = new OO.ui.PanelLayout({
padded: true,
expanded: false
});
this.content.$element.append(
new OO.ui.FieldsetLayout({
items: [
new OO.ui.FieldLayout(reasonDropdown, {
label: 'Select a reason:',
align: 'top'
}),
manualField
]
}).$element
);
this.reasonDropdown = reasonDropdown;
this.manualInput = manualInput;
this.$body.append(this.content.$element);
};
BlankOptionsDialog.prototype.getActionProcess = function (action) {
if (action === 'accept') {
return new OO.ui.Process(() => {
var selected = this.reasonDropdown.getMenu().findSelectedItem().getData();
var blankReason = selected === 'other' ? this.manualInput.getValue().trim() : selected;
blankPageWithoutReplacement(config.mw.wgPageName, blankReason);
this.close();
});
} else if (action === 'cancel') {
return new OO.ui.Process(() => {
this.close();
});
}
return BlankOptionsDialog.super.prototype.getActionProcess.call(this, action);
};
windowManager.addWindows([new BlankOptionsDialog()]);
windowManager.openWindow('blankOptionsDialog');
}
function blankPageWithoutReplacement(pageName, reason) {
var queryParams = {
action: "edit",
title: pageName,
text: "",
summary: reason + " (using [[m:User:Max/BlankAPage.js|BlankAPage.js]])",
nocreate: true
};
var API = new mw.Api({
ajax: {
headers: {
"Api-User-Agent": "User:Max/BlankAPage"
}
}
});
API.postWithToken("csrf", queryParams).then(function () {
location.reload();
});
}
});
});
//</nowiki>