MediaWiki:Request-page-protection-form.js

/**

* Invoked via mw:Snippets/Load JS and CSS by URL for

* Wikipedia:Requests_for_page_protection

*

* Authors: User:Enterprisey, User:SD0001

*/

/**

* Fetch JSON page with 1-day caching

*/

function fetchJsonData(page) {

return $.getJSON("/w/api.php?action=query&format=json&formatversion=2" +

"&titles=" + encodeURIComponent(page) + "&prop=revisions&rvprop=content" +

"&uselang=content&maxage=86400&smaxage=86400" // parameters to force caching

).then(function(apiResponse) {

return JSON.parse(apiResponse.query.pages[0].revisions[0].content);

});

}

$.when(fetchJsonData("Wikipedia:Requests for page protection/Forms-configuration.json"), $.ready, mw.loader.using(['mediawiki.api', 'mediawiki.widgets', 'mediawiki.util'])).then(function(config) {

if ((mw.config.get("wgPageName") !== "Wikipedia:Requests_for_page_protection/Increase/Form") &&

(mw.config.get("wgPageName") !== "Wikipedia:Requests_for_page_protection/Decrease/Form") &&

(mw.config.get("wgPageName") !== "Wikipedia:Requests_for_page_protection/Edit/Form")) {

return;

}

var api = new mw.Api();

var previewApi = new mw.Api();

// either 'Increase', 'Decrease', or 'Edit'

var subpage = (mw.config.get("wgPageName").indexOf('Increase') >= 0) ? 'Increase' : ((mw.config.get(

"wgPageName").indexOf('Decrease') >= 0) ? 'Decrease' : 'Edit');

var requestsPageTitle = 'Wikipedia:Requests_for_page_protection/' + subpage;

config = config[subpage];

var titleInput = new mw.widgets.TitleInputWidget({

'showMissing': false,

'required': true,

'value': mw.util.getParamValue('prefillPage') || '',

});

var reasonInput = new OO.ui.MultilineTextInputWidget({

'placeholder': config.reasonInputPlaceholder,

'required': 'true'

});

var reasonPreview = new OO.ui.LabelWidget();

var submitButton = new OO.ui.ButtonWidget({

'label': 'Submit request',

'flags': ['progressive', 'primary'],

'accesskey': 's'

});

var fieldset = new OO.ui.FieldsetLayout();

fieldset.addItems([

new OO.ui.FieldLayout(titleInput, {

'label': 'Page title:',

align: 'top'

}),

new OO.ui.FieldLayout(reasonInput, {

'label': config.reasonInputLabel,

align: 'top'

}),

new OO.ui.FieldLayout(reasonPreview, {

'label': 'Preview:',

align: 'top'

}),

new OO.ui.FieldLayout(submitButton)

]);

$("#mw-content-text").empty().append(fieldset.$element);

function makeRequestText() {

var reason = reasonInput.getValue() + (

(reasonInput.getValue().indexOf('~~' + '~~') >= 0)

? ''

: (' ~~' + '~~'));

return config.template.replace(/\$title/g, titleInput.getValue()).replace(/\$reason/g, reason)

}

function updateForm() {

var hasTitle = titleInput.getValue().trim().length > 0;

var hasReason = reasonInput.getValue().trim().length > 0;

var formEnabled = hasTitle && hasReason;

submitButton.setDisabled(!formEnabled);

var reasonOrRequest = (subpage === 'Edit') ? 'request' : 'reason';

if (!hasTitle && !hasReason) submitButton.setLabel('Select page and enter ' + reasonOrRequest);

else if (!hasTitle) submitButton.setLabel('Select page');

else if (!hasReason) submitButton.setLabel('Enter ' + reasonOrRequest);

else submitButton.setLabel('Submit request');

if (formEnabled) {

previewApi.abort();

previewApi.parse(makeRequestText(), {

pst: true,

title: requestsPageTitle

}).then(function(text) {

text = text.replace(/