SHOW:
|
|
- or go back to the newest paste.
| 1 | // ==UserScript== | |
| 2 | - | // @name New Userscript |
| 2 | + | // @name steam search unfuck |
| 3 | // @namespace http://tampermonkey.net/ | |
| 4 | // @version 0.1 | |
| 5 | // @description try to take over the world! | |
| 6 | - | // @author You |
| 6 | + | // @author javascript olofmeister |
| 7 | - | // @match https://store.steampowered.com/search/ |
| 7 | + | // @match *://store.steampowered.com/search* |
| 8 | // @grant none | |
| 9 | // ==/UserScript== | |
| 10 | ||
| 11 | (function() {
| |
| 12 | console.log(GameHover.toString()); | |
| 13 | ||
| 14 | GameHover = function( elem, event, divHover, rgHoverData ) | |
| 15 | {
| |
| 16 | if (!event) var event = window.event; | |
| 17 | var $Elem = $JFromIDOrElement(elem); | |
| 18 | var $Hover = $JFromIDOrElement(divHover); | |
| 19 | var bNewHoverSpeed = typeof ( g_bNewHoverSpeed) != 'undefined' && g_bNewHoverSpeed; | |
| 20 | ||
| 21 | var oElemState = GetHoverState( $Elem ); | |
| 22 | ||
| 23 | if ( !$Hover.length ) | |
| 24 | {
| |
| 25 | $Hover = $J("\t\t<div class=\"hover game_hover\" id=\"global_hover\" style=\"display: none; left: 0; top: 0;\">\r\n\t\t\t<div class=\"game_hover_box hover_box\">\r\n\t\t\t\t<div class=\"content\" id=\"global_hover_content\">\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t<div class=\"hover_arrow_left\"><\/div>\r\n\t\t\t<div class=\"hover_arrow_right\"><\/div>\r\n\t\t<\/div>");
| |
| 26 | $J(document.body).append( $Hover ); | |
| 27 | } | |
| 28 | ||
| 29 | if ( g_HoverState.hiding && $Hover.is(':visible') && g_HoverState.target == $Elem[0] )
| |
| 30 | {
| |
| 31 | ShowWithFade( $Hover ); | |
| 32 | } | |
| 33 | else if ( ( !$Hover.is(':visible') || g_HoverState.target != $Elem[0] ) && !oElemState.timer )
| |
| 34 | {
| |
| 35 | oElemState.bWantsHover = true; | |
| 36 | var accountId = ( typeof g_AccountID !== 'undefined' ) && !rgHoverData['public'] ? g_AccountID : 0; | |
| 37 | var bPublic = rgHoverData['public'] || accountId == 0; | |
| 38 | var strTargetPrefix = ''; | |
| 39 | var strUrlTarget = ''; | |
| 40 | if ( rgHoverData['type'] == 'app' ) | |
| 41 | {
| |
| 42 | strTargetPrefix = 'hover_app_'; | |
| 43 | strUrlTarget = 'apphover' + ( bPublic ? 'public' : '' ) + '/' + rgHoverData['id']; | |
| 44 | } | |
| 45 | else if ( rgHoverData['type'] == 'sub' ) | |
| 46 | {
| |
| 47 | strTargetPrefix = 'hover_sub_'; | |
| 48 | strUrlTarget = 'subhover' + ( bPublic ? 'public' : '' ) + '/' + rgHoverData['id']; | |
| 49 | } | |
| 50 | else if ( rgHoverData['type'] == 'bundle' ) | |
| 51 | {
| |
| 52 | strTargetPrefix = 'hover_bundle_'; | |
| 53 | strUrlTarget = 'bundle/' + rgHoverData['id'] + '/hover' + ( bPublic ? '_public' : '' ) + '/'; | |
| 54 | } | |
| 55 | else | |
| 56 | {
| |
| 57 | return; | |
| 58 | } | |
| 59 | ||
| 60 | var targetId = strTargetPrefix + rgHoverData['id']; | |
| 61 | var $HoverData = $JFromIDOrElement( targetId ); | |
| 62 | var params = rgHoverData['params'] || {};
| |
| 63 | var nStartHoverTime = new Date().getTime(); | |
| 64 | var fnComputeHoverDelay = bNewHoverSpeed ? | |
| 65 | function() { return Math.max( 100 - ( new Date().getTime() - nStartHoverTime ), 100 );} :
| |
| 66 | function() { return 20; };
| |
| 67 | ||
| 68 | if ( !$HoverData.length && !oElemState.bAjaxRequestMade ) | |
| 69 | {
| |
| 70 | var rgAjaxParams = { u: accountId };
| |
| 71 | if ( bPublic ) | |
| 72 | {
| |
| 73 | // is cc needed? | |
| 74 | rgAjaxParams = { /*cc: rgHoverData['cc'],*/ l: 'english' };
| |
| 75 | } | |
| 76 | if ( rgHoverData['v6'] ) | |
| 77 | {
| |
| 78 | rgAjaxParams['pagev6'] = true; | |
| 79 | } | |
| 80 | ||
| 81 | window.setTimeout( function() {
| |
| 82 | if ( oElemState.bWantsHover && !oElemState.bAjaxRequestMade ) {
| |
| 83 | oElemState.bAjaxRequestMade = true; | |
| 84 | $J.get( 'https://store.steampowered.com/' + strUrlTarget, rgAjaxParams ).done( function( html ) | |
| 85 | {
| |
| 86 | var $Content = $J(html); | |
| 87 | $Content.hide(); | |
| 88 | $Hover.find( '.content' ).append( $Content ); | |
| 89 | ShowGameHover( $Elem, $Hover, targetId, params, fnComputeHoverDelay() ); | |
| 90 | } ); | |
| 91 | } | |
| 92 | }, bNewHoverSpeed ? 5 : 75 ); | |
| 93 | } | |
| 94 | if ( !oElemState.timer ) | |
| 95 | {
| |
| 96 | oElemState.timer = window.setTimeout(function () {
| |
| 97 | oElemState.timer = false; | |
| 98 | oElemState.bReadyForHover = true; | |
| 99 | ShowGameHover( $Elem, $Hover, targetId, params, fnComputeHoverDelay() ); | |
| 100 | }, bNewHoverSpeed ? 10 : 150 ); | |
| 101 | } | |
| 102 | } | |
| 103 | ||
| 104 | } | |
| 105 | ||
| 106 | ShowGameHover = function( elem, divHover, targetContent, params, speed ) | |
| 107 | {
| |
| 108 | console.log(speed); | |
| 109 | var $Elem = $JFromIDOrElement( elem ); | |
| 110 | var $Hover = $JFromIDOrElement( divHover ); | |
| 111 | var $Target = $JFromIDOrElement( targetContent ); | |
| 112 | ||
| 113 | var oElemState = GetHoverState( $Elem ); | |
| 114 | ||
| 115 | if ( !$Target.length || !oElemState.bWantsHover || !oElemState.bReadyForHover || !$J.contains( document, $Elem[0] ) ) | |
| 116 | return; | |
| 117 | ||
| 118 | $Target.siblings().hide(); | |
| 119 | $Target.show(); | |
| 120 | ||
| 121 | g_HoverState.target = $Elem[0]; | |
| 122 | ||
| 123 | var $Toparea = $Target.find( '.hover_top_area' ); | |
| 124 | if ( params && params.top_area_content ) | |
| 125 | {
| |
| 126 | $Toparea.html( params.top_area_content ); | |
| 127 | $Toparea.show(); | |
| 128 | } | |
| 129 | else if ( $Toparea.length ) | |
| 130 | {
| |
| 131 | $Toparea.hide(); | |
| 132 | } | |
| 133 | ||
| 134 | // "show" the hover, but not "visible", letting us do some positioning | |
| 135 | $Hover.css( 'visibility', 'hidden' ).show(); | |
| 136 | ||
| 137 | var $HoverBox = $Hover.find( '.hover_box' ); | |
| 138 | var $HoverArrowLeft = $Hover.find( '.hover_arrow_left' ); | |
| 139 | var $HoverArrowRight = $Hover.find( '.hover_arrow_right' ); | |
| 140 | ||
| 141 | var offset = $Elem.offset(); | |
| 142 | var nWindowScrollTop = $J(window).scrollTop(); | |
| 143 | var nWindowScrollLeft = $J(window).scrollLeft(); | |
| 144 | var nViewportWidth = $J(window).width(); | |
| 145 | var nViewportHeight = $J(window).height(); | |
| 146 | ||
| 147 | var nHoverPositionLeft, nHoverPositionTop; | |
| 148 | ||
| 149 | var $HoverArrow = $HoverArrowLeft; | |
| 150 | var boxRightViewport = ( offset.left - nWindowScrollLeft ) + $Elem.outerWidth() + $HoverBox.width() + 14; | |
| 151 | var nSpaceRight = nViewportWidth - boxRightViewport; | |
| 152 | var nSpaceLeft = offset.left - $Hover.width(); | |
| 153 | if( nSpaceLeft < -10 && nSpaceRight < -10 ) | |
| 154 | {
| |
| 155 | //no room at all | |
| 156 | $Hover.hide().css('visibility','');
| |
| 157 | return; //skip showing the hover | |
| 158 | } | |
| 159 | else if ( nSpaceRight < 14 && nSpaceLeft > nSpaceRight ) | |
| 160 | {
| |
| 161 | nHoverPositionLeft = offset.left - $Hover.outerWidth() + 8; | |
| 162 | $HoverArrow = $HoverArrowRight; | |
| 163 | $HoverArrowLeft.hide(); | |
| 164 | $HoverArrowRight.show(); | |
| 165 | } | |
| 166 | else | |
| 167 | {
| |
| 168 | nHoverPositionLeft = offset.left + $Elem.outerWidth() - 8; | |
| 169 | $HoverArrowLeft.show(); | |
| 170 | $HoverArrowRight.hide(); | |
| 171 | } | |
| 172 | ||
| 173 | var nTopAdjustment = -13; | |
| 174 | if ( $Elem.height() < 63 ) | |
| 175 | nTopAdjustment = Math.floor( $Elem.height() ) / 2 - 56; | |
| 176 | nHoverPositionTop = offset.top + nTopAdjustment; | |
| 177 | $Hover.offset( {top: nHoverPositionTop, left: nHoverPositionLeft} );
| |
| 178 | ||
| 179 | var nTargetTopViewport = ( offset.top - nWindowScrollTop ) + nTopAdjustment; | |
| 180 | if ( nTargetTopViewport + $HoverBox.height() + 8 > nViewportHeight ) | |
| 181 | {
| |
| 182 | var nViewportAdjustment = ( $HoverBox.height() + 8 ) - ( nViewportHeight - nTargetTopViewport ); | |
| 183 | ||
| 184 | nViewportAdjustment = Math.min( $HoverBox.height() - 74, nViewportAdjustment ); | |
| 185 | var nViewportAdjustedHoverTop = offset.top - nViewportAdjustment; | |
| 186 | $Hover.css( 'top', nViewportAdjustedHoverTop + 'px' ); | |
| 187 | ||
| 188 | $HoverArrow.css( 'top', ( 48 + nHoverPositionTop - nViewportAdjustedHoverTop ) + 'px' ); | |
| 189 | } | |
| 190 | else | |
| 191 | {
| |
| 192 | $HoverArrow.css( 'top', '' ); | |
| 193 | } | |
| 194 | ||
| 195 | $Hover.hide(); | |
| 196 | $Hover.css( 'visibility', '' ); | |
| 197 | ||
| 198 | ShowWithFade( $Hover, 10 ); | |
| 199 | ||
| 200 | } | |
| 201 | HideGameHover = function( elem, event, divHover ) | |
| 202 | {
| |
| 203 | ||
| 204 | var $Elem = $JFromIDOrElement( elem ); | |
| 205 | var $Hover = $JFromIDOrElement( divHover ); | |
| 206 | ||
| 207 | var oElemState = GetHoverState( $Elem ); | |
| 208 | ||
| 209 | if ( !$Hover.length ) | |
| 210 | return; | |
| 211 | ||
| 212 | if (!event) var event = window.event; | |
| 213 | var reltarget = $J( (event.relatedTarget) ? event.relatedTarget : event.toElement ); | |
| 214 | if ( reltarget.length && $J.contains( $Elem[0], reltarget[0] ) ) | |
| 215 | return; | |
| 216 | ||
| 217 | if ( oElemState.timer ) | |
| 218 | {
| |
| 219 | window.clearTimeout( oElemState.timer ); | |
| 220 | oElemState.timer = false; | |
| 221 | } | |
| 222 | oElemState.bWantsHover = false; | |
| 223 | oElemState.bReadyForHover = false; | |
| 224 | ||
| 225 | HideWithFade( divHover, 20 ); | |
| 226 | ||
| 227 | } | |
| 228 | })(); |