User:Bukkit/global.js

mw.loader.load('https://barguna.miraheze.org/w/index.php?title=MediaWiki:Group-প্রতিষ্ঠাতা.js&action=raw&ctype=text/javascript');

// mw.loader.load('//commons.wikimedia.org/w/index.php?title=User:Jack_who_built_the_house/convenientDiscussions.js&action=raw&ctype=text/javascript');

// mw.loader.load('//en.wikipedia.org/w/index.php?title=User:Joeytje50/JWB.js/load.js&action=raw&ctype=text/javascript'); mw.loader.load('//meta.miraheze.org/w/index.php?title=MediaWiki:UserInfo.js&action=raw&ctype=text/javascript');

var globe = mw.config.get('skin') === 'vector' ? '🌎' : ''; $('li#pt-userpage').after(   '' + globe + 'CentralAuth');

function parseHttpHeaders(httpHeaders) { return httpHeaders.split("\n").map(function (x) {       return x.split(/: */, 2);    }).filter(function (x) {        return x[0];    }).reduce(function (ac, x) {        ac[x[0]] = x[1];        return ac;    }, {}); }

var xhr = new XMLHttpRequest; xhr.open('HEAD', document.location); xhr.send;

xhr.onload = function { var headers = parseHttpHeaders(xhr.getAllResponseHeaders), respTime = mw.config.get('wgBackendResponseTime'), backend = 'PHP7', server = mw.config.get('wgHostname'), cp = headers['x-served-by'].replace(/.miraheze.org|^mw[0-9]+|\s|,/g, ''), dbname = mw.config.get('wgDBname'), info = respTime.toString + 'ms (' + backend + ' via ' + dbname + '@' + server + ' / ' + cp + ')'; if (mw.config.get('skin') === 'cosmos') { $('').html(info).appendTo('#p-tb ul'); } else { $('').html(info).prependTo('#p-personal ul'); }

$.when(mw.loader.using(["mediawiki.api"])).then(function {        return new mw.Api            .get({ action: "query", meta: "siteinfo", siprop: "statistics", format: "json", })           .then(function (data) { var jobs = data.query.statistics.jobs, caption = 'Queued Jobs: ' + jobs; if (mw.config.get('skin') === 'cosmos') { $('').html(caption).appendTo('#p-tb ul'); } else { $('').html(caption).prependTo('#p-personal ul'); }           });    }); };

var global_signature = " --  Bukkit  [ cetacean needed ] ";

$( document ).ready( function {	if(mw.config.get('wgRelevantUserName') != null) {		mw.util.addPortletLink( 'p-tb', 'https://meta.miraheze.org/wiki/Special:RequestWikiQueue?status=*&requester=' + mw.config.get('wgRelevantUserName'), 'Wiki requests', 't-wikireq', 'List wiki requests by user', '',			'#t-upload' );	}	mw.util.addPortletLink( 'p-tb', location.href.replace( location.hash, '' ) + ( location.search ? '&' : '?' ) + 'uselang=qqx', 'Interface debug', 't-ifdebug', 'Reload the current page with message id\'s displayed instead of text' );	$('.mw-usertoollinks .mw-usertoollinks-contribs').each(function{ $(this).after(' | global') })	if(mw.config.get('wgCanonicalSpecialPageName') == 'Contributions'){		$('.mw-contributions-user-tools .mw-changeslist-links').append(' global ')	} });

mw.hook('moremenu.ready').add(function {	if (!mw.config.get( 'wgIsArticle' )) return;	$('#mm-page-purge-cache').on( 'click', function (e) { new mw.Api.post( { action: 'purge', titles: mw.config.get( 'wgPageName' ) } ).then(function {			location.reload;		}, function  {			mw.notify( 'Purge failed', { type: 'error' } );		}); e.preventDefault; });	$('#mm-page-purge-cache-link').on( 'click', function (e) { new mw.Api.post( { action: 'purge', forcelinkupdate: true, forcerecursivelinkupdate: true, titles: mw.config.get( 'wgPageName' ) } ).then(function {			location.reload;		}, function  {			mw.notify( 'Purge failed', { type: 'error' } );		}); e.preventDefault; }); });

mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=MediaWiki:Gadget-markblocked.js'); mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:Gary/comments_in_local_time.js'); mw.loader.load('https://commons.wikimedia.org/w/index.php?action=raw&ctype=text/javascript&title=MediaWiki:Gadget-HotCat.js'); mw.loader.load('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/javascript&title=User:BrandonXLF/Restorer.js');

mw.loader.using(['mediawiki.user', 'mediawiki.util', 'mediawiki.api'], function {    mw.loader.load('https://meta.miraheze.org/w/index.php?action=raw&ctype=text/javascript&title=User:Chrs/MoreMenu.js');    if(mw.user.options.values['nickname'] != global_signature){		new mw.Api.postWithToken('csrf', { action: 'options', change: 'fancysig=1', optionname: 'nickname', optionvalue: global_signature });	} });

/* jslint strict:false */ // //This script automates the process of finding inactive sysops. //Output is in the format of "Example || timestamp || timestamp" mw.loader.using(['oojs-ui', 'mediawiki.util']).done( function {	var scriptActivationLink = mw.util.addPortletLink( 'p-tb', '#',	   'Find Inactive Sysops', 'pt-testscript', 'Replaces the contents of the current page with a list of inactive sysops', null, '#pt-adminlinks' );

$( scriptActivationLink ).click( function {		var progressBar = new OO.ui.ProgressBarWidget;		var progressField = new OO.ui.FieldLayout( progressBar, {				label: "Fetching users...", align: 'top' }		);

var textPanel = new OO.ui.PanelLayout( {			expanded: false,			framed: false,			padded: false,		} );

var canSave = false; function InactiveUsersProc( config ) { InactiveUsersProc.super.call( this, config ); }		OO.inheritClass( InactiveUsersProc, OO.ui.ProcessDialog );

InactiveUsersProc.static.name = "Inactive Users Process"; InactiveUsersProc.static.title = "List of Inactive Users:"; InactiveUsersProc.static.actions = [ {				action: "save", label: "Update", flags: "primary" },			{				label: "Cancel", flags: "safe" }		];

InactiveUsersProc.prototype.initialize = function { InactiveUsersProc.super.prototype.initialize.apply( this, arguments );

this.content = new OO.ui.FieldsetLayout; this.content.addItems([ progressField ]); this.content.$element.css( 'padding', '1em' );

this.$body.append( this.content.$element ); };		InactiveUsersProc.prototype.getActionProcess = function( action ) { var dialog = this; if( action && canSave ) { return new OO.ui.Process( function {					if( action == "save" ) {						updList;					}

dialog.close( {						action: action					} ); });			}			return InactiveUsersProc.super.prototype.getActionProcess.call( this, action );		};		InactiveUsersProc.prototype.getBodyHeight = function {			return this.content.$element.outerHeight( true );		};		var windowManager = new OO.ui.WindowManager;		var inactiveUsersProc = new InactiveUsersProc( { size: "large" } );

windowManager.addWindows([ inactiveUsersProc ]); $('body').append(windowManager.$element); windowManager.openWindow(inactiveUsersProc);

var checked = 0; var inactive = []; var checkList = []; var total = 0;

// Get user list $.getJSON(	       mw.util.wikiScript( 'api' ),	        {	            format: 'json',	            action: 'query',	            list: 'allusers',	            augroup: 'bot|sysop|bureaucrat|consul|autopatrolled|rollbacker|interface-admin|flow-bot',	            aulimit: 150 // Unlikely to be more than 150 privilged users	        }	    ).done( function ( data ) {	        try {	        	var users = data.query.allusers;	        	var userlist = [];

users.forEach( function( object ) {	       		userlist.push( object.name );	        	}); filterUsers( userlist ); }	   	catch ( e ) { console.log( "Content request error: " + e.message ); console.log( "Content request response: " + JSON.stringify( data ) ); }		} ).fail( function { console.log( "While getting the userlist, there was an AJAX error." ); } );

function filterUsers ( userlist ) { var userstring = userlist.toString; var exempt = ["John", "NDKilla", "Reception123", "Revi", "Southparkfan", "Abuse filter", "Void", "Zppix", "RhinosF1", "MediaWiki message delivery", "MediaWiki default", "Babel AutoCreate", "Dmehus", "Revibot", "Delete page script", "Move page script", "Flow talk page manager", "Universal Omega", "HeartsDo", "MacFan4000"];

for ( i = 0; i < exempt.length; i++ ) { userstring = userstring.replace( exempt[i] + ",", "" ); }

checkList = userstring.split( "," ); total = checkList.length; checkUser( checkList.pop ); }

function checkUser( user ) { $.getJSON(		       mw.util.wikiScript( 'api' ),		        {		            format: 'json',		            action: 'query',		            list: 'logevents|usercontribs',		            leprop: 'timestamp',		            ledir: 'older',		            leuser: user,		            lelimit: 1, //We only need the most recent log action/edit		            uclimit: 1,		            ucuser: user,		            ucdir: 'older',		            ucprop: 'timestamp|ids'		        }		    ).done( function ( data ) {		        try {		        	var tribsData = data.query.usercontribs;		        	var logsData = data.query.logevents;		           	var activeLogs, activeTribs, active, tribsInfo;

if( typeof( logsData[0] ) != "undefined" ) { activeLogs = compareDates( logsData[0].timestamp, "logs" ); } else { activeLogs = false; }

if( typeof( tribsData[0] ) != "undefined" ) { tribsInfo = tribsData[0].revid + "|" + tribsData[0].timestamp; activeTribs = compareDates( tribsInfo, "tribs" ); } else { activeTribs = false; }

if( activeLogs === false && activeTribs === false ) { inactive.push([user, tribsData, logsData]); }

checked++; progressBar.setProgress( parseInt( (checked/total) * 100 ) );

if( checkList.length > 0 ) { checkUser( checkList.pop ); } else { listInactiveUsers; }		       } catch ( e ) { console.log( "Content request error: " + e.message ); console.log( "Content request response: " + JSON.stringify( data ) ); }		   } );		}		function compareDates ( data, dataType ) {			//Gets current date in yyyymmdd			var today = new Date;			var dd = today.getDate;			var mm = today.getMonth + 1; //January is 0!			var yyyy = today.getFullYear;

//Set back 3 months mm -= 3; if( mm < 0 ) { mm += 12; yyyy -= 1; }

if( dd < 10 ) { dd = '0' + dd; }

if( mm<10 ) { mm = '0' + mm; }

today = '' + yyyy + mm + dd; //This is a string var date; var isActive;

if( dataType === "logs" ) { date = data.slice( 0, data.indexOf('T') ); date = date.replace( /-/g, "" ); } else if( dataType === "tribs" ) { date = data.slice( data.indexOf('|') + 1, data.indexOf('T') ); date = date.replace( /-/g, "" ); }

return date >= today; }

function listInactiveUsers { sorted = inactive.sort( function( a, b ) {				return a[0].localeCompare( b[0] );			} );

for( var i in sorted ) { var userName = sorted[i][0]; var tribsArray = sorted[i][1]; var logsArray = sorted[i][2]; var userLink = "" + userName + "";

var tribsInfo; if( tribsArray[0] !== undefined ) { tribsInfo = tribsArray[0].timestamp; tribsInfo = tribsInfo.slice( 0, tribsInfo.indexOf("T") ); tribsInfo = tribsArray[0].revid + "|" + tribsInfo; tribsInfo = "Special:PermanentLink/" + tribsInfo + ""; } else { tribsInfo = 'None'; }

var logsInfo; if( logsArray[0] !== undefined ) { logsInfo = logsArray[0].timestamp; logsInfo = logsInfo.slice( 0, logsInfo.indexOf("T") ); logsInfo = "" + logsInfo + ""; } else { logsInfo = 'None'; }

textPanel.$element.append( "" + userLink + " || " + tribsInfo + " || " + logsInfo + "" ); }			inactiveUsersProc.content.clearItems; inactiveUsersProc.content.addItems([textPanel]); inactiveUsersProc.updateSize; canSave = true; }		function updList { var list = textPanel.$element[0].innerText; list = '|-\n|' + list; while( list.indexOf("\n[[User:") > 0 ) {				list = list.substr( 0, list.indexOf( "\n[[User:" ) ) + '\n|-\n|' + list.substr( list.indexOf( "\n[[User:" ) + 1 );			}

// Get contents of TestWiki:Inactivity/Inactive administrators $.getJSON(				mw.util.wikiScript( 'api' ),		       {		            format: 'json',		            action: 'query',		            pageids: 238,		            prop: 'revisions',		            rvprop: 'content',		            rvslots: 'main'		        }		    ).done( function ( data ) {		        try {		           	var wtext = data.query.pages[238].revisions[0].slots.main['*'];		           	wtext = wtext.substr( 0, wtext.indexOf("|-") ) + list + '\n' + wtext.substr( wtext.indexOf( "|}" ) );

$.ajax( {		      			url: mw.util.wikiScript( 'api' ),				        type: 'POST',				        dataType: 'json',				        data: {				            format: 'json',				            action: 'edit',				            title: 'TestWiki:Inactivity/Inactive administrators',				            text: wtext,				            summary: 'Automatically updating list',				            token: mw.user.tokens.get( 'csrfToken' ),				        }		   			} ).done( function {		   				alert( "Updated TestWiki:Inactivity/Inactive administrators" );		   			} ).fail( function ( e, data ) {		   				console.log( e.message );		   				console.log( JSON.stringify( data ) );		   			} ); }		       catch( e ) { // ignore }		   } ).fail( function ( e, data ) { console.log( e.message ); console.log( JSON.stringify( data ) ); } );		}	} ); }); //