- // ==UserScript==
- // @author Jack_mustang
- // @contributor doej
- // @version 1.21
- // @name PH.com
- // @description Remove ads, enlarges video, stops autoplay keeping buffering & block pop-ups from pornhub.com
- // @date 2016 April 08
- // @include *pornhub.com/*
- // @run-at document-start
- // @grant none
- // @license Public Domain
- // @icon https://gmgmla.dm2301.livefilestore.com/y2pAKJYeZAp4tG23hG68x1mRuEUQXqb1MxdLbuqVnyyuHFxC7ra5Fc-tfq6hD-r9cNnVufT3egUHaimL547xDlESrOVmQsqNSJ5gzaiSccLYzo/ExtendPornHub-logo.png
- // @namespace 649b97180995e878e7e91b2957ef3bbee0f840a0
- // ==/UserScript==
-
- // jshint multistr: true
- // globals: open parent
-
- var QUALITIES = ['240p', '480p', '720p'];
- var CENTER_BUTTON_STYLE = " \
- position: fixed; \
- bottom: 0; \
- right: 0; \
- cursor: pointer; \
- border: 1px solid #313131; \
- border-top-left-radius: 5px; \
- color: #676767; \
- font-weight: 700; \
- background: #101010; \
- text-align: center; \
- font-size: 12px; \
- padding: 7px 15px; \
- z-index: 999999; \
- ";
- var FLASH_VARS = {
- "autoplay" : false,
- "autoload" : true,
- "htmlPauseRoll" : false,
- "htmlPostRoll" : false,
- "video_unavailable_country" : false,
- };
-
- // Block popups
- function yes(e){ return 1; }
- function blockPopups() {
- window.open = yes;
- parent.open = yes;
- // Pop-up killer, we trick PH to think we are old Presto Opera, this kills the pop-ups
- if (!window.opera)
- window.opera = true;
- }
-
- // Autoplay, autoload, etc.
- function changePlayer() {
- if (!document.getElementById('player'))
- return setTimeout(changePlayer, 50);
-
- var player = document.getElementById('player'),
- vidId = parseInt(player.getAttribute("data-video-id")),
- newflashvars = document.createElement("script");
- newflashvars.setAttribute("type", "text/javascript");
- newflashvars.id = "EPH-newflashvars";
- newflashvars.innerHTML = '';
- for (var k in FLASH_VARS) {
- newflashvars.innerHTML += ['flashvars_',vidId,'.',k,'=',FLASH_VARS[k],';\n'].join('');
- }
- document.body.appendChild(newflashvars);
- }
-
- // wait while player doesn't load
- function html5player() {
- var flash = document.querySelector("#player object"),
- html5 = document.querySelector("#player video");
- if (flash === null && html5 === null)
- return setTimeout(html5player, 50);
-
- document.getElementById("hd-rightColVideoPage").setAttribute("class", "wide");
- document.getElementById("player").setAttribute("class", "wide");
- var vidId = parseInt(document.getElementById('player').getAttribute("data-video-id")),
- playerDiv = document.getElementById("playerDiv_"+vidId);
- playerDiv.setAttribute("class", playerDiv.getAttribute("class") + " wide");
- scrollthere();
- }
-
- // Scroll video to middle of page
- function scrollthere() {
- var player = document.getElementById('player'),
- vh = player.offsetHeight,
- vd = document.querySelector(".container").offsetTop +
- document.querySelector(".container").parentNode.offsetTop +
- document.querySelector(".video-wrapper").offsetTop +
- ((document.querySelector("#PornhubNetworkBar>.bar_body") === null) ? 25 : 0),
- fh = window.innerHeight,
- sc = vd-((fh-vh)/2);
- scrollTo(0, sc);
- console.info("** ExtendPornHub **\ntop: "+vd+", height: "+vh+", scrolled: "+sc+", window: "+fh) ;
- }
-
- // Remove ads functions
- 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]);
- }
-
- 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 ephcss =
- // Hide ads while we can't remove them
- "iframe, \
- .home-ad-container, \
- .adblockWhitelisted, \
- .browse-ad-container, \
- .playlist-ad-container, \
- .communityAds, \
- .photo-ad-container, \
- #advertisementBox, \
- .ad_box, \
- .ad-link, \
- .removeAdLink, \
- div[class$=shareBtn], \
- #videoPageAds, \
- .sectionTitle + div:not(#categoriesStraightImages), \
- .edit-mode + div, \
- .generator-sidebar > .sectionWrapper:first-child, \
- .gifsWrapper > div:first-child {\
- display: none !important;\
- }" +
- // Videos Being Watched Right Now in one line + video ads + adBlock bar
- "ul.row-5-thumbs.videos-being-watched li.omega, #pb_block, .abAlertShown {\
- display: none !important;\
- }" +
- // Maximum full-width video
- "div#player {\
- max-width: 100vw;\
- max-height: 100vh;\
- }";
-
- // Inject created CSS
- var ephnode = document.createElement("style");
- ephnode.type = "text/css";
- ephnode.id = "EPH-style";
- ephnode.appendChild(document.createTextNode(ephcss));
- document.head.appendChild(ephnode);
- }
-
- function main(){
- // Stop popups (again)
- blockPopups();
- // Set flash vars
- changePlayer();
- // Remove iframes because they are ads
- removeQuery("iframe:not(#pb_iframe)");
- // Homepage
- removeQuery(".home-ad-container");
- removeQuery(".adblockWhitelisted");
- // Search
- removeQuery(".browse-ad-container");
- // Playlist
- removeQuery(".playlist-ad-container");
- // Community
- removeQuery(".communityAds");
- // Photo Gif
- removeQuery(".photo-ad-container");
- // unique Photo
- removeQuery("#advertisementBox");
- // Video
- removeQuery("videoPageAds");
-
- // Stop unless we're on a video page
- if( ! document.getElementById('player')) {
- return;
- }
-
- // Wide display
- html5player();
-
- // Include button in right corner to center video on screen
- var node = document.createElement("div");
- node.setAttribute("style", CENTER_BUTTON_STYLE);
- node.onclick = scrollthere;
- node.innerHTML = "Center video";
- node.id = "EPH-scroll";
- document.body.appendChild(node);
-
- // Add video download when not logged
- if( document.body.classList[0].search("logged-in") < 0 ) {
- var tab = document.querySelector(".download-tab"),
- dwlinks = '';
- for (var i = 0; i < QUALITIES.length; i++) {
- var quality = QUALITIES[i];
- var quality_url = window["player_quality_" + quality];
- if (quality_url) {
- dwlinks += '<a class="downloadBtn greyButton" target="_blank" href="' + quality_url + '">';
- dwlinks += '<i></i>';
- if (quality === '720p') dwlinks += '<span>HD</span> ';
- quality += '</a>';
- }
- }
- tab.innerHTML = dwlinks;
- }
- }
-
- function consumeKeyDown(e) {
- if (e.altKey && 'C' === String.fromCharCode(e.keyCode)) {
- scrollthere();
- }
- }
-
-
- /*
- *
- * main
- */
-
- blockPopups();
- addStyle();
- window.addEventListener('DOMContentLoaded', main, false);
- document.addEventListener('keydown', consumeKeyDown, false);
-
- // vim: sw=4 noet :