User:SD0001/rpp-form.js

/** * Invoked via Snippets/Load JS and CSS by URL for * 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);	}); }

/** * Substitute values of placeholders in text */ function substitute(text, values) { $.each(values, function (placeholder, value) {		text = text.replace(new RegExp(mw.util.escapeRegExp(placeholder), 'g'), value.replace(/$/g, '$$$$'));	}); return text; }

$.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 substitute(config.template, {       	'$title': titleInput.getValue,        	'$reason': 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(/<script/g, '&lt;script');				reasonPreview.$element.html(text);			}); }   }    titleInput.on('change', updateForm); reasonInput.on('change', updateForm);

submitButton.on('click', function {       updateForm;        if (submitButton.isDisabled) {            return;        }

submitButton.setDisabled(true); submitButton.setLabel('Submitting...'); api.edit(requestsPageTitle, function {           return {                appendtext: '\n\n' + makeRequestText,                summary: substitute(config.summary, { '$title': titleInput.getValue })            };        }).then(function {            window.location.href = mw.util.getUrl(requestsPageTitle);        }); }); });