MediaWiki:Gadget-massdelete.js

Revision as of 16:39, 19 February 2020 by Banri (talk | contribs) (Created page with "//<nowiki> var config = mw.config.get([ 'wgUserGroups', 'wgScriptPath', 'wgPageName' ]); var mass_delete = (function (api) { var token = sessionStorage.getItem("Delete...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//<nowiki>
var config = mw.config.get([
	'wgUserGroups',
	'wgScriptPath',
	'wgPageName'
	]);
var mass_delete = (function (api) {
    var token = sessionStorage.getItem("DeleteToken"),
        onready = function () {
            if (this.readyState === 4 && this.status === 200) {
                var i, xhr, a = JSON.parse(this.responseText).query.usercontribs,
                    onready = function () {
                        if (this.readyState === 4 && this.status === 200
                            && this.responseText.indexOf("error") > -1) {
                            console.log(JSON.parse(this.responseText));
                        }
                    },
                    query = "format=json&action=delete&token=" + sessionStorage.getItem("DeleteToken") + "&title=";
                for (i = 0; i < a.length; i = i + 1) {
                    if (a[i].hasOwnProperty("new")) {
                        xhr = new XMLHttpRequest();
                        xhr.open("POST", api, true);
                        xhr.onreadystatechange = onready;
                        xhr.setRequestHeader("Content-Type",
                            "application/x-www-form-urlencoded");
                        xhr.send(query + encodeURIComponent(a[i].title));
                    }
                }
            }
        },
        query = api +
            "?format=json&action=query&list=usercontribs&uclimit=500" +
            (config.wgUserGroups.indexOf("sysop") > -1 ? "0" : "") + "&ucuser=",
        getDeleteToken = (function () {
            var onready = function () {
                    if (this.readyState === 4 && this.status === 200) {
                        token = this.responseXML.getElementsByTagName("page")[0]
                            .getAttribute("deletetoken").replace(/\+/, "%2B");
                        sessionStorage.setItem("DeleteToken", token);
                    }
                },
                query = api +
                    "?format=xml&action=query&prop=info&intoken=delete&titles=A";
            return function () {
                var xhr = new XMLHttpRequest();
                xhr.open("GET", query, false);
                xhr.onreadystatechange = onready;
                xhr.send();
            };
        }());
    return function (user, ns) {
        getDeleteToken();
        var xhr = new XMLHttpRequest();
        xhr.open("GET", query + encodeURIComponent(user) + '&ucnamespace=' + ns, true);
        xhr.onreadystatechange = onready;
        xhr.send();
    };
}(config.wgScriptPath + "/api.php"));
 
if(config.wgPageName == 'GeminiStation:MassDelete') {
    $(function() {
 
	function delete_submit() {
		$('#delete_submit').attr('disabled', 'disabled').val('Loading...');
		var user = $.trim($('#user').val());
		var ns = $.trim($('#ns').val());
		mass_delete(user, ns);
		alert(user + "'s contributions in namespace: " + ns + " have been deleted.");
	}
 
        var $div = $('#delete_header');
	var $form = $('<form />');
        $form.submit(delete_submit);
	$form.append($('<h4 />').text("Delete a user's contributions:"));
 
	var $p1 = $('<p />').append("Enter a user's username or IP address in the form below, and select a namespace. All of the pages that this user created in the specified namespace will be deleted upon submitting the form.");
	$form.append($p1);
 
	var $p2 = $('<p />');
	$p2.append($('<label />').attr({'for': 'user'}).text('Username:'));
	$p2.append($('<input />').attr({'id': 'user', 'type': 'text', 'size': 9}));
	$p2.append($('<label />').attr({'for': 'ns'}).text('Namespace:'));
	$p2.append($('<input />').attr({'id': 'ns', 'type': 'text', 'size': 3}));
	$p2.append($('<input />').css({'margin': '0 1em 0 1em'}).attr({'id': 'delete_submit', 'type': 'submit'}).val('Submit'));
	$form.append($p2);
 
	if ($div != null) {
		$div.empty().append($form);
	}
    });
}
//</nowiki>