ExtendRedTube

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

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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});
}());