User:Awesome Aasim/editrequest.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Awesome Aasim/editrequest. |
//<nowiki>
var pages = [];
var requestPages = ["Category:Wikipedia_semi-protected_edit_requests", "Category:Wikipedia_extended-confirmed-protected_edit_requests", "Category:Wikipedia_template-protected_edit_requests", "Category:Wikipedia_fully-protected_edit_requests", "Category:Wikipedia_interface-protected_edit_requests"];
var pageCounter = 0;
var currentPage = "", currentTalkPage = "", currentSection = "";
var wikitext = "";
function disableEditor() {
$("#edit-editarea").prop("disabled", true);
$("#edit-editsummary").prop("disabled", true);
$("#edit-cancel").prop("disabled", true);
$("#edit-previewbutton").prop("disabled", true);
$("#edit-submit").prop("disabled", true);
}
function enableEditor() {
$("#edit-editarea").prop("disabled", false);
$("#edit-editsummary").prop("disabled", false);
$("#edit-cancel").prop("disabled", false);
$("#edit-previewbutton").prop("disabled", false);
$("#edit-submit").prop("disabled", false);
}
function editForm(d, p, _then) {
$(".editpage").prop("disabled", true);
$(d).removeAttr( 'style' );
var revert = $(d).html();
$(d).html("<p><b>Loading editor...</b></p>");
$.get(mw.config.get('wgScriptPath') + '/api.php', {
"action": "query",
"format": "json",
"meta": "tokens",
"type": "csrf"
}).done(function (r) {
$(d).text("");
$('<p><a title="Full editor" target="_blank" href="/w/index.php?title=' + p + '&action=edit">Full editor</a></p>').appendTo(d);
$('<textarea id="edit-editarea"/>').val(wikitext).appendTo(d).css({ "height": "500px", "overflow": "auto" });
$('<br>').appendTo(d);
$('<p></p>').text('Edit summary: Processing edit requests with [[User:Awesome Aasim/editrequest|AER tool]]:<br>').append($('<input id="edit-editsummary" placeholder="Additional description of edit">').val("")).appendTo(d);
$('<span id="edit-summary"></span>').appendTo(d);
$('<br>').appendTo(d);
$('<button id="edit-cancel">Cancel</button>').click(function (_e) {
$(".editpage").prop("disabled", false);
$(d).css({ "width": "100%", "height": "500px", "overflow": "auto" });
$(d).html(revert);
}).css({"margin-right":"5px","margin-left":"1px"}).addClass("mw-ui-button").addClass("mw-ui-destructive").appendTo(d);
$('<button id="edit-previewbutton">Preview</button>').click(function (_e) {
disableEditor();
$.get(mw.config.get('wgScriptPath') + '/api.php', {
"action": 'parse',
"prop": 'text',
"pst": 'true', // PST = pre-save transform; this makes substitution work properly
"text": $("#edit-editarea").val(),
"summary": "Processing edit requests with [[User:Awesome Aasim/editrequest|AER tool]]" + (($("#edit-editsummary").val().length > 0) ? ": " + $("#edit-editsummary").val() : ""),
"format": "json",
"title": p
}).done(function (r) {
console.log(r);
if (r.error) {
console.error(r.error);
} else {
$("#edit-preview").html(r.parse.text["*"]);
$("#edit-summary").html(r.parse.parsesummary["*"]);
}
enableEditor();
}).fail(function (_r) {
$("#edit-preview").html("<span class=\"error\">Could not parse preview. Please check your edit carefully. If in doubt, use the full editor.</span>");
enableEditor();
});
}).css({"margin-right":"5px","margin-left":"1px"}).addClass("mw-ui-button").appendTo(d);
$('<button id="edit-submit">Save</button>').click(function (_e) {
disableEditor();
$.post(mw.config.get("wgScriptPath") + '/api.php', {
"action": "edit",
"format": "json",
"title": p,
"text": $("#edit-editarea").val(),
"summary": "Processing edit requests with [[User:Awesome Aasim/editrequest|AER tool]]" + (($("#edit-editsummary").val().length > 0) ? ": " + $("#edit-editsummary").val() : ""),
"token": r.query.tokens.csrftoken
}).done(function (h) {
if (h.error) {
$(d).html("<p><b><span style=\"color:red;\">" + h.error.info + "</span></b></p>");
} else if (h.edit.nochange == "") {
$(".editpage").prop("disabled", false);
$(d).css({ "width": "100%", "height": "500px", "overflow": "auto" });
$(d).html(revert);
} else {
$(d).html("<p><b><span style=\"color:green;\">Edit saved!</span></p>");
_then();
}
}).fail(function (_h) {
});
}).css({"margin-right":"5px","margin-left":"1px"}).addClass("mw-ui-button").addClass("mw-ui-progressive").appendTo(d);
$('<div id="edit-preview"></div>').appendTo(d);
}).fail(function(r) {
throw "Unknown error";
});
}
function shuffle(arra1) {
var ctr = arra1.length, temp, index;
// While there are elements in the array
while (ctr > 0) {
// Pick a random index
index = Math.floor(Math.random() * ctr);
// Decrease ctr by 1
ctr--;
// And swap the last element with it
temp = arra1[ctr];
arra1[ctr] = arra1[index];
arra1[index] = temp;
}
return arra1;
} // from w3
function run(f) {
disableButtons();
disableEditor();
$("#editrequest-page").css({ "width": "100%", "height": "500px", "overflow": "auto" });
if (f) {
$("#editrequest-info").html("<p><b>Loading next request...</b></p>");
$("#editrequest-info-2").html("<p><b>Loading next request...</b></p>");
}
try {
if (pages[pageCounter][0]) {
currentTalkPage = pages[pageCounter][0];
currentSection = pages[pageCounter][1];
currentPage = pages[pageCounter][0].replace(/(T|(\b|_)t)alk:/g, ':');
if (currentPage[0] == ":") {
currentPage = currentPage.substring(1, currentPage.length);
} else {
currentPage = currentPage.replace(" :", ":");
}
console.log(currentPage);
parse(currentTalkPage, "#editrequest-talk", function(d) {
parse(currentPage, "#editrequest-page", function(r) {
$("#editrequest-talk").html(d);
if (document.getElementById(pages[pageCounter][1])) {
$("#editrequest-page").html(r);
enableButtons();
$("#editrequest-info").html('<p>Can you answer the <a href="#' + currentSection + '">edit request below</a>?</p>');
$("#editrequest-info-2").html("");
$(".editrequest-title").text(currentPage);
pageCounter++;
$("#editrequest-page a").attr("target", "_blank");
$("#editrequest-talk a").attr("target", "_blank");
$("#siteSub").html('<div style="font-family:sans-serif;font-style: normal;" id="editrequest-counter"></div>');
$("#editrequest-counter").text("Reviewing edit request " + pageCounter + " of " + pages.length);
} else {
pageCounter++;
run();
}
});
});
//location.href = "#" + pages[pageCounter][0];
} else {
throw "The end";
}
} catch (Error) {
$("#editrequest-info").html('<p>You\'ve reached the end!</p><p><a href="javascript:location.reload()">Reload</a> • <a href="/wiki/Wikipedia:Backlog">More backlog</a></p>');
$("#editrequest-info-2").html('');
disableButtons();
$("#editrequest-talk").html("");
$("#editrequest-page").html("");
}
//location.href = "#" + pages[pageCounter][1];
}
function parse(page, where, fn) {
var result = "";
$.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'parse',
'page': page,
'prop': 'text',
'format': 'json'
}).done(function (r) {
if (r.error) {
if (r.error.code == "missingtitle") {
fn('<span class="error">This page does not exist.</span>');
} else {
throw r.error;
}
} else {
result = r.parse.text["*"];
//console.log(result);
fn(result);
}
}).fail(function (r) {
$("#editrequest-info").html('<p><span class="error">Failed to load: there is no Internet connection.</span></p>');
$("#editrequest-talk").html("<p>Error has occurred. Please reload.</p>");
$("#editrequest-page").html("<p>Error has occurred. Please reload.</p>");
throw "Connection failed";
});
$.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'parse',
'page': page,
'prop': 'wikitext',
'format': 'json'
}).done(function (r) {
if (r.error) {
if (r.error.code == "missingtitle") {
wikitext = "";
} else {
throw r.error;
}
} else {
wikitext = r.parse.wikitext["*"];
}
}).fail(function (r) {
$("#editrequest-info").html('<p><span class="error">Failed to load: there is no Internet connection.</span></p>');
$("#editrequest-talk").html("<p>Error has occurred. Please reload.</p>");
$("#editrequest-page").html("<p>Error has occurred. Please reload.</p>");
throw "Connection failed";
});
}
function disableButtons() {
$(".advance").prop("disabled", true);
$(".editpage").prop("disabled", true);
$(".edittalk").prop("disabled", true);
}
function enableButtons() {
$(".advance").prop("disabled", false);
$(".editpage").prop("disabled", false);
$(".edittalk").prop("disabled", false);
}
$(document).ready(function () {
if (mw.config.get("wgPageName").toLowerCase() == "Special:BlankPage/EditProtected".toLowerCase()) {
$("#mw-content-text").text("");
$('<div class="editrequest-tools">').append($('<div id="editrequest-info"></div>')).append($('<div class="editrequest-buttons"></div>')).appendTo("#mw-content-text")
$('<div id="editrequest-talk"></div>').appendTo("#mw-content-text");
$('<div id="editrequest-page"></div>').appendTo("#mw-content-text");
$('<div class="editrequest-tools">').append($('<div id="editrequest-info-2"></div>')).append($('<div class="editrequest-buttons"></div>')).appendTo("#mw-content-text");
if (mw.config.get("wgUserGroups").includes("autoconfirmed") || mw.config.get("wgUserGroups").includes("confirmed") || mw.config.get("wgUserGroups").includes("extendedconfirmed") || mw.config.get("wgUserGroups").includes("templateeditor") || mw.config.get("wgUserGroups").includes("sysop") || mw.config.get("wgUserGroups").includes("interface-admin")) {
//$("#editrequest-tools").css({ "position": "sticky", "top": "47.5px", "background-color": "white", "z-index": 99 });
//$("#editrequest-buttons").css({ "position": "sticky", "top": "53.5px", "background-color": "white" });
$("#editrequest-talk").css({ "width": "100%", "height": "500px", "overflow": "auto" });
$("#editrequest-page").css({ "width": "100%", "height": "900px", "overflow": "auto" });
$("<p></p>").append($('<button class="editpage"/>').text("Edit").click(function (e) {
location.href = "#editrequest-page";
editForm("#editrequest-page", currentPage, function() {
$("#editrequest-page").css({ "width": "100%", "height": "500px", "overflow": "auto" });
});
}).addClass("mw-ui-button").addClass("mw-ui-progressive").css({"margin-right":"5px","margin-left":"1px"})).append($('<button class="edittalk"/>').text("Open talk").click(function (e) {
window.open("https://en.wikipedia.org/wiki/" + currentTalkPage + "#" + currentSection);
}).addClass("mw-ui-button").css({"margin-right":"5px","margin-left":"1px"})).append($('<button class="advance"/>').text("\u2192").click(function (e) {
e.preventDefault();
run("f");
}).addClass("mw-ui-button").css({"margin-right":"5px","margin-left":"1px"})).appendTo(".editrequest-buttons");
$('<div id="mw-indicator-mw-helplink" class="mw-indicator"><a href="https://en.wikipedia.org/wiki/User:Awesome_Aasim/editrequest" target="_blank" class="mw-helplink">Help</a></div>').appendTo(".mw-indicators");
$("#mw-indicator-mw-helplink a").attr('style', 'background-image: url(/w/resources/src/mediawiki.helplink/images/helpNotice.png?15b31);background-image: linear-gradient(transparent,transparent),url(/w/resources/src/mediawiki.helplink/images/helpNotice.svg?46d34);')
background-position: left center;
background-repeat: no-repeat;
display: inline-block;
height: 20px;
padding-left: 25px;
line-height: 20px;')
disableButtons();
$("#editrequest-page").before("<h1>Article</h1>");
$(".firstHeading").html("Answer edit requests: <span class=\"editrequest-title\">Loading...</span>");
$("#section_0").html("Answer edit requests: <span class=\"editrequest-title\">Loading...</span>");
$("title").text("Answer edit requests - Wikipedia");
$('#editrequest-info').html("<p><b>Loading...</b></p>");
try {
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"list": "categorymembers",
"cmtitle": requestPages[0],
"cmprop": "title",
"cmlimit": "max"
}).done(function (r) {
if (r.error) {
throw r.error;
} else {
var result = r.query.categorymembers;
for (var j in result) {
pages.push([result[j].title, "editsemiprotected"]);
}
if (mw.config.get("wgUserGroups").includes("extendedconfirmed") || mw.config.get("wgUserGroups").includes("templateeditor") || mw.config.get("wgUserGroups").includes("sysop") || mw.config.get("wgUserGroups").includes("interface-admin")) {
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"list": "categorymembers",
"cmtitle": requestPages[1],
"cmprop": "title",
"cmlimit": "max"
}).done(function (r) {
if (r.error) {
throw r.error;
} else {
var result = r.query.categorymembers;
for (var j in result) {
pages.push([result[j].title, "editextendedprotected"]);
}
if (mw.config.get("wgUserGroups").includes("templateeditor") || mw.config.get("wgUserGroups").includes("sysop") || mw.config.get("wgUserGroups").includes("interface-admin")) {
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"list": "categorymembers",
"cmtitle": requestPages[2],
"cmprop": "title",
"cmlimit": "max"
}).done(function (r) {
if (r.error) {
throw r.error;
} else {
var result = r.query.categorymembers;
for (var j in result) {
pages.push([result[j].title, "edittemplateprotected"]);
}
if (mw.config.get("wgUserGroups").includes("sysop") || mw.config.get("wgUserGroups").includes("interface-admin")) {
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"list": "categorymembers",
"cmtitle": requestPages[3],
"cmprop": "title",
"cmlimit": "max"
}).done(function (r) {
if (r.error) {
throw r.error;
} else {
var result = r.query.categorymembers;
for (var j in result) {
pages.push([result[j].title, "editprotected"]);
}
if (mw.config.get("wgUserGroups").includes("interface-admin")) {
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"list": "categorymembers",
"cmtitle": requestPages[4],
"cmprop": "title",
"cmlimit": "max"
}).done(function (r) {
if (r.error) {
throw r.error;
} else {
var result = r.query.categorymembers;
for (var j in result) {
pages.push([result[j].title, "editinterfaceprotected"]);
}
}
pages = shuffle(pages);
run();
}).fail(function (r) {
throw "Unknown error";
});
} else {
pages = shuffle(pages);
run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
pages = shuffle(pages);
run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
pages = shuffle(pages);
run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
pages = shuffle(pages);
run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} catch (Error) {
$("#editrequest-info").html('<p><span class="error">Reload. We have hit an error. If you are still having trouble, leave a message <a href="/wiki/User_talk:Awesome_Aasim/editrequest">here</a>.</span></p>');
console.error(Error);
}
} else {
if (mw.config.get("wgUserName")) {
$(".firstHeading").text("Permission error");
$("#section_0").text("Permission error");
$("title").text("Permission error - Wikipedia");
$('#editrequest-info').html('<p>Access to this tool is restricted to <a href="/wiki/Wikipedia:Autoconfirmed">autoconfirmed</a> and <a href="/wiki/Wikipedia:Confirmed">confirmed</a> users.</p><p id="mw-returnto">Return to <a href="/wiki/Main_Page">Main Page</a>.</p>');
}
}
} else if (mw.config.get("wgPageName") == "Category:Wikipedia edit requests" || requestPages.includes(mw.config.get("wgPageName"))) {
$("#siteNotice").append('<p>Consider using <a href="/wiki/Special:BlankPage/EditProtected">the edit protected tool</a> to review edit requests!</p>');
}
});
//</nowiki>