ExtendYouPorn

Remove ads, enlarges video, stops autoplay keeping buffering, fixes the overhaul style & block pop-ups

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey, Greasemonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да инсталирате разширение, като например Tampermonkey .

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Violentmonkey.

За да инсталирате този скрипт, трябва да имате инсталирано разширение като Tampermonkey или Userscripts.

За да инсталирате скрипта, трябва да инсталирате разширение като Tampermonkey.

За да инсталирате този скрипт, трябва да имате инсталиран скриптов мениджър.

(Вече имам скриптов мениджър, искам да го инсталирам!)

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да инсталирате разширение като Stylus.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

За да инсталирате този стил, трябва да имате инсталиран мениджър на потребителски стилове.

(Вече имам инсталиран мениджър на стиловете, искам да го инсталирам!)

// ==UserScript==
// @author          Jack_mustang
// @version         5.0
// @name            ExtendYouPorn
// @description     Remove ads, enlarges video, stops autoplay keeping buffering, fixes the overhaul style & block pop-ups
// @date            2017 October 3
// @include         *youporn.com/*
// @include         *youporngay.com/*
// @run-at          document-start
// @grant           none
// @license         Public Domain
// @icon            https://gmgmla.dm2301.livefilestore.com/y2pYluU8jK3EnLV1U8D92pYCC9wU5O04Il4j64Ft_pjKGpUG_I5L0fUHrsLpUB4oDCLIJdWp9Bwmr0RPMdhJhl5Bo362RwjatCFUpNjEdMosGA/EYP-logo.jpg
// @namespace       14fac5d83892686b90beea51d35d1d7dbcfe49b6
// ==/UserScript==

// Block popups fallback
function NoOpen() { return 1; }
parent.open = NoOpen;
this.open = NoOpen;
window.open = NoOpen;
open = NoOpen;
window.open = function () { return; };
open = function () { return; };
this.open = function () { return; };
parent.open = function () { return; };

function fnull() {
    return null;
}

// Block ads
Object.defineProperty(window, "adDelivery", {
    get: fnull,
    set: fnull
});
Object.defineProperty(window, "tj_ads", {
    get: fnull,
    set: fnull
});
Object.defineProperty(window, "tj_channels", {
    get: fnull,
    set: fnull
});

// stop autoplay
Object.defineProperty(window, "MHP1138", {
    set: function (e) {
        if (!!e.players.videoContainer) {
            e.players.videoContainer.autoplay = false;
            e.players.videoContainer.autoPlayVideo.enabled = false;
            e.players.videoContainer.flashSettings.autoplay = false;
        }
        window.MHP1138a = e;
    },
    get: function () {
        return window.MHP1138a;
    }
});

// YouPorn overrides this function, we need to to auto-centre
window.scrollVid = window.scrollTo;

(function addStyle() {
    // While <head> is not loaded we keep trying
    if (!document.querySelector("head")) {
        return setTimeout(addStyle, 50);
    }

    // We create an object and start including its content to include in DOM at the end
    var eypcss =
    // Hide ads while we can't remove them
    "iframe,\
    figure,\
    aside,\
    .ad-links-text,\
    .channelSideAd,\
    .sixteen-column.channel-header," +
    // Ad block message
    "#adblock_1," +
    // Change pause button
    "#pb_template > :not(.mhp1138_playerStateIcon)," +
    // Pornstars page, pornstars in one line
    ".nine-column .porn-star-list:last-child {\
        display: none !important;\
    }" +
    // vids in one line, on pornstars page
    ".column-flex,\
    div.eight-column:not(.title-select),\
    div.eight-column .row,\
    .pornstars-list .nine-column,\
    .pornstars-list .nine-column .row {\
        width: 100% !important;\
    }";

    // Inject created CSS
    var eypnode = document.createElement("style");
    eypnode.type = "text/css";
    eypnode.id = "EYP-style";
    eypnode.appendChild(document.createTextNode(eypcss));
    document.head.appendChild(eypnode);
}());

(function ExtendYouPorn(){
    function videoStuff() {
        // Scroll video to middle of page
        function scrollthere() {
            var player = document.getElementById('videoContainer');
            var vh = player.offsetHeight;
            var vd = ((document.querySelector("#network-bar").offsetHeight > 0) ? 0 : 25) + ((player.parentNode.offsetTop == 0)? ((document.querySelector('#studioCanvas'))? document.querySelector('.grid_8.alpha').offsetTop : document.querySelector('.watchWrapper').offsetTop+document.querySelector('#videoCanvas').offsetTop ) : player.parentNode.offsetTop);
            var fh = window.innerHeight;
            sc = vd - ((fh - vh) / 2);
            scrollVid(0, sc);
            // console.info("** ExtendYouPorn **\ntop: " + vd + ", height: " + vh + ", scrolled: " + sc + ", window: " + fh);
        }
        // Inject this function to page
        var script = document.createElement("script");
        script.setAttribute("type", "text/javascript");
        script.innerHTML = scrollthere.toString();
        script.id = "EYP-scrollVid";
        document.body.appendChild(script);
        scrollthere();

        // Keyboard Shortcut for centring
        window.addEventListener('keyup', function (e) {
            if (e.ctrlKey && e.altKey && (e.code === "KeyC" || (e.code === undefined && e.keyCode === 67))) {
                scrollthere();
            }
        }, false);

        // Include button in right corner to center video on screen
        var node = document.createElement("div");
        node.setAttribute("style","position: fixed;" +
                                  "bottom: 0;" +
                                  "right: 0;" +
                                  "cursor: pointer;" +
                                  "color: #fff;" +
                                  "background: #ec567c;" +
                                  "border-top-left-radius: 3px;" +
                                  "text-align: center;" +
                                  "font-size: 12px;" +
                                  "padding: 7px;" +
                                  "z-index: 999999;");
        node.setAttribute("onclick", "scrollthere();");
        node.setAttribute("title", "Use the keyboard shortcut Ctrl+Alt+C (For other keyboard layouts use the key where C should be on the QWERTY layout)");
        node.innerHTML = "Centre";
        node.id = "EYP-scroll";
        document.body.appendChild(node);
    }

    var observer = new MutationObserver(function (changes) {
        changes.forEach(function (chg) {
            if (!!chg.target.className) {
                // remove ad spaces
                if (!!chg.target.className.match(/responsiveIframe/)) {
                    var node = chg.target.parentNode;
                    if (node.parentNode.children.length === 1 && !node.parentNode.className.match(/column/)) {
                        node = node.parentNode.parentNode;
                    }
                    node.parentNode.removeChild(node);
                    return;
                }
                // wide player
                if (!!chg.target.className.match(/playWrapper/)) {
                    chg.target.className = "playWrapper sixteen-column";
                    return;
                }
                // update wide player button
                if (!!chg.target.className.match(/mhp1138_front/)) {
                    chg.target.childNodes.forEach(function (node) {
                        if (!!node.className.match(/mhp1138_cinema/)) {
                            node.className = "mhp1138_cinema mhp1138_cinemaState";
                            return;
                        }
                    });
                    return;
                }
                // centre video
                if (chg.target.id === "videoContainer") {
                    chg.addedNodes.forEach(function (element) {
                        if (!!element && element.id === "pb_template") {
                            console.log(element);
                            var node = document.createElement("div");
                            node.className = "mhp1138_playerStateIcon";
                            node.setAttribute("style", "opacity: 1");
                            node.innerHTML =
                                    "<div class='mhp1138_play' style='display: block'>" +
                                    "    <div class='mhp1138_icon mhp1138_icon-play'></div>" +
                                    "</div>" +
                                    "<div class='mhp1138_background'></div>";
                            element.appendChild(node);

                            videoStuff();
                            return;
                        }
                    });
                }
                return;
            }
        });
    });

    observer.observe(document, {childList: true, subtree: true});
}());