Sleazy Fork is available in English.

X-Hamster

Keyboard driven changing layout, full browser player with ability to re-size, remove auto-play, auto-scroll to video, bigger thumbs

// ==UserScript==
// @name       X-Hamster
// @namespace  http://use.i.E.your.homepage/
// @version    0.4001
// @description  Keyboard driven changing layout, full browser player with ability to re-size, remove auto-play, auto-scroll to video, bigger thumbs
// @match      *://xhamster.com/*
// @require    http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js

// @require    https://greasyfork.org/scripts/6882-riklomas-jquery-quicksearch/code/riklomasjqueryquicksearch.js?version=27465
// @require    https://greasyfork.org/scripts/6881-wait-until-exists-version-v0-2/code/Wait%20Until%20Exists%20Version%20v02.js?version=27464
// @require    https://greasyfork.org/scripts/6883-tinysort-tsort/code/TinySorttsort.js?version=27466

// @grant      GM_getValue
// @grant      GM_setValue
// @grant      GM_deleteValue
// @grant      GM_log

// @run-at     document-start

// @copyright  2014+, You
// ==/UserScript==

/*global $, jQuery*/

/*jshint -W014, -W082*/
// -W014, laxbreak, Bad line breaking before '+'
// -W082,a function declaration inside a block statement

function l(name,func)
{ 
    console.log( name, func !== undefined ? func : '' ); 
}

(function ($) {
    
    $.fn.waitUntilExists = function (handler, shouldRunHandlerOnce, isChild) 
    {
        var found  = 'found',
        $this	   = $(this.selector),
        $elements  = $this.not(function () { return $(this).data(found); }).each(handler).data(found, true);

        if( !isChild ) 
        {
            (window.waitUntilExists_Intervals = window.waitUntilExists_Intervals || {})[this.selector] =
                window.setInterval(function () { 
                    $this.waitUntilExists(
                        handler, shouldRunHandlerOnce, true); 
                }, 500);
        } 
        else if (shouldRunHandlerOnce && $elements.length) 
        {
            window.clearInterval(window.waitUntilExists_Intervals[this.selector]);
        }
		return $this;
	};
        
}(jQuery));

//ScrollZoomTune("div.thumb .title a",1,-25,1,'slow');
function ScrollZoomTune(selection, zomms, tune, ani, speed)
{
    $('body').css('zoom',zomms);
    
    var position = $( selection ).position();
    position = position.top + tune;
    
    if( ani == 1 ){
        $('body').animate({ scrollTop: position * zomms }, speed); }
    else {
        $('body').scrollTop( position * zomms );
    }
}

String.prototype.formatString = function(){ 
    return this.toString()
                .split(/\s+/g).join(' ')
                .split('{').join('{\n\t')
                .split('; ').join(';')
                .split(';').join(';\n\t')
                .split('*/').join('*/\n')
                .split('}').join('}\n'); 
};

function refreshElement( elem , speed ) //refreshElement('.videoPlayer','slow');
{
    var data = $( elem ).html();
    $( elem ).empty().html( data ).fadeIn( speed );
}   
 
$( '#player object' ).waitUntilExists(function(){
    
    if( $( this ).hasClass('donne') ) return false;
    $( this ).addClass('donne');
    
    var flashvar = $( '#player object param[name=flashvars]' ).attr('value');     
    $( '#player object param[name=flashvars]' ).attr('value',flashvar.replace("&autostart=true&","&autostart=false&autoload=true&"));
    
    setTimeout(function(){
    	refreshElement( '#player', 128 );
        ScrollZoomTune("#content",1,5,1,'slow');
        $( '#player' ).on('mousedown', function(){
            $( '#player' ).addClass('clicked');
        });
    },128);    
});

function RefreshButton()
{
    var newRefreshButtonCss, newRefreshButton = ' '
	+	'<div class="RefreshButton">'
	+		'<div class="wrap"></div>'
        +	'</div>';
    
    newRefreshButtonCss = ' '
	+	' .RefreshButton {'
	+		' position: relative;'
	+		' height: 27px;'
	+		' margin-top: -28px;'
        +		' }'
	+	' .RefreshButton .wrap {'
	+		' position: absolute;'
	+		' height: inherit;'
	+		' width: 17px;'
	+		' right: 0px;'
	+		' zoom: 1.8;'
	+		' top: 0px;'
	+		' background-image: url(http://eu-st.xhamster.com/images/tpl2/icons.png?5);'
	+		' background-position: 1px -51px;'
        +		' cursor: pointer;'
	+		' }'
        +	' .RefreshButton .wrap:hover {'
	+		' background-position: -15px -51px;'
	+		' }';
    
    $("style#tamper").append( newRefreshButtonCss.formatString() );    
   
    setTimeout(function(){
        $( "#playerBox .head.gr" ).append( newRefreshButton ); 
        $( '.RefreshButton .wrap' ).on('click',function(){
            refreshElement( '#player', 250 );    
        });
    },250);    
}

function searchMenue()
{
    $( "#searchFrom > div:nth-child(6)" ).insertAfter( "#searchFrom .menu2" );
    
    var newSearchMenue = ' '
	+	'<div class="box">'
	+		'<div class="head gr">Filter Search</div>'
	+		'<div class="boxC radio" style="height: 105px">'
	+			'<label class="sel"><input type="radio" name="unFiltered" value="" checked=""> Unfiltered</label>'
	+			'<label class=""><input type="radio" name="exactMatch" value=""> Exact Match</label>'
	+			'<label><input type="radio" name="filterMore" value=""> Filter More<div id="searhthis" style="margin-top:10px;">'
        +                              '<input id="sub_search"></div></label>'
	+		'</div>'
	+	'</div>';
    $( "#searchFrom .menu2" ).after( newSearchMenue ); 
    
    $("#sub_search, #searchRes2 > div.box > div.boxC > table > tbody > tr > td > div:nth-child(2) > u").on("change keyup paste", function(){
        
        $('input#sub_search').quicksearch('.video');        
        var newinputtext = $( '#sub_search' ).val();
        $.cookie( "inputtext", newinputtext );
	});     
}

function resize( newWidth )
{
     var newResize =
         '.main, table#content, #playerBox, #commentBox, #related, #playerBox, #commentBox, #related {'
    +		' width: '+newWidth+'px !important;'
    +		' }'
    +	'#player, #player object, #player .noFlash, #playerSwf, .noFlash, video, .mp4Thumb, .mp4Thumb img {'
    +		' width: 100%;'
    +		' height: calc( ('+newWidth+'px - 20px) * (10/16)) !important;'
    +		' }';   
    
    $('#cssResize').empty().append( newResize.formatString() );  
}

function fullPlayer(){
      
    var cssfullPlayer =
        '#header, #content tr:nth-child(2), #commentBox, .tools, #videoInfoBox, .head.gr, #footer {'
    +		' display: none !important;'
    +		' }'
    +	' #content {'
    +		' margin-top: 0px;'
    +		' }'
    +	' body {'
    +		' overflow: hidden;'
    +		' }';
    
    $('#cssfullPlayer').empty().append( cssfullPlayer.formatString() );
     
    resize( $( window ).width() );
    
    if( $('#player').hasClass('clicked') === false )
    {
        refreshElement('#player','fast');
    }   
    
    ScrollZoomTune("#content",1,-10,1,'slow');
}

$( window ).resize(function()
{
    if( $('html').hasClass('fullplayer') )
    {
        resize( $( this ).width() );
    }
    
    if( $('#player').hasClass('clicked') === false )
    {
        refreshElement('#player','fast');
    }
    
});

function movies( newWidth ){
    
    var newRulesSortMenue =
    	'#idxFeach {'
    +		' display: none !important;'
    +		' }'
    +	'.adVideo2 {'
    +		' display: none;'
    +		' }'
    +	' table#header {'
    +		' width: 1000px;'
    +		' margin: auto;'
    +		' }';
    
    resize(newWidth);
    
    newRulesSortMenue +=
		'#playerBox .boxC {'
	+		' box-sizing: border-box;'
	+		' padding-right: 18px;'
	+		' }'
	+	'.tools {'
	+		' width: 100%;'
	+		' }'
	+	'#videoInfoBox {'
	+		' width: calc(100% - 12px);'
	+		' }'
	+	'.box .line, .box .lineS {'
	+		' width: calc(100% + 18px);'
	+		' }'
	+	'.tabs {'
	+		' width: inherit;'
	+		' }'
	+	'.tabs .content {'
	+		' max-width: none;'
	+		' width: 100%;'
	+		' }'
        +	'#related .tab {'
	+		' width: 100%;'
	+		' }'
	+	'#relatedVid, #relatedVid table {'
	+		' width: inherit;'
	+		' }'
	+	'#relatedVidList {'
	+		' width: inherit;'
	+		' height: initial;'
	+		' }'
	+	'.video {'
        +		' width: calc(100% / 5 - 18px);'
	+		' height: 100%;'
	+		' display: inline-table; }'
	+	'.video a {'
	+		' width: 100%;'
	+		' }'
	+	'.video .thumb {'
	+		' width: inherit;' 
	+		' height: initial;'
	+		' }'
	+	'.video b, .video .hPaid {'
	+		' top: calc(100% - 72px);'
	+		' left: calc( 100% - 38px);'
	+		' }'
	+	'.video u {'
	+		' height: 30px;'
	+		' }'
	+	'#relatedVid .arrowL, #relatedVid .arrowR {'
	+		' vertical-align: initial;'
	+		' }'
        +	'#relatedVid .arrowR a, #relatedVid .arrowL a {'
	+		' margin-top: 0px;'
	+		' }';
    $("style#tamper").append( newRulesSortMenue.formatString() );  
    
    $(' #relatedVid').hide();
    setTimeout(function(){    
        var hh = $('#relatedVidList .video').width() - 1; l( 'hh', hh );
        hh = hh / 160; l( 'hh', hh );
        
        newRulesSortMenue = ' '
        +	'.video .hSprite {'
        +		' transform: scale('+ hh +');'
        +		' transform-origin: 1px 1px;'
        +		' }';
        $("style#tamper").append( newRulesSortMenue.formatString() );
    },10);    
    setTimeout(function(){
        newRulesSortMenue = ' '
        +	' #relatedVid .arrowL, #relatedVid .arrowR {'
        +		' padding-top: calc('+ $('#relatedVid table').height() +'px / 2 - 49px);'
        +		' }';
        $("style#tamper").append( newRulesSortMenue.formatString() );  
        
        
    },500);
    
    refreshElement( '#relatedVid', 1);
    $(' #relatedVid').show();
}

function basic(){
    
    var newRulesSortMenue = ' '
	+	'.clear {'
	+		' display: none;'
	+		' }'
	+	'.video {'
	+		' height: 240px;'
	+		' max-height: none;'
	+		' width: 245px;'
	+		' }'
	+	'#searchResR, .video .xhSprite {'
	+		' display: none;'
	+		' }'
	+	'.video .thumb, .video .hSprite {'
	+		' zoom: 1.53 !important;'
	+		' }'
	+	'.video b, .video .hPaid {'
	+		' top: 166px;'
	+		' color: antiquewhite;'
	+		' background: rgba(139, 0, 0, 0.45);'
	+		' }';           
    $("style#tamper").append( newRulesSortMenue.formatString() );   
}

function search(){

        $('.main').css('cssText','width: 1507px;'); 
        $('#searchFrom, #searchMenu').css('cssText','width: 222px;');
    
        searchMenue(); 
    
        console.log('searchMenuNew');

}

function channel(){

    $('.main').css('cssText','width: 1422px;'); 
    $(".pager").before('<div class="clear" style="display: block;"></div>');
    
}

function preSorter(){
    
    if( !$('.boxTL .boxC>div').hasClass('sortedBYme') )
    {        
        var counter = 1;
        $('.boxTL .boxC>div').each(function(counter)
        {            
            $( this ).addClass('sortedBYme');
            $( this ).attr( 'data-SortCounts', counter );
            $( this ).attr( 'data-SortLength', $( this ).find('b').text() );
            counter++;              
        });    
    }
}

function pager(){
    
    $(".boxTL .boxC>div.pager").attr('id','pager-bottom');
    $(".box.boxTL .boxC").attr('id','target-GPM');

    $( "#pager-bottom" ).insertAfter( $( "#target-GPM" ) );
    
    var field1 = $('#pager-bottom').clone();
    field1.attr('id','pager-top');
    field1.insertBefore( $( "#target-GPM" ) );
    
    $( "#pager-top, #pager-bottom" ).css('cssText','width: 1277px; margin-left: 0px; padding-bottom: 10px; ');
    
}

function SizeDate(){
      
    var newButtonsMenue = '', sortOrder = '', buttonToSelect = GM_getValue( "newSizeDate" );
    
    newButtonsMenue = 
        '<a id="sortbydate" class="sel">Date</a>' +
	'<a id="sortbylength" class="">Length</a>';        
    $( "div.btnsRight" ).append( newButtonsMenue ); 
    $( ".box .head .btnsBetween" ).append( newButtonsMenue ); 

        
    function selButton(){
        
        console.log('buttonToSelect',buttonToSelect);
        
        if ( buttonToSelect == 'date' ){
            sortOrder = 'asc';
            $('#sortbylength').removeClass('sel');
            $('#sortbydate').addClass('sel');
            $('.vDate, .fl').css('cssText','display: block;');
            pager();
            preSorter();
            $('.boxTL .boxC>div').tsort({attr:'data-SortCounts', order: sortOrder });
        } else if ( buttonToSelect == 'lenght' ){
            sortOrder = 'decs';
            $('#sortbydate').removeClass('sel');
            $('#sortbylength').addClass('sel');
            $('.vDate, .fl').css('cssText','display: none;');
            pager();
            preSorter();
            $('.boxTL .boxC>div').tsort({attr:'data-SortLength', order: sortOrder });
        } else {
            buttonToSelect = 'lenght';
            selButton();
        }
    }
    
    selButton();
    
    $('#sortbydate').on('click', function(){
        var newSizeDate = 'date',sortOrder = 'asc';
        $('#sortbylength').removeClass('sel');
        $('#sortbydate').addClass('sel');
        $('.vDate, .fl').css('cssText','display: block;');
        GM_setValue( "newSizeDate", newSizeDate );
        //$.cookie( "newSizeDate", newSizeDate );
        $('.boxTL .boxC>div').tsort({attr:'data-SortCounts', order: sortOrder });
    });

    $('#sortbylength').on('click', function(){
        var newSizeDate = 'lenght',sortOrder = 'decs';
        $('#sortbydate').removeClass('sel');
        $('#sortbylength').addClass('sel');
        $('.vDate, .fl').css('cssText','display: none;');
        GM_setValue( "newSizeDate", newSizeDate );
        //$.cookie( "newSizeDate", newSizeDate );
        $('.boxTL .boxC>div').tsort({attr:'data-SortLength', order: sortOrder });
    });

}
document.addEventListener('keydown', function(e) {
           
    if (e.keyCode == 27) { //esc
        if( $('html').hasClass('fullplayer') === false ) return false;
        
        $('html').removeClass('fullplayer');
        $("style#cssfullPlayer").empty();
        
        resize(1450);
        
        if( $('#player').hasClass('clicked') === false )
        {
            refreshElement('#player','fast');
        }  
        
        ScrollZoomTune("#content",1,5,1,'slow');
    }
    else if (e.keyCode == 66) { //b
        if( $('html').hasClass('fullplayer') ) return false;
        $('html').addClass('fullplayer');
        fullPlayer();
    }
        
/*    else if (e.keyCode == 76) { //L
        
    }
    else if (e.keyCode == 78) { //n
        t_PW = t_normal;
        fn_init();
	fn_playerWidth( t_PW );
        GM_setValue('likuoo_PW', t_PW);
        ScrollZoomTune("#container",1,-25,1,'slow');
    }
    else if (e.keyCode == 87) { //w
        t_PW = t_wide;
        fn_init();
	fn_playerWidth( t_PW );
        GM_setValue('likuoo_PW', t_PW);
        ScrollZoomTune("#container",1,-25,1,'slow');
    }
    else if (e.keyCode == 79) { //O
        GM_setValue('likuoo_PW', 655);
        $("style#fullplayer, style#playerWidth, style#CssBasic").empty();
    }*/
}, false);

waitUntilExists(document,function(){

    var astr = window.location.href,
        ares = astr.split("/"),
        Wait_search,
        ch;
    
    console.log('astr',astr);console.log('ares',ares);

	$('<style id="tamper"></style><style id="cssfullPlayer"></style><style id="cssResize"></style>').appendTo('head');

    if ( astr == 'http://xhamster.com/' ||  astr == 'https://xhamster.com/' )
    {        
        $('div#vPromo, div#idxFeach').css('margin-top','40px');
        console.log('root');
    }
    else if ( ares[3] == 'movies' )
    {   
        movies(1450);
        RefreshButton();
        console.log('movies');
        //wideVideo();
    }
    else if ( ares[3] == 'user' )
    {    
        if ( ares[4] !== 'video' )
        { 
            userProfile(); 
        }  
        else if ( ares[4] == 'video' )
        { 
            channel(); 
        } 
    } 
    else if ( ares[3].substring(0,6) == 'search' )
    {           
        function Wait_search(){
            
            if( $('#searchFrom').size() >  0 ){
                basic();
                search();                
            } else {
                console.log('Wait_search');
                setTimeout(function(){
                    Wait_search();
                },25);
            }
        } 
        Wait_search();
        
        var arrayQuery = astr.split("?"); 
        arrayQuery = arrayQuery[1].split("&");												
        
        $.each(arrayQuery, function(Index, value)
        {        
            if( value.substring(0,1) === 'q' && value.substring(0,4) != 'qcat') 
            {                
                var searchQuery = value.split("=");
                if ( searchQuery[1] == GM_getValue("searchQuery") ) 
                {
                       var inputtext = GM_getValue("inputtext");									
                       $('input#sub_search').val( inputtext ).focus();
                } 
                else if ( searchQuery[1] != GM_getValue("searchQuery") ) 
                {																			
		        GM_setValue( "searchQuery", searchQuery[1] );
			$('input#sub_search').focus();                
                }
            }
        });
    }
    else if ( ares[3] == 'photos' && ares[4] == 'view')
    {        
        document.addEventListener('keydown', function(e) {
            GM_log(e.keyCode);
            if (e.keyCode == 37) {
                slide.showPrev(true);
                $("a.prev").click();
            }
            if (e.keyCode == 39) {
                slide.showNext(true);
                $("a.next").click();
            }
        }, false);
            
        console.log('ViewPhotos');        
     } 
     else if ( ares[3] == 'photos' || ares[3] == 'channels' || ares[3] == 'new')
     {
         function ch(){
             console.log('#main',$('#main').size());
             if( $('#main').size() >  0 ){
                 basic();        
                 channel();
                 SizeDate();
             } else {
                 setTimeout(function(){
                     ch();
                 },10);
             }
         }
         
         ch();
         
         if ( ares[3] == 'photos'){
             photo();
         }    
         console.log('pcn');  
     } 
     else 
     {        
         channel();        
     }    

        
});