User:Awesome Aasim/editrequest.js/stable.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. |
Documentation for this user script can be added at User:Awesome Aasim/editrequest.js/stable. |
/* FUNCTION DEFINITIONS */
//<nowiki>
AER.pages = [];
AER.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"];
AER.pageCounter = 0;
AER.currentPage = "";
AER.currentTalkPage = "";
AER.wikitext = "";
AER.disableEditor = function() {
$("#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);
};
AER.enableEditor = function() {
$("#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);
};
AER.editForm = function(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) {
$.get(mw.config.get('wgScriptPath') + '/api.php', {
"action": "parse",
"format": "json",
"prop": "wikitext",
"page": AER.currentPage,
"type": "csrf"
}).done(function(wt) {
if (wt.error) {
if (wt.error.code == "missingtitle") {
AER.wikitext = "";
} else {
alert("Error while loading editor: " + wt.error);
location.reload();
}
} else {
AER.wikitext = wt.parse.wikitext["*"];
$(d).text("");
$('<form id="AEReditform"></form>').appendTo(d);
$('<p><a title="Full editor" target="_blank" href="/w/index.php?title=' + p + '&action=edit">Full editor</a></p>').appendTo("#AEReditform");
$('<textarea id="edit-editarea"/>').val(AER.wikitext).appendTo("#AEReditform").css({ "height": "500px", "overflow": "auto" });
$('<br>').appendTo("#AEReditform");
$('<p></p>').html('Edit summary: Processing edit requests with [[User:Awesome Aasim/editrequest|AER tool]]: ').append($('<input id="edit-editsummary" placeholder="Additional description of edit">').val("")).appendTo("#AEReditform");
$('<span id="edit-summary"></span>').appendTo("#AEReditform");
$('<br>').appendTo("#AEReditform");
$('<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("#AEReditform");
$('<button id="edit-previewbutton">Preview</button>').click(function (_e) {
AER.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["*"]);
}
AER.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>");
AER.enableEditor();
});
}).css({ "margin-right": "5px", "margin-left": "1px" }).addClass("mw-ui-button").appendTo("#AEReditform");
$('<button id="edit-submit">Save</button>').click(function (_e) {
AER.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) {
$("<p><b><span style=\"color:red;\"></span></b></p>").text(h.error.info).appendTo(d);
} 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("#AEReditform");
$('<div id="edit-preview"></div>').appendTo("#AEReditform");
}
}).fail(function(wt) {
});
}).fail(function (r) {
throw "Unknown error";
});
};
AER.shuffle = function(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
AER.run = function(f) {
AER.disableButtons();
AER.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 (AER.pages[AER.pageCounter][0]) {
AER.currentTalkPage = AER.pages[AER.pageCounter][0];
AER.currentSection = AER.pages[AER.pageCounter][1];
AER.currentPage = AER.pages[AER.pageCounter][0].replace(/(T|(\b|_)t)alk:/g, ':');
if (AER.currentPage[0] == ":") {
AER.currentPage = AER.currentPage.substring(1, AER.currentPage.length);
} else {
AER.currentPage = AER.currentPage.replace(" :", ":");
}
console.log(AER.currentPage);
$.get(mw.config.get("wgScriptPath") + "/api.php", {
"action": "query",
"format": "json",
"prop": "revisions",
"titles": AER.currentTalkPage,
"formatversion": "2"
}).done(function (a) {
if (a.error) {
} else {
currentRevID = a.query.pages[0].revisions[0].revid;
parse(AER.currentTalkPage, "#editrequest-talk", function (d) {
parse(AER.currentPage, "#editrequest-page", function (r) {
$("#editrequest-talk").html(d);
if (AER.AERSettings.eph) {
// need rewrite to allow for quick acceptance and decline
}
if (document.getElementById(AER.pages[AER.pageCounter][1])) {
$("#editrequest-page").html(r);
AER.enableButtons();
$("#editrequest-info").html('<p>Can you answer the <a href="#' + AER.currentSection + '">edit request below</a>?</p>');
$("#editrequest-info-2").html("");
$(".editrequest-title").text(AER.currentPage).append(" (" + (AER.pageCounter + 1) + "/" + AER.pages.length + ")");
AER.pageCounter++;
$("#editrequest-page a").each(function() {
if (!($(this).attr("href") ? $(this).attr("href") : "").includes("#")) {
$(this).attr("target", "_blank");
}
});
$("#editrequest-talk a").each(function() {
if (!($(this).attr("href") ? $(this).attr("href") : "").includes("#")) {
$(this).attr("target", "_blank");
}
});
if (AER.AERSettings.autojump) {
location.href = "#" + AER.currentSection;
} else {
location.href = "#";
}
} else {
AER.pageCounter++;
AER.run();
}
});
});
}
}).fail(function (a) {
});
} 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/WP:RFED">Other edit requests</a> • <a href="/wiki/Wikipedia:Backlog">More backlog</a></p>');
$("#editrequest-info-2").html('');
AER.disableButtons();
$("#editrequest-talk").html("");
$("#editrequest-page").html("");
}
}
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";
});
}
AER.disableButtons = function() {
$(".advance").prop("disabled", true);
$(".editpage").prop("disabled", true);
$(".history").prop("disabled", true);
$(".edittalk").prop("disabled", true);
}
AER.enableButtons = function() {
$(".advance").prop("disabled", false);
$(".editpage").prop("disabled", false);
$(".history").prop("disabled", false);
$(".edittalk").prop("disabled", false);
}
AER.preferencesInit = function() {
$(".firstHeading").html("AER Preferences");
$("#section_0").html("AER Preferences");
$("title").text("AER Preferences - Wikipedia");
$("#mw-content-text").text("");
$("<form id=\"editprefs-settings\"></form>")
.append('<input type="checkbox" id="editprefs-autojump"><label for="editprefs-autojump">Automatically jump to edit request upon loading talk page.</label><br>')
.append('<input type="checkbox" id="editprefs-quickeditor"><label for="editprefs-quickeditor">Enable the quick editor to answer edit requests quickly.</label><br>')
.append('<input type="checkbox" id="editprefs-sidebarlink"><label for="editprefs-sidebarlink">Show a link to "answer edit requests" on the sidebar.</label><br>')
.append('<input disabled type="checkbox" id="editprefs-eph"><label for="editprefs-eph">Enable the <a target="_blank" href="/wiki/WP:EPH">Edit Protected Helper</a> script.<br><span class="error">This option is currently disabled because the script does not work as intended.</span></label><br>')
.append('<input type="checkbox" id="editprefs-sticky"><label for="editprefs-sticky">Always show the AER buttons at the top of the page.</label><br>')
.append('<input type="checkbox" id="editprefs-beta"><label for="editprefs-beta">Enable the beta version of AER. <b><i>Note:</i> This can get really unstable.</b></label><br>')
.append($('<button type="submit" id="editprefs-submit">Save preferences</button>').addClass("mw-ui-button").addClass("mw-ui-progressive").css({ "margin-right": "5px", "margin-left": "1px" }))
.append($('<button id="editprefs-reset">Reset preferences</button>').addClass("mw-ui-button").addClass("mw-ui-destructive").css({ "margin-right": "5px", "margin-left": "1px" }))
.appendTo("#mw-content-text");
for (var setting in AER.AERSettings) {
$("#editprefs-" + setting).attr("checked", AER.AERSettings[setting] ? true : false);
}
$("#editprefs-reset").click(function (e) {
e.preventDefault();
if (confirm("Are you sure you want to reset all of your preferences? All of your settings will be lost.")) {
$("#editprefs-submit").prop("disabled", true);
$("#editprefs-reset").prop("disabled", true);
$.get(mw.config.get('wgScriptPath') + '/api.php', {
"action": "query",
"format": "json",
"meta": "tokens",
"type": "csrf"
}).done(function (x) {
if (x.error) {
throw x.error;
} else {
$.get(mw.config.get('wgScriptPath') + '/api.php', {
'action': 'parse',
'page': "User:Awesome Aasim/editrequest.js/defaultpreferences.json",
'prop': 'wikitext',
'format': 'json'
}).done(function (z) {
AER.AERSettings = JSON.parse(z.parse.wikitext["*"]);
$.post(mw.config.get("wgScriptPath") + '/api.php', {
"action": "edit",
"format": "json",
"title": "User:" + mw.config.get("wgUserName") + "/AERpreferences.json",
"text": z.parse.wikitext["*"],
"summary": "Resetting preferences for [[User:Awesome Aasim/editrequest|AER]] tool",
"token": x.query.tokens.csrftoken
}).done(function (y) {
if (y.error) {
mw.notify($("<span>Could not save your preferences because: " + y.error.info + "</span>"));
} else {
mw.notify($("<span>Your preferences have been reset. Reload the AER tool to apply them.</span>"));
}
}).fail(function (y) {
alert("Network settings may have changed. Please reload the page.");
});
}).fail(function (z) {
alert("Network settings may have changed. Please reload the page.");
})
}
}).fail(function (x) {
alert("Network settings may have changed. Please reload the page.");
})
}
})
$("#editprefs-submit").click(function (e) {
$("#editprefs-submit").prop("disabled", true);
$("#editprefs-reset").prop("disabled", true);
e.preventDefault();
AER.set("autojump");
AER.set("quickeditor");
AER.set("sidebarlink");
AER.set("eph");
AER.set("beta");
AER.set("sticky");
$.get(mw.config.get('wgScriptPath') + '/api.php', {
"action": "query",
"format": "json",
"meta": "tokens",
"type": "csrf"
}).done(function (x) {
if (x.error) {
throw x.error;
} else {
$.post(mw.config.get("wgScriptPath") + '/api.php', {
"action": "edit",
"format": "json",
"title": "User:" + mw.config.get("wgUserName") + "/AERpreferences.json",
"text": JSON.stringify(AER.AERSettings),
"summary": "Setting preferences for [[User:Awesome Aasim/editrequest|AER]] tool",
"token": x.query.tokens.csrftoken
}).done(function (y) {
if (y.error) {
mw.notify($("<span>Could not save your preferences because: " + y.error.info + "</span>"));
} else {
mw.notify($("<span>Your preferences have been set. Reload the AER tool to apply them.</span>"));
$("#editprefs-submit").prop("disabled", false);
$("#editprefs-reset").prop("disabled", false);
}
}).fail(function (y) {
mw.notify($("<span>Lost Internet connection. Please try again.</span>"));
$("#editprefs-submit").prop("disabled", false);
$("#editprefs-reset").prop("disabled", false);
});
}
}).fail(function (x) {
mw.notify($("<span>Lost Internet connection. Please try again.</span>"));
$("#editprefs-submit").prop("disabled", false);
$("#editprefs-reset").prop("disabled", false);
})
})
}
AER.set = function(setting) {
AER.AERSettings[setting] = $("#editprefs-" + setting).is(":checked") ? true : false;
}
AER.init = function() {
$("#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");
$('<p id="editrequest-preferences"><a href="/wiki/Special:BlankPage/EditProtectedPrefs">Edit settings</a></p>').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")) {
if (AER.AERSettings.sticky) {
$(".editrequest-tools").css({ "position": "sticky", "top": "47.5px", "background-color": "white", "z-index": 99 });
}
//$(".editrequest-tools").css({ "position": "sticky", "top": "47.5px", "background-color": "white", "z-index": 99 });
$("#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) {
if (AER.AERSettings.quickeditor) {
location.href = "#editrequest-page";
AER.editForm("#editrequest-page", AER.currentPage, function () {
$("#editrequest-page").css({ "width": "100%", "height": "500px", "overflow": "auto" });
});
} else {
window.open("https://en.wikipedia.org/wiki/" + AER.currentPage + "?action=edit");
}
}).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/" + AER.currentTalkPage + "#" + AER.currentSection);
}).addClass("mw-ui-button").css({ "margin-right": "5px", "margin-left": "1px" })).append($('<button class="history"/>').text("View history").click(function (e) {
e.preventDefault();
window.open("https://en.wikipedia.org/wiki/" + AER.currentPage + "?action=history");
}).addClass("mw-ui-button").css({ "margin-right": "5px", "margin-left": "1px" })).append($('<button class="advance"/>').text("\u2192").click(function (e) {
e.preventDefault();
AER.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;');
AER.disableButtons();
$("#editrequest-page").before("<h1>Page content</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": AER.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) {
AER.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": AER.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) {
AER.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": AER.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) {
AER.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": AER.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) {
AER.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": AER.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) {
AER.pages.push([result[j].title, "editinterfaceprotected"]);
}
}
AER.pages = AER.shuffle(AER.pages);
AER.run();
}).fail(function (r) {
throw "Unknown error";
});
} else {
AER.pages = AER.shuffle(AER.pages);
AER.run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
AER.pages = AER.shuffle(AER.pages);
AER.run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
AER.pages = AER.shuffle(AER.pages);
AER.run();
}
}
}).fail(function (r) {
throw "Unknown error";
});
} else {
AER.pages = AER.shuffle(AER.pages);
AER.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 {
$(".firstHeading").text("Permission error");
$("#section_0").text("Permission error");
$("title").text("Permission error - Wikipedia");
$('#mw-content-text').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>');
}
}
if (mw.config.get("wgPageName").toLowerCase() == "Special:BlankPage/EditProtected".toLowerCase()) {
$(document).ready(function() {
AER.init();
});
} else if (mw.config.get("wgPageName") == "Category:Wikipedia_edit_requests" || AER.requestPages.includes(mw.config.get("wgPageName"))) {
$(document).ready(function () {
$("#siteNotice").append('<p>Consider using <a href="/wiki/Special:BlankPage/EditProtected">the edit protected tool</a> to review edit requests!</p>');
})
} else if (mw.config.get("wgPageName").toLowerCase() == "Special:BlankPage/EditProtectedPrefs".toLowerCase()) {
$(document).ready(function() {
AER.preferencesInit();
});
}
//</nowiki>