Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/** * 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(/<script/g, '<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: config.summary.replace(/\$title/g, titleInput.getValue()) }; }).then(function() { window.location.href = mw.util.getUrl(requestsPageTitle); }); }); });