MediaWiki:Group-test-sysop.js

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.
/* JS placed here will affect test wiki administrators only */

/* START OF "WARNING TOOLS" WHEN ACTING OUTSIDE OF OWN TEST WIKI(S)
based on http://meta.wikimedia.org/wiki/User:Quentinv57/HideButtonsFromNonGsProjects.js by Quentinv57
hacked together by MF-Warburg, improved by Hydriz
*/

// This URL loads data from MediaWiki:Administrated_test_wikis.json
var testwikijson = "https://incubator.wikimedia.org/w/index.php?title=MediaWiki:Administrated_test_wikis.json&action=raw&ctype=application/json";

// Nothing to change below this line
function in_array (string, array) {
    var i = '';
        for (i in array) {
            if (array[i] == string) {
                return true;
            }
        }
    return false;
}

function getTestWikiPrefix( title ) {
    var str = title.split("/");
    return str[0] + "/" + str[1];
}

function getTestWikiAdmins( prefix, data ) {
    var today = new Date();
    var output = [];
    for ( var user in data[prefix] ) {
    	// For Incubator admins that are also test sysops.
    	// This script is not loaded for them anyway, but having their entry can break the script for others.
    	if ( data[prefix][user] == "never" ) {
    		output.push(user);
    	} else {
    		var expiry = new Date(data[prefix][user]);
        	if ( today.getTime() < expiry.getTime() ) {
            	output.push(user);
    		}
        }
    }
    return output;
}

function userNotTestAdmin() {
    // buttons become red (works not on Monobook)
    if (document.getElementById('ca-delete') !== null) {
        document.getElementById('ca-delete').style.backgroundColor='red';
    }

    // warning if the deletion page is opened
    if (mw.config.get('wgAction') == 'delete') {
        document.getElementById('deleteconfirm').innerHTML = '<p id="wpDeleteWarning" style="color:red; text-align: center"><span style="font-size:200%">Warning: You\'re about to delete a page outside of your test wiki(s)!</span><br />Remember the policy: If you delete something outside your test, be prepared to defend your actions or your test-administrator privilege <b>may be revoked</b>. <a href="/wiki/Incubator:Community_Portal">Questions?</a></p>'+document.getElementById('deleteconfirm').innerHTML;
    }
}

$.getJSON( testwikijson, function ( data ) {
    var authorized = false;
    if ( mw.config.get('wgTitle').startsWith('W') && in_array(mw.config.get('wgNamespaceNumber'), [0, 1, 10, 11, 14, 15, 828, 829]) ) {
        var prefix = getTestWikiPrefix(mw.config.get('wgTitle'));
        var testadmins = getTestWikiAdmins(prefix, data);
        if ( in_array( mw.config.get('wgUserName'), testadmins ) ) {
            var authorized = true;
        }
    }

    if (!authorized) {
        userNotTestAdmin();
    }
});

// warning if the block page is opened
if (mw.config.get('wgCanonicalNamespace')=='Special' && mw.config.get('wgCanonicalSpecialPageName') == 'Block') {
    document.getElementsByTagName('form')[0].innerHTML = '<p id="wpBlockWarning" style="color:red; text-align: center"><span style="font-size:200%">Warning: You are about to block a user as a test-admin!</span><br />This should be done in emergencies only and be prepared to defend your actions or your test-administrator privilege <b>may be revoked</b>. <a href="/wiki/Incubator:Community_Portal">Questions?</a></p>'+document.getElementsByTagName('form')[0].innerHTML;
}

/* END OF WARNINGS */