// <nowiki>
if (!EditRequestor) {
var EditRequestor = {}
mw.loader.using("jquery.ui", function() {
$(document).ready(function() {
EditRequestor.url = new URL(location);
let url = EditRequestor.url;
if (mw.config.get('wgAction') == 'edit' && url.searchParams.get('section') == 'new' && url.searchParams.get('preload') == 'Template:Submit an edit request/preload') {
EditRequestor.requestPage = '';
EditRequestor.requestType = '';
var preloadArray = EditRequestor.url.searchParams.getAll('preloadparams[]');
for (var item of preloadArray) {
switch (item) {
case 'edit fully-protected': EditRequestor.requestType = item;
break;
case 'edit interface-protected': EditRequestor.requestType = item;
break;
case 'edit template-protected': EditRequestor.requestType = item;
break;
case 'edit extended-protected': EditRequestor.requestType = item;
break;
case 'edit semi-protected': EditRequestor.requestType = item;
break;
default: EditRequestor.requestPage = item;
break;
}
}
$('<form id="editrequestor-form"></form>').append('<p>Please make the change that you unambiguously would like to implement.</p><textarea id="editrequestor-area" disabled></textarea><textarea name="reason" id="editrequestor-reason" disabled placeholder="Explanation for change, or explanation of change if unsure what needs changing.">Rationale: </textarea><div id="editrequestor-reason-preview"></div>').dialog({
'buttons': [{
"text": "Submit",
"click": async function() {
// fetch diff
let wikitext = $("#editrequestor-area").val();
let reason = $("#editrequestor-reason").val();
let compareRes = await $.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'compare',
'format': 'json',
'fromtitle': EditRequestor.requestPage,
'toslots': 'main',
'totext-main': wikitext
});
if (compareRes.error) {
alert(compareRes.error.info);
return;
}
let diffHTML = compareRes.compare['*'];
if (diffHTML == '' && reason == '') {
alert("Cannot complete the edit request. Change and reason is missing!");
return;
} else if (diffHTML == '') {
if (!confirm("Change is missing. Make sure that the change is explained well in the reason field, or your edit request will be declined as unclear!")) {
return;
}
} else if (reason == '') {
if (!confirm("Reason is missing. Your edit request may be declined if the reason for the uncontroversial change is not obvious!")) {
return;
}
}
// place in edit request
let editRequestWikitext = `
== ${url.searchParams.get("preloadtitle")} ==
{{${EditRequestor.requestType}|answered=no}}
<table class="diff diff-type-table diff-contentalign-left diff-editfont-monospace mw-collapsible mw-collapsed">${diffHTML}</table>${reason ? `
${reason}` : ``}
~~~~
`;
// save
let saveResult = await (new mw.Api()).postWithEditToken( {
"action": "edit",
"title": mw.config.get("wgPageName"),
"appendtext": editRequestWikitext,
"summary": "Creating new edit request (EditRequestor)"
})
console.log(saveResult);
if (saveResult.error) {
alert(saveResult.error.info);
} else {
let nexturl = new URL(location.href);
nexturl.searchParams.delete("action");
location.href = nexturl;
}
}
},
{
"text": "Preview",
"click": async function() {
// preview change
let wikitext = $("#editrequestor-area").val();
let parsedText = await (new mw.Api()).parse(wikitext, {"title": EditRequestor.requestPage})
$(`<div id="editrequestor-preview"></div>`).html(parsedText).dialog({modal: true, width: (0.75 * window.innerWidth > 300) ? 0.75 * window.innerWidth : 300});
}
},
{
"text": "Show change",
"click": async function() {
// show diff of change
let wikitext = $("#editrequestor-area").val();
let compareRes = await $.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'compare',
'format': 'json',
'fromtitle': EditRequestor.requestPage,
'toslots': 'main',
'totext-main': wikitext
});
console.log(compareRes);
$(`<div id="editrequestor-change"></div>`).html(`
<table class="diff diff-type-table diff-contentalign-left diff-editfont-monospace">
<colgroup><col class="diff-marker">
<col class="diff-content">
<col class="diff-marker">
<col class="diff-content">
</colgroup>
${compareRes.compare['*']}</table>`).dialog({modal: true, width: (0.75 * window.innerWidth > 300) ? 0.75 * window.innerWidth : 300});
}
}
],
width: (0.50 * window.innerWidth > 300) ? 0.50 * window.innerWidth : 300,
modal: true
});
$("#editrequestor-area").text("Loading...");
EditRequestor.timeout = null;
$("#editrequestor-reason").keydown(function() {
if (EditRequestor.timeout) return;
let that = this;
EditRequestor.timeout = window.setTimeout(async function() {
let previewResult = await (new mw.Api()).parse($(that).val(), {"title": mw.config.get('wgPageName')});
$("#editrequestor-reason-preview").html(previewResult);
EditRequestor.timeout = null;
}, 500);
});
$.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'parse',
'format': 'json',
'prop': 'wikitext',
'page': EditRequestor.requestPage
}).done(function(result) {
if (result.error) {
$("#editrequestor-area").text('Error: ' + result.error.info);
} else {
$("#editrequestor-area").text(result.parse.wikitext['*']);
$("#editrequestor-area").prop("disabled", false);
$("#editrequestor-reason").prop("disabled", false);
}
});
}
});
});
}
// </nowiki>