4chan+

Adds some kool features to 4chan!

// ==UserScript==
// @name         4chan+
// @namespace    http://tampermonkey.net/
// @version      2.4
// @description  Adds some kool features to 4chan!
// @author       MrSkeletal
// @match        http://boards.4chan.org/*
// @match        https://boards.4chan.org/*
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';
    // Your code here...
    var Names = ['Wizard','Professional ShitPoster','Hiding In The Closet','A White Guy','Redpilled','A Black Guy','Faggot','Grill','Full Time Neet','Lurker','Jewd','Chad','Stacy','Basement Dweller','1337_H@x0r','Underage','EdgeLord','NORMIE','Nazi','Pesant','FAG','Suicidal','Weeb','I <3 Hentai','Woke','FBI','Mod In Disguise','Not A Cop'];
    var ValidNameColors = ['#ff66ff','#ff3300','#b3ffb3','#669999','#3399ff'];
    var HTMLNames = document.getElementsByClassName('name');
    var HTMLGET = document.getElementsByClassName('postNum desktop');
    var theme = document.getElementById('styleSelector');
    var TModernOn = false;
    var nav = document.getElementsByClassName('navLinks desktop')[0];
    var board = window.location.pathname.match(/\/[^\/]+\//)[0];

    //ToolBar
    //
    function Update(){
        //underline subjects
        //Add NickNames
        function ChangeNames(list){
            for (var i=0;i<HTMLNames.length;i++){
                if (HTMLNames[i].id != 'colored'){
                    HTMLNames[i].style.color = ValidNameColors[Math.floor((Math.random() * ValidNameColors.length) + 0)];
                    HTMLNames[i].id = 'colored';
                }
                if (HTMLNames[i].innerHTML == 'Anonymous'){
                    HTMLNames[i].title = "Username was originally Anonymous";
                    HTMLNames[i].innerHTML = list[Math.floor((Math.random() * list.length) + 0)];
                }
            }
        }
        //
		var nsfwNames = ['Currently Masterbaiting','NSA','Tits man','Ass man','Lurker','Kinky','Embassidor of porn','Porn merchant'];
        switch(board){
            default:
                ChangeNames(Names);
                break;
            case "/b/":
            case "/pol/":
                ChangeNames(Names);
                break;
		    case "/bant/":
				ChangeNames(Names);
                break;
		    case "/aco/":
            case "/r/":
            case "/gif/":
            case "/hr/":
            case "/t/":
            case "/y/":
            case "/d/":
            case "/e/":
            case "/s/":
            case "/hc/":
            case "/h/":
				ChangeNames(nsfwNames);
                break;
        }
        //GetHighlighter
        for (var i2=0;i2<HTMLGET.length;i2++){
            var GET = HTMLGET[i2].childNodes[1].text;
            var Len = GET.length - 1;
            var Dupes = 0;
            for (var l = Len; GET[l] == GET[l - 1]; l--){
                Dupes++;
            }
            if (GET[Len] == GET[Len - 1] & HTMLGET[i2].childNodes[1].id != 'Checked'){
                HTMLGET[i2].childNodes[1].style.backgroundColor = ValidNameColors[Math.floor((Math.random() * ValidNameColors.length) + 0)];
                HTMLGET[i2].childNodes[1].style.color = "black";
                HTMLGET[i2].childNodes[1].id = 'Checked';
                switch(Dupes){
                    default:
                        var saying = "GET ";
                        HTMLGET[i2].childNodes[1].title = saying;
                        HTMLGET[i2].childNodes[0].innerHTML = saying + HTMLGET[i2].childNodes[0].innerHTML;
                        break;
                    case 1:
                        saying = "Dubs ";
                        HTMLGET[i2].childNodes[1].title = saying;
                        HTMLGET[i2].childNodes[0].innerHTML = saying + HTMLGET[i2].childNodes[0].innerHTML;
                        break;
                    case 2:
                        saying = "Trips ";
                        HTMLGET[i2].childNodes[1].title = saying;
                        HTMLGET[i2].childNodes[0].innerHTML = saying + HTMLGET[i2].childNodes[0].innerHTML;
                        break;
                    case 3:
                        saying = "Quads ";
                        HTMLGET[i2].childNodes[1].title = saying;
                        HTMLGET[i2].childNodes[0].innerHTML = saying + HTMLGET[i2].childNodes[0].innerHTML;
                        break;
                }
            }
        }
        //TestTheme
        if (theme.options[theme.selectedIndex].value == 'Test'){
            //BG
            document.body.style.backgroundColor = '#cccccc';
            document.getElementById('header-bar').style.backgroundColor = '#9BAEC8';
            //Post Form
            document.getElementById('postForm').style.backgroundColor = '#444b5d';
            document.getElementById('postForm').style.border = '3px  solid #282c37';
            document.getElementById('postForm').style.marginLeft = '35%';
            document.getElementById('postForm').style.borderRadius = '4px';
            //
            var PR = document.getElementsByClassName('post reply');
            var OP = document.getElementsByClassName('post op');
            for (i=0;i<PR.length;i++){
                PR[i].style.backgroundColor = '#444b5d';
                PR[i].style.color = '#e6e6e6';
                PR[i].style.border = '3px  solid #282c37';
                PR[i].style.borderRadius = '4px';
                PR[i].style.margin = '14px';
            }
            for (i=0;i<OP.length;i++){
                OP[i].style.backgroundColor = '#444b5d';
                OP[i].style.color = '#e6e6e6';
                OP[i].style.border = '3px  solid #282c37';
                OP[i].style.borderRadius = '4px';
                OP[i].style.margin = '14px';
            }
        }
        //loop
        setTimeout(Update,500);
    }
    function OneTimeUpdate(){
        //add tools
        var toolMenu = document.createElement('div');
        toolMenu.setAttribute("style","background-Color: #5f92ca; top: 50%; position: fixed; zIndex: 99999999; border: 3px  solid #6699ff; padding: 5px; left: 50%; transform: translate(-50%, -50%)");
        toolMenu.style.display = 'none';
        document.body.appendChild(toolMenu);
        //Header
        var TMText = document.createElement('h1');
        TMText.innerHTML = 'Tools Menu';
        toolMenu.appendChild(TMText);
        //Features
        //Highlighter
        var TMText2 = document.createElement('h4');
        TMText2.innerHTML = 'Features Undone';
        toolMenu.appendChild(TMText2);
        var TMAH = document.createElement('div');
        TMAH.id = 'TMHLDiv';
        //exit
        var TMExit = document.createElement('button');
        TMExit.innerHTML = 'Exit';
        toolMenu.appendChild(TMExit);
        TMExit.addEventListener('click',function(){
            toolMenu.style.display = 'none';
        });
        //Add Theme (TEST)
        var TModern = document.createElement('option');
        TModern.value = 'Test';
        TModern.innerHTML = 'Test';
        theme.appendChild(TModern);
        //add some tools
        if(nav !== undefined){
            nav.innerHTML += " [";
            var Settings = document.createElement('a');
            Settings.id = 'SID';
            Settings.innerHTML = 'Tools';
            Settings.style.cursor = 'pointer';
            nav.appendChild(Settings);
            nav.innerHTML += "]";
            document.getElementById('SID').addEventListener("click",function(){
                toolMenu.style.display = 'inline';
            });
        }
        //Add message for board
        var message = document.createElement('div');
        message.className = 'boardSubtitle';
        document.getElementsByClassName("boardBanner")[0].appendChild(message);
        console.log(board);
        var bantMSG = ["anime","Reminder that the animal of /bant/ is the blobfish","/b/ With flags","Death to frogposters",">coke without peanuts"];
        var animeMSG = ["Dubs > Subs","Dubs < Subs","Your waifu is shit"];
        var bMSG = ["NORMIES GET OUT REEEEEE","Not your personal army","Where porn is more common than memes","Dont be a gullible idiot","Home of Anonymous"];
        var nsfwMSG = ['Got some alone time eh ;)','The NSA is gonna love watching this','If you get caught, just blame it on ghosts','Kinky','2d > 3d','2d < 3d','Got a fine taste'];
        var r9kMSG = ['No chads allowed','NORMIES GET OUT REEEEEE','<p style="color:#B5BD67;"> >Feels Bad Man </p>'];
        var travelMSG = ['When you need a destination who are you gonna call ' + board + '!','More likly to get out than most people'];
        switch(board){
            case "/bant/":
                message.innerHTML = bantMSG[Math.floor((Math.random() * bantMSG.length) + 0)];
                break;
            case "/r9k/":
                message.innerHTML = r9kMSG[Math.floor((Math.random() * r9kMSG.length) + 0)];
                break;
            case "/n/":
            case "/o/":
            case "/out/":
                message.innerHTML = travelMSG[Math.floor((Math.random() * travelMSG.length) + 0)];
                break;
            case "/a/":
            case "/c/":
            case "/w/":
            case "/m/":
            case "/cgl/":
            case "/jp/":
            case "/cm/":
                message.innerHTML = animeMSG[Math.floor((Math.random() * animeMSG.length) + 0)];
                break;
            case "/b/":
                message.innerHTML = bMSG[Math.floor((Math.random() * bMSG.length) + 0)];
                document.getElementsByClassName("boardSubtitle")[0].remove();
                break;
            case "/aco/":
            case "/r/":
            case "/gif/":
            case "/hr/":
            case "/t/":
            case "/y/":
            case "/d/":
            case "/e/":
            case "/s/":
            case "/hc/":
            case "/h/":
                message.innerHTML = nsfwMSG[Math.floor((Math.random() * nsfwMSG.length) + 0)];
                break;
            default:
                message.innerHTML = "This Board Doesnt Have Messages Yet!";
        }
    }
    //
    new OneTimeUpdate();
    new Update();
    console.log('Started 4chan+ With No Errors!');
    //EVENTS

    //
})();