Code:
// ==UserScript==
// @name Mafia Filter
// @icon https://www.sc2mafia.com/forum/favicon.ico
// @description ♥
// @namespace SmVzdXMgd2FzIGEgZnVja2luZyB6b21iaWUu
// @include https://www.sc2mafia.com/forum/showthread.php/*
// @version 1.6.6
// @run-at document-end
// @grant none
// ==/UserScript==
var
names = [],
posts = document.getElementsByClassName( 'postcontainer' ),
postCount = posts.length,
users = getUsersFrom( posts );
names.sort( function(a, b){ return a.toLowerCase().localeCompare( b.toLowerCase() ); } );
addMenu();
function addMenu() {
var menu = document.createElement( 'li' );
menu.innerHTML = '<h6><a class="popupctrl" href="javascript:void(0);">Filter</a></h6></li>';
menu.addEventListener( 'click', showMenu, false );
menu.setAttribute( 'class', 'popupmenu' );
menu.setAttribute( 'id', 'filtergmenu' );
document.getElementById( 'votecounter' ).parentNode.insertBefore( menu, document.getElementById( 'votecounter' ) );
menu.appendChild( createMenu() );
}
function showMenu( event ) {
if( document.getElementById( 'hidemenu' ).style.display === 'block' )
document.getElementById( 'hidemenu' ).style.display = 'none';
else
document.getElementById( 'hidemenu' ).setAttribute( 'style', "display : block; left : -37px; top : -126px;" ); // POSITION
}
function hideMenu( event ) {
document.getElementById( 'hidemenu' ).setAttribute( 'style', "display : none" );
}
function selectUser( user ){
var current = -1;
while( ++current < postCount )
posts[ current ].style.display = '';
var name = names[ user ];
current = -1;
while( ++current < postCount)
if( posts[ current ].innerHTML.indexOf( '<span class="' + users[ name ] + '>' + name + '<' ) == -1 )
posts[ current ].style.display= 'none';
}
function showAll() {
var current = -1;
while( ++current < postCount )
posts[ current ].style.display = '';
}
function search() {
var
user = prompt ( 'Enter username (case sensitive).' ),
current = -1;
if( user == null )
return;
while( ++current < postCount)
if( posts[ current ].innerHTML.indexOf( '>' + user + '</span>' ) == -1)
posts[ current ].style.display = 'none';
}
function createMenu() {
var
totalNames = names.length,
current = -1,
u = document.createElement( 'ul' ),
l = document.createElement( 'li' ),
a = document.createElement( 'a' ),
t = document.createTextNode( 'ALL' );
u.setAttribute( 'class', 'popupbody' );
u.setAttribute( 'id', 'hidemenu' );
u.setAttribute( 'style', 'display : none;' );
a.setAttribute( 'style', 'text-align : center; color : #00ff00;' );
a.setAttribute( 'href', 'javascript: void( 0 );' );
a.addEventListener( 'click', showAll, false );
a.appendChild( t );
l.appendChild( a );
u.appendChild( l );
l = document.createElement( 'li' );
a = document.createElement( 'a' );
a.setAttribute( 'style', 'text-align : center; color : #ffff00;' );
a.setAttribute( 'href', 'javascript: void( 0 );' );
a.addEventListener( 'click', search, false );
t = document.createTextNode( 'Other' );
a.appendChild( t );
l.appendChild( a );
u.appendChild( l );
while( ++current < totalNames ) {
l = document.createElement( 'li' );
a = document.createElement( 'a' );
a.setAttribute( 'style', 'text-align : center;' );
a.setAttribute( 'href', 'javascript: void( 0 );' );
a.addEventListener( 'click', ( function( I ) { return function() { selectUser( I ) }; } )( current ), false);
t = document.createTextNode( names[ current ] );
a.appendChild( t );
l.appendChild( a );
u.appendChild( l );
}
return u;
}
function getUsersFrom( data ) {
var
u = { },
current = 0,
currentUserType = -1,
playerClass='',
playerClasses = ['vip', 'registereduser', 'respected', 'donor', 'patron', 'moderator', 'keeper', 'admin', 'supermoderator', 'fmmvp', 'benefactor', 'warden'],
classCount = playerClasses.length,
inner = '',
user = '';
while( ++currentUserType < classCount ) {
current = -1,
playerClass = playerClasses[ currentUserType ] + '"';
while( ++current < postCount ) {
inner = data[ current ].innerHTML;
if( inner.indexOf( 'span class="' + playerClass + '>' ) )
user = inner.substring( inner.indexOf( playerClass + '>' ) + ( ( playerClass.length ) + 1 ), inner.indexOf( '<', inner.indexOf( playerClass + '>' ) ) );
if( user )
if( user.indexOf( '!' ) == -1 ) {
if( u [ user ] )
continue;
u[ user ] = playerClass;
names[ names.length ] = user;
}
}
}
return u;
}