Pr0γκραμ TV

Για να γουστάρουμε..

// ==UserScript==
// @name         Pr0γκραμ TV
// @namespace    GamateKID
// @version      3.4
// @description  Για να γουστάρουμε..
// @author       GamateKID
// @match        http*://pr0gramm.com/*
// @icon         https://s12.postimg.org/qnz4gpyzh/pr0gramm_favicon.png
// @grant        none
// ==/UserScript==
(function() {
    'use strict';
    let img;
    let vid;

    let timerTimeout;
    let nextTimeout;
    let timer = null;

    let browsing = false;
    let paused = false;
    let replay = false;

    const imgDelay = 3000;

    console.log('Pr0γκραμ is running\n');

    customize();

    var favicon = document.querySelector("link[rel*='icon']") || document.createElement('favicon');
    favicon.type = 'image/x-icon';
    favicon.rel = 'shortcut icon';
    favicon.href = 'https://s12.postimg.org/qnz4gpyzh/pr0gramm_favicon.png';
    document.getElementsByTagName('head')[0].appendChild(favicon);

    const overlay = document.createElement('div');
    overlay.className = 'overlay';
    overlay.style.display = 'none';
    const overlayLoading = document.createElement('div');
    overlayLoading.className = 'loading';
    overlayLoading.innerHTML = 'φορτώνει...';
    overlay.appendChild(overlayLoading);

    const menu = document.getElementById("head-menu");
    var toggle = document.createElement("a");
    toggle.setAttribute("id", "tab-tv");
    toggle.className = 'head-tab link';
    toggle.innerHTML = 'TV';
    toggle.addEventListener('click', toggleRunning);
    insertAfter(document.getElementById('tab-top'), toggle);

    const style = document.createElement('style');
    document.querySelector('head').appendChild(style);
    const body = document.querySelector('body');
    body.insertBefore(overlay, body.firstChild);

    if($('#filter-link-name').html()==='nsfw'){

        const troll_left = document.createElement('img');
        troll_left.setAttribute("src", "http://i63.tinypic.com/2r389li.png");
        troll_left.setAttribute("id", "troll-left");
        troll_left.setAttribute("style", "width:300px;height:310px;position:absolute;left:50px;top:180px;filter:alpha(opacity=10);");
        body.insertBefore(troll_left, document.getElementById('page'));

        const troll_right = document.createElement('img');
        troll_right.setAttribute("src", "http://i64.tinypic.com/2hq427c.png");
        troll_right.setAttribute("id", "troll-right");
        troll_right.setAttribute("style", "width:300px;height:310px;position:absolute;right:50px;top:180px;filter: alpha(opacity=10);");
        body.insertBefore(troll_right, document.getElementById('page'));

        troll_left.addEventListener('click', function(){window.location.replace("http://2girls1cup.ca/wp-content/uploads/2015/03/2girls1cupvideo.mp4?_=1");});
        troll_right.addEventListener('click', function(){window.location.replace("http://www.1man1jar.org/1man1jar.mp4");});

        $(window).bind("load resize scroll",function(e) {
            var y = $(window).scrollTop();

            $("#troll-left").css("margin-top", y+"px");
            $("#troll-right").css("margin-top", y+"px");
        });

        const trololo1 = document.createElement('img');
        trololo1.setAttribute("src", "http://i65.tinypic.com/s6t2s4.png");
        trololo1.setAttribute("style", "width:20px;height:30px;position:absolute;margin-left:5px;margin-top:-4px;");
        trololo1.addEventListener('click', toggleRunning);
        document.getElementById('head-menu').insertBefore(trololo1, document.getElementById('tab-tv'));

    }

    initStyles();
    window.onresize = initStyles;

    window.onload = disableAds;

    document.addEventListener("keydown", (event) => {
        if (event.keyCode === 80 /*P*/ ) {
            toggleRunning();
        }
        if (browsing) {
            if (event.keyCode === 32 /*Space*/ ) {
                if (timer) {
                    toggleTimer();
                } else {
                    togglePauseVideo();
                }
                event.preventDefault();
            }
            if (event.keyCode === 82 /*R*/ ) {
                replay = !replay;
            }
            if (event.keyCode === 27 && browsing /*Esc*/ ) {
                event.preventDefault();
                event.stopPropagation();
                stop();
            }
            if (event.keyCode === 37 /*left*/ || event.keyCode === 39 /*right*/ ||
                event.keyCode === 65 /*left*/ || event.keyCode === 68 /*right*/ ) {
                if (vid) {
                    clearTimeout(nextTimeout);
                    browse();
                } else {
                    clearTimeout(timerTimeout);
                    timer = null;
                    browse();
                }

            }
            if (event.keyCode === 100 /*NUM4*/ ) {
                if (vid) {
                    event.preventDefault();
                    vid.currentTime -= 5;
                }
            }
            if (event.keyCode === 102 /*NUM6*/ ) {
                if (vid) {
                    event.preventDefault();
                    vid.currentTime += 5;
                }
            }

            if (event.keyCode === 104 /*NUM8*/ ) {
                if (vid) {
                    if (vid.muted) {
                        vid.muted = false;
                    }
                    if (vid.volume < 0.9) {
                        event.preventDefault();
                        vid.volume += 0.1;
                    }
                    moveVolumeSlider(vid.volume);
                }
            }
            if (event.keyCode === 98 /*NUM2*/ ) {
                if (vid) {
                    if (vid.volume > 0.1) {
                        event.preventDefault();
                        vid.volume -= 0.1;
                    } else {
                        vid.muted = true;
                        vid.volume = 0;
                    }
                    moveVolumeSlider(vid.volume);
                }
            }
            if (event.keyCode == 87 /*w*/) {
                $("#key-indicator").appendTo(overlay);
            }
        }
    }, false);

    function toggleRunning() {
        if (/^\/(top|new)\//.test(window.location.pathname)) {
            if (!browsing) {
                $('#troll-left').hide();
                $('#troll-right').hide();
                toggleFullScreen(document.documentElement);
                browse();
                overlay.style.display = '';
                body.style.overflowY = 'hidden';
            } else {
                $('#troll-left').show();
                $('#troll-right').show();
                toggleFullScreen(document.documentElement);
                body.style.overflowY = '';
                stop();
            }
            browsing = !browsing;
        }else{
            overlay.style.display = 'none';
        }
        console.log(browsing? 'Pr0γκραμ browser started' : 'Pr0γκραμ browser stopped');
    }

    function stop() {
        if(vid!==null && vid !== undefined){
            vid.setAttributeNode(document.createAttribute('loop'));
        }
        clearTimeout(nextTimeout);
        clearTimeout(timerTimeout);
        var item = document.querySelector('.item-container-content');
        if (vid) {
            item.insertBefore(vid.parentElement, item.firstChild);
            vid.play();
        } else {
            if (img) {
                item.insertBefore(img.parentElement, item.firstChild);
            }
        }
        // vid.pause();
        overlay.style.display = 'none';
        body.style.overflowY = '';
    }

    //continuesly browsing the elements
    function browse() {
        timer = null;
        vid=null;
        img= null;
        clearTimeout(nextTimeout);

        var lastchild = overlay.lastChild;
        if ((overlay.children.length > 1) && browsing) overlay.removeChild(lastchild);

        vid = document.querySelector('video');
        img = document.querySelector('img.item-image');

        if (vid!==null) {
            var volumeBar = document.getElementsByClassName('audio-volume-controls')[0];
            if(volumeBar!==null && volumeBar !== undefined){
                var stl = document.createAttribute('style');
                stl.value = 'opacity: 1;';
                volumeBar.setAttributeNode(stl);
            }
            overlay.appendChild(vid.parentElement);
            vid.removeAttribute('loop');
            vid.removeAttribute('style');
            vid.parentElement.querySelector('.video-controls').style.width = '';
            vid.addEventListener('ended', (event) => {
                if (replay) vid.play();
                else nextTimeout = setTimeout(clickNext, 50);
            }, false);
            vid.play();
        } else if(img!==null){
            overlay.appendChild(img.parentElement);
            timer = new Timer(function() {
                nextTimeout = setTimeout(clickNext, 50);
            }, imgDelay);
        }else{
            overlay.appendChild(lastchild);
        }
    }

    //Secondary functions

    //Update Volume Control Bar
    function moveVolumeSlider(value){
        var volumeBarSlider = document.getElementsByClassName('audio-volume-slider')[0];
        // var currLeft = volumeBarSlider.style.left;
        // var currLeftValue = parseInt(currLeft.substring(0, currLeft.indexOf('%')));
        // volumeBarSlider.style.left = currLeftValue+value+'%';
        // volumeBarIcon.className  = 'audio-state audio-volume-33';
        volumeBarSlider.style.left = value*100+'%';

        var volumeBarIcon = document.getElementsByClassName('audio-state')[0];

        if(value === 0){
            $(".audio-state").attr('class', 'audio-state audio-volume-0');
        }else if(value*100<=33){
            $(".audio-state").attr('class', 'audio-state audio-volume-33');
        }else if(value*100<=66){
            $(".audio-state").attr('class', 'audio-state audio-volume-66');
        }else{
            $(".audio-state").attr('class', 'audio-state audio-volume-99');
        }
    }

    function togglePauseVideo() {
        if (vid) {
            if (vid.paused) {
                vid.play();
            } else {
                vid.pause();
            }
        }
    }

    //Delay a function call
    //@callback: callback function
    //@delay: time delay in ms
    function Timer(callback, delay) {
        var start, remaining = delay;

        this.pause = function() {
            window.clearTimeout(timerTimeout);
            //remaining -= new Date() - start;
            remaining = 0;
        };

        this.resume = function() {
            start = new Date();
            window.clearTimeout(timerTimeout);
            timerTimeout = window.setTimeout(callback, remaining);
        };

        this.resume();
    }

    function toggleTimer() {
        if (paused) {
            timer.resume();
            paused = false;
            console.log('resumed!');
        } else {
            timer.pause();
            paused = true;
            console.log('paused!');
        }
    }

    function eventFire(elem, etype) {
        if (elem.fireEvent) {
            elem.fireEvent('on' + etype);
        } else {
            const evObj = document.createEvent('Events');
            evObj.initEvent(etype, true, false);
            elem.dispatchEvent(evObj);
        }
    }

    function clickNext() {
        if (browsing) {
            eventFire(document.querySelector('.stream-next'), 'click');
            browse();
        }
    }

    function getViewportSize() {
        var w = window,
            d = document,
            e = d.documentElement,
            g = d.getElementsByTagName('body')[0],
            x = w.innerWidth || e.clientWidth || g.clientWidth,
            y = w.innerHeight || e.clientHeight || g.clientHeight;
        return {
            x,
            y
        };
    }

    function toggleFullScreen(elem){
        if ((document.fullScreenElement !== undefined && document.fullScreenElement === null) ||
            (document.msFullscreenElement !== undefined && document.msFullscreenElement === null) ||
            (document.mozFullScreen !== undefined && !document.mozFullScreen) ||
            (document.webkitIsFullScreen !== undefined && !document.webkitIsFullScreen))
        {
            if (elem.requestFullScreen) {
                elem.requestFullScreen();
            } else if (elem.mozRequestFullScreen) {
                elem.mozRequestFullScreen();
            } else if (elem.webkitRequestFullScreen) {
                elem.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);
            } else if (elem.msRequestFullscreen) {
                elem.msRequestFullscreen();
            }
        } else {
            if (document.cancelFullScreen) {
                document.cancelFullScreen();
            } else if (document.mozCancelFullScreen) {
                document.mozCancelFullScreen();
            } else if (document.webkitCancelFullScreen) {
                document.webkitCancelFullScreen();
            } else if (document.msExitFullscreen) {
                document.msExitFullscreen();
            }
        }
    }

    function insertAfter(referenceNode, newNode) {
        referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
    }

    function disableAds(){
        var ads = document.getElementById("ads");
        if(ads !== null && ads !== undefined){
            ads.style.display = "none";
        }
        var ads2 = document.getElementById("adunit");
        if(ads2 !== null && ads2 !== undefined){
            ads2.style.display = "none";
        }
        var moreAds = document.getElementsByTagName('iframe')[0];
        if(moreAds!==null && moreAds!==undefined){
            var i;
            for(i=0;i<moreAds.length;i++){
                if(moreAds[i] !== null && moreAds[i] !== undefined){
                    moreAds[i].style.display = "none";
                }
            }
        }
    }
    function customize(){
        try {
            document.getElementById("tab-new").innerHTML = 'πρόσφατα';
            document.getElementById("tab-new").addEventListener('click', function(){
                document.getElementsByName("q")[0].placeholder = "Αναζήτηση στα πρόσφατα..";
            });

            document.getElementById("tab-top").innerHTML = 'δημοφιλή';
            document.getElementById("tab-top").addEventListener('click', function(){
                document.getElementsByName("q")[0].placeholder = "Αναζήτηση στα δημοφιλη..";
            });

            document.getElementById("tab-stalk").style.display = 'none';

            document.getElementById("secret-santa-badge").style.display = 'none';

            document.getElementsByClassName("filter-desc")[0].innerHTML = "Safe For Work (απλά)";
            document.getElementsByClassName("filter-desc")[1].innerHTML = "Not Safe For Work (πορνό)";
            document.getElementsByClassName("filter-desc")[2].innerHTML = "Not Safe For Life (αηδίες)";

            document.getElementById("filter-save").innerHTML = "εφαρμογή φίλτρου";

            if (/^\/(top)/.test(window.location.pathname)) {
                document.getElementsByName("q")[0].placeholder = "Αναζήτηση στα δημοφιλη..";
            }else{
                document.getElementsByName("q")[0].placeholder = "Αναζήτηση στα πρόσφατα..";
            }
            var msg = document.getElementsByClassName("main-message")[0];
            if(msg!==null && msg!== undefined){
                msg.innerHTML = "Ξαναεπέλεξε μια κατηγορία.";
            }
        }catch(err){console.log(err.message);}
    }

    //CSS styles override
    function initStyles() {
        const viewportSize = getViewportSize();
        style.innerHTML = `
body {
position: relative;
}

.overlay {
position: fixed;
background-color: rgba(0,0,0,0.9);

width: ${viewportSize.x}px;
height: ${viewportSize.y}px;
z-index: 99999990;
display: flex;
align-items: center;
justify-content: center;
top: 0;
left: 0;
overflow: auto;
}

.overlay video {
width: ${viewportSize.x}px;
height: ${viewportSize.y-3}px; /*so we can still see the progress bar*/
pointer-events: none;
}

.overlay .video-controls {
width: 100%;
}

.overlay h1 {
font-size: 120px;
}

.overlay div.video-controls {
cursor: pointer;
}

.overlay div.video-controls:hover div.video-position-bar-background {
height: 8px;
opacity: 0.8;
transition: height 0.2s ease;
}

.overlay div.video-controls:hover div.audio-controls,
.tv-overlay div.video-controls:hover div.audio-volume-controls {
opacity: 1;
transition: opacity 0.2s ease;
}

.overlay .loading {
position: absolute;
left: 50%;
right: 50%;
top: 50%;
bottom: 50%;
font-size: 22px;
color: #008FFF;
white-space: nowrap;
}

.control {
position: fixed;
z-index: 99999991;
top: 5px;
left: 5px;
border: 3px solid #008FFF;
color: #008FFF;
border-radius: 5px;
width: 80px;
height: 80px;
background: rgba(0,0,0,0.3);
padding: 3px 5px;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
}

#head-menu a:hover,
#filter-link-name:hover,
#user-profile-name:hover,
.comment-reply-link,
.tags-expand,
.add-tags-link,
.vote-up:hover,
.vote-fav:hover,
#search-submit-inline:hover,
.tab-bar a:hover,
.tab-bar a:active,
.pict .vote-fav.faved,
.head-link.empty:hover,
.head-link:hover,
.tag a[title="Removing tag"],
.filter-setting.active,
.active .filter-name,
a.active,
.faved,
.voted-up .vote-up,
.warn,
#settings-logout-link,
.action.expand-thread,
a[href='/inbox/unread'] .pict,
a[href='/inbox/unread'] #inbox-count,
#key-indicator{
color: #008fff !important;
}

.confirm-button:hover{
color: #000 !important;
}

a:hover,
.tags-expand:hover,
#settings-logout-link:hover,
.action.expand-thread:hover{
color: #FFF !important;
}

.confirm,
.confirm-button,
#loader div{
background: #008fff;
}

input[value=Abschicken],
.search-submit,
input[value='Nachricht senden'],
.user-follow, input[value='Einstellungen speichern'],
input[value='E-Mail Adresse ändern'],
input[value='Passwort ändern'],
input[value='Einladung verschicken'],
input[value='Tags speichern'],
.user-comment-op, input[value='Anmelden'],
.confirm-button.product-select,
input[value='Bild Hochladen']{
background: #008fff !important;
opacity:1;
}

input.q{
width: 200px;
}

#filter-save:hover,
.user-follow:hover,
.confirm-button.product-select:hover,
input[value='Einladung verschicken']:hover,
input[value='E-Mail Adresse ändern']:hover,
input[value='Passwort ändern']:hover,
input[value='Einstellungen speichern']:hover,
input[value='Anmelden']:hover,
input[value='Tags speichern']:hover,
input[value=Abschicken]:hover,
input[value='Nachricht senden']:hover,
input[value='Einladung verschicken']:hover,
input[value='Bild Hochladen']:hover{
background: #fff !important;
}

input[value='Bild Hochladen']:disabled{
background: #5e5e5e !important;
}

#filter-save{
background: #008fff !important;
}

.stream-prev .stream-prev-icon,
.stream-next .stream-next-icon{
background: #008fff !important;
}

.filter-setting.active
.filter-check{
background: #008fff !important;
border-color:#008fff !important;
}

#upload-droparea{
border: 1px #008fff solid !important;
}

#pr0gramm-logo-background{
fill: #008fff !important;
}

#gpt-divider-rectangle{
display:none !important;
}
#gpt-skyscraper-left{
display:none !important;
}
#gpt-skyscraper-right{
display:none !important;
}
`;}
})();