Jump to content

User:Awesome Aasim/editrequest.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Awesome Aasim (talk | contribs) at 04:22, 26 April 2020. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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.
//<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> &bull; <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>