// ==UserScript==
// @author Jack_mustang
// @version 5.2
// @name ExtendRedTube
// @description Remove ads, enlarge video, add video download links, block popups and stops autoplay keeping buffering
// @date 2015 July 15
// @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*
// @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==
var ExtendRT = function ExtendRedTube() {
// Pop-up killer, we trick RT to think we are old Presto Opera, this kills the pop-ups
if (!window.opera)
window.opera = true
//Inject blocker and CSS
addStuff()
window.addEventListener('DOMContentLoaded', function() {
// Remove ads functions, comment these if you just want them hidden
function removeQuery(query) {
var ifr = document.querySelectorAll(query)
if(ifr.length > 0)
for(var i=0; i < ifr.length; i++)
ifr[i].parentNode.removeChild(ifr[i])
}
// Remove header ad
removeQuery('#as_134')
// Remove footer ad
removeQuery('#as_131')
// Remove right ad
removeQuery('.sb')
removeQuery('div.qb')
// Remove below vid ad
removeQuery('.bvq')
removeQuery('.bvq-caption')
// Remove iframe ads
removeQuery("iframe")
var remtab = document.querySelector(".fakeLinkTabber[rel=related-premium-videos]").parentNode
if (remtab !== null)
document.querySelector('.tabsElements').removeChild(remtab)
if(document.getElementById('redtube_flv_player')) {
// move right column if it exists
if(document.querySelector(".video-page-right-col")) {
var rightColumn = document.querySelector(".video-page-right-col"),
rightColumnNode = rightColumn.cloneNode(true),
contentHolder = document.querySelector(".content.pageVideos")
contentHolder.removeChild(rightColumn)
contentHolder.appendChild(rightColumnNode)
}
videoStuff()
// Include thumbnail button tab
var thumbtab = document.createElement("li")
thumbtab.innerHTML = "<a style='cursor:pointer' class='fakeLinkTabber' onclick='$(\"div[class*=tab-content]\").css({\"display\": \"none\"});$(\"#tabsParent>ul li\").attr(\"class\",\"\");$(\"#tabsParent>ul li:last-child\").attr(\"class\",\"activeTab\");$(\"#tabsContentHolder\").attr(\"style\",\"display:none\");$(\"#tagger_thumbs\").attr(\"style\",\"\");$(\"#tabsContentHolder\").slideDown(\"slow\");'>Thumbnails</a>"
var tabs = document.querySelector(".tabsElements")
tabs.appendChild(thumbtab)
// Add arrows to navigate
var tabs = document.querySelector("#tabsParent .tabsElements").childNodes,
l = tabs.length-1
var tabbar = document.getElementById('moreTopSearches').clientWidth,
max = tabbar - tabs[l].offsetLeft - tabs[l].clientWidth - 40
if (max < -41) {
function moveTabs(button, max) {
console.log("lol")
var tabs = document.querySelector("#tabsParent .tabsElements"),
move = tabs.offsetLeft
console.log(move+"\n"+max)
if (button && move > max)
tabs.setAttribute("style", "margin-left: "+(move-20)+"px")
else if (!button && move < 0)
tabs.setAttribute("style", "margin-left: "+(move+20)+"px")
else
clearInterval(mvTab)
}
var prev, next,
moveTabFunc = document.createElement("script")
moveTabFunc.setAttribute("type", "text/javascript")
moveTabFunc.innerHTML = moveTabs.toString()
document.getElementById("tabsParent").appendChild(moveTabFunc)
prev = document.createElement("div")
next = document.createElement("div")
prev.innerHTML = "<"
next.innerHTML = ">"
prev.setAttribute("id", "ERT-prev")
next.setAttribute("id", "ERT-next")
prev.setAttribute("class", "ERT-nav")
next.setAttribute("class", "ERT-nav")
prev.setAttribute("onmouseout", "console.log('onMouseOut');clearInterval(mvTab)")
next.setAttribute("onmouseout", "console.log('onMouseOut');clearInterval(mvTab)")
prev.setAttribute("onmouseover", "mvTab = setInterval(function(){moveTabs(0, 0)}, 50)")
next.setAttribute("onmouseover", "mvTab = setInterval(function(){moveTabs(1, "+max+")}, 50)")
document.getElementById("moreTopSearches").appendChild(prev)
document.getElementById("moreTopSearches").appendChild(next)
}
// Add, check thumbs exist, change location if needed and include div
function changeServer(num) {
var s = '0',
table = '',
source,
nums = num + 1,
vidId = location.pathname
vidId = vidId.slice(1)
vidId2 = vidId.slice(0, vidId.length -3)
while(vidId.length < 7)
vidId = '0' + vidId
while(vidId2.length < 7)
vidId2 = '0' + vidId2
switch(num) {
case 0:
source = 'img03'
break
case 1:
source = 'thumbs.lsw'
break
case 2:
source = 'img01'
break
case 3:
source = 'img02'
break
case 4:
source = 'img04'
break
}
for(i=1; i<17; i++) {
if(i == 10)
s = ''
table = table + '<td><img class="te" '
if(i == 1 && num < 4)
table = table + 'onerror="changeServer('+ nums +');"'
table = table + 'src="http://'+ source +'.redtubefiles.com/_thumbs/'+ vidId2 +'/'+ vidId +'/'+ vidId +'_0'+ s + i +'m.jpg" /></td>'
if(i == 4 || i == 8 || i == 12)
table = table + '</tr><tr>'
}
if(num == 0) {
var node = document.createElement('div')
node.setAttribute('id', 'tagger_thumbs')
node.setAttribute('style', 'overflow:hidden;display:none')
} else
var node = document.getElementById('tagger_thumbs')
node.innerHTML = '<table style="padding:30px 20px 20px"><tr>'+ table +'</tr></table>'
if(num == 0)
document.getElementById('tabsContentHolder').appendChild(node)
}// Now inject this function
var thumbscript = document.createElement("script")
thumbscript.setAttribute("type", "text/javascript")
thumbscript.innerHTML = changeServer.toString() + "changeServer(0);"
document.body.appendChild(thumbscript)
// Download videos without loggin-in, we need to wait both jQuery and $rt.bootstrap.queue to populate
var downloadNow = document.createElement("script")
downloadNow.setAttribute("type", "text/javascript")
downloadNow.setAttribute("id", "ERT-CAPETA")
downloadNow.innerHTML = "function downVids() {\n\
var dwVid = $rt.bootstrap.queue\n\
for (var i=0; i<dwVid.length; i++)\n\
if (dwVid[i].func == 'initVideoDownload')\n\
for (var j=dwVid[i].params.length-1; j>=0; j--)\n\
if (typeof(dwVid[i].params[j]) === 'object')\n\
var downLinks = dwVid[i].params[j]\n\
link = [downLinks.hd,\n\
downLinks.flv,\n\
downLinks.mobile],\n\
linkElem = [document.getElementById('download-link-hd'),\n\
document.getElementById('download-link-flv'),\n\
document.getElementById('download-link-mobile')]\n\
for (i=0;i<3;i++)\n\
if (linkElem[i] && linkElem[i].href == 'javascript:;')\n\
linkElem[i].href = link[i]\n\
}\n\
function redoitalltime() {\n\
(window.jQuery && $rt.bootstrap.queue) ? downVids() : setTimeout(redoitalltime, 200)\n\
}redoitalltime()"
document.body.appendChild(downloadNow)
}
},false)
function videoStuff() {
if (!(document.querySelector("#redtube_flv_player embed") || document.querySelector("#redtube_flv_player video")))
return setTimeout(videoStuff, 50)
// Scroll video to middle of page
function scrollthere() {
var vid = document.querySelector('.watch'),
vh = vid.offsetHeight,
vd = vid.offsetTop + document.querySelector('.pageVideos').offsetTop,
fh = window.innerHeight,
sc = vd-((fh-vh)/2)
scrollTo(0, sc)
}// Now inject this function
var script = document.createElement("script")
script.setAttribute("type","text/javascript")
script.innerHTML = scrollthere.toString() + "scrollthere();"
script.id = ("ERT-scrollVid")
document.body.appendChild(script)
// 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; width:80px; cursor:pointer; background:#121212; padding:5px 10px; border:1px solid #202020; z-index: 10000")
node.setAttribute("onclick", "scrollthere();")
node.innerHTML = "Center video"
document.body.appendChild(node)
// Change player
if (!(document.querySelector('#redtube_flv_player video')==null)) {
var player = document.querySelector('#redtube_flv_player video')
player.setAttribute("onerror", null)
player.setAttribute("onclick", "var vid = event.target;if(vid.paused)vid.play();else vid.pause()")
player.setAttribute("onmouseover", "event.target.controls = true")
player.setAttribute("onmouseout", "event.target.controls = false")
}
if (!(document.querySelector('#redtube_flv_player embed')==null)) {
var player = document.querySelector('#redtube_flv_player').parentNode,
modPlayer = player.innerHTML
modPlayer = modPlayer.replace(/autoplay=true/g,"autoplay=false&autoload=true")
modPlayer = modPlayer.replace(/disablePauseroll=false/g,"disablePauseroll=true")
modPlayer = modPlayer.replace(/disable_sharebar=false/g,"disable_sharebar=true")
modPlayer = modPlayer.replace(/&pauseroll_url=http:\/\/ads(.*).php/g,"")
player.innerHTML = modPlayer
}
}
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
"#as_130, #as_131, #as_134, .sb, div.qb, .bvq, .bvq-caption, iframe:not(#slidePanelContainerloginFrame) {\n\
display: none !important;\n\
visibility: hidden !important;\n\
opacity: 0 !important;\n\
height: 0 !important;\n\
overflow: hidden !important;\n\
width: 0 !important;\n\
}\n" +
// Prevent background ad
"body {\n\
background-color: #000 !important\n\
}\n" +
// Make thumbs have 4 in every row
"ul.video-listing.two-in-row {\n\
width: 100% !important;\n\
}\n\
ul.video-listing.two-in-row .first-in-row:nth-child(3) {\n\
clear: none;\n\
margin-left: 25px;\n\
}\n\
.videoThumbs.three-in-row + .videoThumbs.five-in-row {\n\
display: inline-block;\n\
margin-top: -228px\n\
}\n\
.videoThumbs.three-in-row + .videoThumbs.five-in-row li:first-of-type{\n\
margin-left: 190px !important\n\
}\n\
.videoThumbs > li {\n\
clear: none !important;\n\
margin: 0 9px 20px 0 !important\n\
}\n\
ul.videoThumbs {\n\
width: auto !important\n\
}\n" +
/* PornStars page */
"ul.pornStarsThumbs.four-in-row, .pornstar-videos .video-listing.one-in-row {\n\
width: 100% !important\n\
}\n\
.pornStarsThumbs.four-in-row > li {\n\
clear: none !important;\n\
margin: 0 8px 20px 0 !important\n\
}\n\
.pornStarsThumbs.four-in-row > li:last-child {\n\
margin-right: 0 !important;\n\
}\n\
.pornstar-videos .video-listing.one-in-row li.first-in-row {\n\
clear: none !important;\n\
margin-right: 25px !important\n\
}\n" +
/* Video Page */
// Enlarge player
".video-wrap, .watch, .videoPlayer, #redtubeplayer, #posterHolder, #html5_vid video {\n\
width: 100% !important\n\
}\n\
.videoPlayer, #redtube_flv_player, #redtubeplayer, #html5_vid video, #vidImgPoster {\n\
height: 547.3px !important;\n\
}\n\
#vidImgPoster {\n\
position: static !important;\n\
width: auto;\n\
}\n\
#posterHolder #playBtn {\n\
position: absolute !important;\n\
margin: 0 !important;\n\
top: 40%;\n\
left: 45%;\n\
}\n\
.video-wrap h1.videoTitle {\n\
width: 800px !important\n\
}\n\
.moreTopSearches {\n\
overflow: hidden;\n\
}\n\
.moreTopSearches .topSearch ul.tabsElements li:first-child {\n\
margin-left: 40px !important;\n\
}\n\
.moreTopSearches .topSearch ul.tabsElements {\n\
transition: margin-left 50ms linear;\n\
width: 150% !important;\n\
}\n\
.ERT-nav {\n\
background: #121212;\n\
box-shadow: 0 0 25px 15px #121212;\n\
cursor: pointer;\n\
font-size: 40px;\n\
padding: 0 5px;\n\
position: absolute;\n\
}\n\
.ERT-nav:hover {\n\
color: #FFF;\n\
}\n\
.ERT-nav:last-child {\n\
right: 0;\n\
}\n" +
/* Image galleries list */
".albumThumbs.three-in-row {\n\
width: 100% !important\n\
}\n\
.albumThumbs.three-in-row li:nth-of-type(4) {\n\
clear: none !important;\n\
margin-left: 31px !important\n\
}\n" +
/* Other random pages */
// API
"#wrapper {\n\
background: #FFF !important\n\
}\n"
// 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)
}
}();