jim / Twitch.tv Hide Games

// ==UserScript==
// @name        Twitch.tv Hide Games
// @namespace   jim
// @description Hide games you'll never watch
// @include     http://www.twitch.tv/*
// @include     http://*.twitch.tv/*
// @grant       none
// @version     1.3
// ==/UserScript==

// GAMES TO HIDE:
var games = Array(
                    "League of Legends",
                    "Dota 2",
                    "Hearthstone: Heroes of Warcraft"
                    );

// DO NOT EDIT BELOW

// jQuery window onChange plugin
if ( typeof(jQuery) == "function" && typeof(jQuery.windowLocationChange) == "undefined" ) {  
    // http://www.bennadel.com/blog/1520-Binding-Events-To-Non-DOM-Objects-With-jQuery.htm
    // Our plugin will be defined within an immediately
    // executed method.
    (function( $ ){
    	
		// Default to the current location.
		var strLocation = window.location.href;
		var strHash = window.location.hash;
		var strPrevLocation = "";
		var strPrevHash = "";
    
		// This is how often we will be checkint for
		// changes on the location.
		var intIntervalTime = 100;

		// This method removes the pound from the hash.
		var fnCleanHash = function( strHash ){
			return(
				strHash.substring( 1, strHash.length )
				);
		}
    
		// This will be the method that we use to check
		// changes in the window location.
		var fnCheckLocation = function(){
			// Check to see if the location has changed.
			if (strLocation != window.location.href){

				// Store the new and previous locations.
				strPrevLocation = strLocation;
				strPrevHash = strHash;
				strLocation = window.location.href;
				strHash = window.location.hash;
				// The location has changed. Trigger a
				// change event on the location object,
				// passing in the current and previous
				// location values.
				$( window.location ).trigger(
					"change",
					{
						currentHref: strLocation,
						currentHash: fnCleanHash( strHash ),
						previousHref: strPrevLocation,
						previousHash: fnCleanHash( strPrevHash )
					}
					);

			}
		}
            

        jQuery.windowLocationChange = {
            isRunning: true
        };          

    	// Set an interval to check the location changes.
    	setInterval( fnCheckLocation, intIntervalTime );

	})( jQuery );
}
            
window.ttvhg = {

    hideTimer: null,
    
    load: function() {
        
        if ( typeof(jQuery) == "function" ) {
            
            clearInterval(ttvhg.hideTimer);
                        
            if ( ttvhg.endsWith(window.location.href, "/directory/all") ) {

                ttvhg.hideTimer = setInterval(function () {
                
                    jQuery('.boxart').each(function() {
                        element = $(this);
                        $.each(games, function( gameIndex, game ) {
                            if ( element.attr("title") == game ) {
                                element.parent().parent().parent().hide();
                            }
                        });
                    });
                    
                }, 1500);
                
            }
            
            jQuery(window.location).off("change", null, ttvhg.onChangeEvent);
            jQuery(window.location).on("change", null, ttvhg.onChangeEvent);
        }
    },
    
    onChangeEvent: function() {
        ttvhg.load();
    },
    
    // http://stackoverflow.com/questions/280634/endswith-in-javascript
    endsWith: function (str, suffix) {
        return str.indexOf(suffix, str.length - suffix.length) !== -1;
    }
    
}

ttvhg.load();