ExtendRedTube

Remove ads, enlarge video, add video download links, block popups and stops autoplay keeping buffering

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Greasemonkey lub Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana jest instalacje jednego z następujących rozszerzeń: Tampermonkey, Violentmonkey.

Aby zainstalować ten skrypt, wymagana będzie instalacja rozszerzenia Tampermonkey lub Userscripts.

You will need to install an extension such as Tampermonkey to install this script.

Aby zainstalować ten skrypt, musisz zainstalować rozszerzenie menedżera skryptów użytkownika.

(Mam już menedżera skryptów użytkownika, pozwól mi to zainstalować!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Będziesz musiał zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

Musisz zainstalować rozszerzenie menedżera stylów użytkownika, aby zainstalować ten styl.

(Mam już menedżera stylów użytkownika, pozwól mi to zainstalować!)

// ==UserScript==
// @author          Jack_mustang
// @version         6.0
// @name            ExtendRedTube
// @description     Remove ads, enlarge video, add video download links, block popups and stops autoplay keeping buffering
// @date            2017 October 3
// @include         *redtube.com*
// @include         *redtube.org*
// @include         *redtube.cz*
// @include         *redtube.es*
// @include         *redtube.fr*
// @include         *redtube.it*
// @include         *redtube.kr*
// @include         *redtube.pl*
// @include         *redtube.si*
// @exclude         *blog.redtube.com*
// @exclude         *api.redtube.com*
// @run-at          document-start
// @grant           none
// @license         Public Domain
// @icon            https://gmgmla.dm2301.livefilestore.com/y2phTdvWAn7a3fxjda6GWNCiS1ERegalgwxn5z-65SPxhpws5ISHa-Z8CHpmq18FPUOBm-3QJtCfOYFaiyM0Kji1MwBUy6mkxBLJtc5THpPtEU/ERT-logo.png
// @namespace       44db8537bb6ac3d112dd3b5ec7b6b33b84aa5765
// ==/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.redtube_flv_player) {
            e.players.redtube_flv_player.autoplay = false;
            e.players.redtube_flv_player.autoPlayVideo.enabled = false;
            e.players.redtube_flv_player.flashSettings.autoplay = false;
        }
        window.MHP1138a = e;
    },
    get: function () {
        return window.MHP1138a;
    }
});

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

    // We create an object and start including its content to include in DOM at the end.
    var ertcss =
    // Hide ads while we can't remove them
    ".tja,\
    .tj_ads_remove,\
    #slidePanelContainerAB,\
    .footerAd,\
    .bvq,\
    .bvq-caption {\
        display: none !important;\
        visibility: hidden !important;\
        opacity: 0 !important;\
        height: 0 !important;\
        overflow: hidden !important;\
        width: 0 !important;\
    }" +
    // Prevent background ad
    "body {\
        background-color: #000 !important;\
    }" +
    // Make thumbs have 4 in every row
    "#home_page_section_c,\
    #community_section_b {\
        display: none;\
    }\
    ul.video-listing.two-in-row {\
        width: 100% !important;\
    }\
    ul.video-listing.two-in-row .first-in-row:nth-child(3) {\
        clear: none;\
        margin-left: 25px;\
    }" +
    // Porstar page
    ".pornstar-small-info,\
    .close-button,\
    .show-less-link {\
        display: none !important\
    }\
    .pornstar-highlight {\
        background: none !important;\
        margin-bottom: -390px !important;\
        width: auto !important;\
        z-index: 2;\
    }\
    .pornstar-details-subscribe {\
        margin-right: 0 !important;\
        padding-left: 235px\
    }\
    .pornstar-all-info {\
        float: right !important;\
        width: 485px !important;\
    }\
    .pornstar-highlight-more {\
        display: block !important\
    }" +
    // PornStars page
    "ul.pornStarsThumbs.four-in-row {\
        width: 100% !important\
    }\
    .pornStarsThumbs.four-in-row > li {\
        clear: none !important;\
        margin: 0 8px 20px 0 !important\
    }\
    .pornStarsThumbs.four-in-row > li:last-child {\
        margin-right: 0 !important;\
    }" +
    // Gallery
    ".gallery-listing.three-in-row .first-in-row {\
        clear: none !important;\
        margin-left: 24px !important;\
    }\
    .galleriesTable .pages {\
        padding: 45px 0 125px 100px;\
    }\
    .gallery-listing.three-in-row li:last-child {\
        position: absolute;\
        bottom: 135px;\
        margin-left: 0 !important;\
    }" +
    // Video Page
    // Enlarge player
    ".video-wrap,\
    .watch,\
    .videoPlayer {\
        width: 100% !important;\
    }\
    .videoPlayer {\
        height: auto !important;\
    }\
    .mhp1138_container .mhp1138_videoWrapper,\
    .mhp1138_container .mhp1138_videoWrapper video {\
        height: auto !important;\
        position: static !important;\
    }" +
    // Change pause button
    "#pb_template > :not(.mhp1138_playerStateIcon) {\
        display: none;\
    }";

    // Inject created CSS
    var ertnode = document.createElement("style");
    ertnode.type = "text/css";
    ertnode.id = "ERT-style";
    ertnode.appendChild(document.createTextNode(ertcss));
    document.head.appendChild(ertnode);
}());

(function ExtendRedTube() {
    function videoStuff() {
        // Scroll video to middle of page
        function scrollthere() {
            var vid = document.querySelector(".watch");
            var vh  = vid.offsetHeight;
            var vd  = vid.offsetTop + document.querySelector("#contentHolder").offsetTop;
            var fh  = window.innerHeight;
            var sc  = vd - ((fh - vh) / 2);
            console.log(vd);
            scrollTo(0, sc);
        }
        // Now inject this function
        var script = document.createElement("script");
        script.setAttribute("type", "text/javascript");
        script.innerHTML = scrollthere.toString();
        script.id = ("ERT-scrollVid");
        document.head.appendChild(script);
        window.setTimeout(scrollthere, 500);

        // 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;" +
                                   "top: auto !important;" +
                                   "height: 15px;" +
                                   "cursor: pointer;" +
                                   "background: #121212;" +
                                   "padding: 5px 10px;" +
                                   "border: 1px solid #202020;" +
                                   "z-index: 10000");
        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";
        document.body.appendChild(node);

        // Download withouth being logged
        if (!!document.querySelector("#download-link-hd")) {
            node = document.querySelector("#download-link-hd");
            node.parentNode.appendChild(node.cloneNode());
            node.parentNode.lastElementChild.innerText = node.innerText.match(/[^\n]+/)[0];
            node.parentNode.removeChild(node);
        }
        if (!!document.querySelector("#download-link-480p")) {
            node = document.querySelector("#download-link-480p");
            node.parentNode.appendChild(node.cloneNode());
            node.parentNode.lastElementChild.innerText = node.innerText.match(/[^\n]+/)[0];
            node.parentNode.removeChild(node);
        }
        if (!!document.querySelector("#download-link-mobile")) {
            node = document.querySelector("#download-link-mobile");
            node.parentNode.appendChild(node.cloneNode());
            node.parentNode.lastElementChild.innerText = node.innerText.match(/[^\n]+/)[0];
            node.parentNode.removeChild(node);
        }

        // Thumbnail tabs
        var remtab = document.querySelector(".fakeLinkTabber[rel=related-premium-videos]").parentNode;
        if (!remtab) {
            document.querySelector(".tabsElements").removeChild(remtab);
        }
    }

    var observer = new MutationObserver(function (changes) {
        changes.forEach(function (chg) {
            if (chg.target.id === "redtube_flv_player") {
                chg.addedNodes.forEach(function (element) {
                    if (!!element && element.id === "pb_template") {
                        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();
                    }
                });
            }
        });
    });

    // starts the mutation observer
    observer.observe(document, {childList: true, subtree: true});
}());