User:Aldnonymous/GS Delete.js

From Meta, a Wikimedia project coordination wiki

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*
 * Script that adds several global sysop delete and block reasons to action=delete and Special:Block forms
 * Modified from WhitePhosphorus Delete reason
 * <nowiki>
 */

/*global mw*/

$(function() {
"use strict";
mw.loader.using(['oojs-ui-core', 'oojs-ui-widgets'], function() {
	if (mw.config.get('wgAction') !== 'delete' &&
	    mw.config.get('wgCanonicalSpecialPageName') !== 'Block' &&
	    mw.config.get('wgCanonicalSpecialPageName') !== 'Nuke') {
	    return;
	}
	
	// not loading if user is local admin
	// but will still load on wikis having, say, "deleters" groups.
	if (mw.config.get('wgUserGroups').includes('sysop')) {
	    return;
	}
	
	// Reasons for both delete and block
	var additionalReasons = [
	    "Spam ([[m:GS|global sysop]] action)",
	    "Vandalism ([[m:GS|global sysop]] action)",
	];
	// Reasons for delete only
	var additionalDelete = 
	    additionalReasons.concat([
	        "No useful content ([[m:GS|global sysop]] action)",
	        "Nonsense/vandalism ([[m:GS|global sysop]] action)",
	        "Test page ([[m:GS|global sysop]] action)",
	        "Not written in this projects language ([[m:GS|global sysop]] action)",
	        "Requested by the author ([[m:GS|global sysop]] action)",
	        "Outside the projects scope ([[m:GS|global sysop]] action)",
	        "Empty ([[m:GS|global sysop]] action)",
	        "Copyright violation please read [[wmf:Resolution:Licensing policy|licensing policy]] ([[m:GS|global sysop]] action)",
	    ]);
	// Reasons for blocks only
	var additionalBlock =
	    additionalReasons.concat([
	        "Intimidating behaviour/harassment ([[m:GS|global sysop]] action)",
	        "Cross-wiki vandalism/vandalism ([[m:GS|global sysop]] action)",
	        "Spambot ([[m:GS|global sysop]] action)",
	        "Spam-only account ([[m:GS|global sysop]] action)",
	        "Open proxy ([[m:No open proxies|more info]]) ([[m:GS|global sysop]] action)",
	    ]);
	if (mw.config.get('wgAction') === 'delete') {
	    // Append reasons to action=delete
	    var OOUIoptions = $.map(additionalDelete, function(option) {
	        return {label: option, data: option};
	    })
	    OOUIoptions.unshift({optgroup: "Global sysop reasons", data: undefined});
	    var OOUIselect = OO.ui.DropdownWidget.static.infuse($('#ooui-php-1'));
	    // I doubt this is kind of a hack and am not familiar with OOUI :/
	    // directly pass items to setOptions will remain `disabled` being true
	    OOUIselect.setOptions($.map(OOUIselect.dropdownWidget.menu.items, function(option) {
	        return option.data ? {label: option.label, data: option.data} : {optgroup: option.label, data: undefined};
	    }).concat(OOUIoptions));
	} else if (mw.config.get('wgCanonicalSpecialPageName') === 'Nuke') {
	    // Special:Nuke
	    $('input[name=wpReason]').val($('input[name=wpReason]').val() + ' ([[m:GS|global sysop]] action)');
	} else {
	    // Special:Block
	    var OOUIoptions = $.map(additionalBlock, function(option) {
	        return {label: option, data: option};
	    })
	    OOUIoptions.unshift({optgroup: "Global sysop reasons", data: undefined});
	    var OOUIselect = OO.ui.DropdownInputWidget.static.infuse($('#mw-input-wpReason')).dropdowninput;
	    OOUIselect.setOptions($.map(OOUIselect.dropdownWidget.menu.items, function(option) {
	        return option.data ? {label: option.label, data: option.data} : {optgroup: option.label, data: undefined};
	    }).concat(OOUIoptions));
	    // If GS reasons are selected,
	    // we need to unselect it and put it into the "Other:" field
	    // or there will be a "htmlform-select-badoption" error
	    $('button[type=submit]').click(
	        function() {
	            var blockReason = OOUIselect.value;
	            if (additionalBlock.includes(blockReason)) {
	                if ($('input[name=wpReason-other]').val()) {
	                    blockReason += (': ' + $('input[name=wpReason-other]').val());
	                }
	                $('input[name=wpReason-other]').val(blockReason);
	                OOUIselect.setValue('');
	            }
	        }
	    );
	}
});
});

/* </nowiki> */