X-Hamster

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

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

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

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

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.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

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

        
});