Hard Drop Forum Tweaks

Some tweaks on the Hard Drop Tetris forums.

// ==UserScript==
// @name           Hard Drop Forum Tweaks
// @description    Some tweaks on the Hard Drop Tetris forums.
// @grant          GM_xmlhttpRequest
// @include        http://harddrop.com/*
// @version 0.0.1.20150301023233
// @namespace https://greasyfork.org/users/2233
// ==/UserScript==

var wnd = window
var doc = wnd.document
var loc = location
var href = loc.href

var $  = function(e, css) { if(!css) { css=e; e=doc }; return e.querySelector(css) }
var $$ = function(e, css) { if(!css) { css=e; e=doc }; return e.querySelectorAll(css) }

if(/^http:\/\/harddrop\.com\//.test(href))
{
    if(typeof users_to_hide == 'undefined')
    {
        var users_to_hide = ['USER_ID_1', 'USER_ID_2'] // add as many annoying users as you want
    }
    var len_hide = users_to_hide.length
    if(/forums/.test(href))
    {
        if(/showtopic/.test(href)) // on a forum thread page
        {
            // hide forum posts from annyoing users
            var tables = doc.getElementsByClassName('ipbtable'), len = tables.length
            for(var i=0; i<len; i++)
            {
                try
                {
                    for(var j=0; j<len_hide; j++)
                    {
                        if(tables[i].getElementsByTagName('TD')[0].getElementsByTagName('SPAN')[0].children[0].innerHTML.indexOf(users_to_hide[j])!=-1)
                        {
                            tables[i].style.cssText='display: none !important'
                        }
                    }
                }
                catch(err) {}
            }

            // hide user images, because some images are not comfortable to see
            var imgs = doc.getElementsByClassName('pic1')
            for(var i=imgs.length-1; i>=0; i--) { imgs[i].style.display = 'none' }

            // hide signatures
            var sigs = doc.getElementsByClassName('signature')
            for(var i=sigs.length-1; i>=0; i--) { sigs[i].style.display = 'none' }
        }
        else // on the forum main page
        {
            // add shoutbox, so that a user can chat with others on the current page
            var sbframe = doc.createElement('IFRAME')
            sbframe.id = 'my_sbframe'
            sbframe.src = 'http://harddrop.com/file/shout/shout.php'
            sbframe.width = 300
            sbframe.height = 570
            sbframe.frameBorder = 0
            doc.getElementById('fo_rtopics').appendChild(sbframe)

            // embed the live stream swf if it is live
            GM_xmlhttpRequest({
                method: 'GET',
                url: 'https://api.twitch.tv/kraken/streams/harddrop',
                synchronous: false,
                onload: function(response) {
                    if(JSON.parse(response.responseText).stream != null) { // is live
                        doc.getElementById('fo_rtopics').innerHTML += '<object flashvars="hostname=www.twitch.tv&channel=harddrop&auto_play=false&start_volume=25" type="application/x-shockwave-flash" wmode="opaque" allowfullscreen="true" allownetworking="true" movie="http://www.twitch.tv/widgets/live_embed_player.swf" allowscriptaccess="always" data="http://www.twitch.tv/widgets/live_embed_player.swf?channel=harddrop" width="640" height="480"</object>'
                    }
                }
            })
        }
    }
    else if(/shout/.test(href)) // in the shoutbox
    {
        if(doc.getElementById('ShoutCloud-Container')==null) { throw 'exit' }
        
        // hide images
        var imgs = doc.querySelectorAll('img')
        for(var i=imgs.length-1; i>=0; i--) { imgs[i].style.display = 'none' }

        // enable the input box
        addEventListener('load', function() {
            try{
            doc.getElementsByName('ShoutCloud-Msg')[0].disabled = false
            doc.getElementsByName('ShoutCloud-Msg')[0].value = ''
            } catch(e) {}
        }, false)

        // don't clear unsent text when unfocuing the input box
        try{
            doc.getElementsByName('ShoutCloud-Msg')[0].onblur = function() { return }
        } catch(e) {}

        // hide annoying users in the shoutbox
        var hide_users = function()
        {
            var chats = doc.getElementsByClassName('shout-msg')
            var len = chats.length
            for(var i=0; i<len; i++)
            {
                for(var j=0; j<len_hide; j++)
                {
                    if(chats[i].children[0].id.indexOf(users_to_hide[j])!=-1)
                    {
                        chats[i].style.display = 'none'
                        break
                    }
                }
            }
        }
        hide_users()
        addEventListener("DOMNodeInserted", function() { // or DOMSubtreeModified
            hide_users()
        }, false)
        
        // hide chats with only emotes
        var hide_chats_with_only_emotes = function()
        {
            var chats = doc.getElementsByClassName('shout-msg')
            var len = chats.length
            for(var i=0; i<len; i++)
            {
                if(chats[i].textContent.replace(/.+?:[0-9][0-9]?/, '').replace(/[\n\s]/g, '') == '') {
                    chats[i].style.display = 'none'
                }
            }
        }
        hide_chats_with_only_emotes()
        addEventListener("DOMNodeInserted", function() { // or DOMSubtreeModified
            hide_chats_with_only_emotes()
        }, false)
    }
}