NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name SteamGifts Steam Ratings // @namespace SG Ratings // @include *://www.steamgifts.com/ // @include *://www.steamgifts.com/giveaways/search?* // @include *://www.steamgifts.com/giveaway/* // @include *://www.steamgifts.com/group/* // @version 1.6.9.2 // @require https://code.jquery.com/jquery-3.2.1.min.js // @grant GM_xmlhttpRequest // @grant GM.xmlHttpRequest // @grant GM_addStyle // @grant GM.addStyle // @grant GM_registerMenuCommand // @grant GM.registerMenuCommand // @grant GM_getValue // @grant GM.getValue // @grant GM_setValue // @grant GM.setValue // @grant GM_listValues // @grant GM.listValues // @grant GM_deleteValue // @grant GM.deleteValue // @connect store.steampowered.com // @connect query.yahooapis.com // @run-at document-end // @license MIT // @description:en Show Steam ratings on SteamGifts. // @description Show Steam ratings on SteamGifts. // ==/UserScript== // GM4+ compatiblity code adapted from https://github.com/StigNygaard/GMCommonAPI.js STARTS HERE // let info = (GM_info ? GM_info : GM.info); if (info.scriptHandler === 'Greasemonkey' && parseInt(info.version,10)>=4){ console.log("Using compatibility mode for GM4+"); var GM4 = true; } else { var GM4 = false; } function GM__registerMenuCommand(caption, commandFunc, options) { if (!GM4){ GM_registerMenuCommand(caption, commandFunc, options); } else { if (typeof options === 'string') { options = {'accessKey': options}; } else if (typeof options === 'undefined') { options = {}; } if (!options['disabled']) { let prefix = ''; if (options['type'] === 'radio') { prefix = options['checked'] ? '\u26AB ' : '\u26AA '; } else if (options['type'] === 'checkbox') { prefix = options['checked'] ? '\u2B1B ' : '\u2B1C '; } } let oMenu = document.createElement('menu'); if (oMenu.type !== 'undefined') { if (!document.body) { return; } let topMenu = null; if (document.body.getAttribute('contextmenu')) { topMenu = document.querySelector('menu#' + document.body.getAttribute('contextmenu')); } if (!topMenu) { topMenu = document.createElement('menu'); topMenu.setAttribute('type', 'context'); topMenu.setAttribute('id', 'gm-registered-menu'); document.body.appendChild(topMenu); document.body.setAttribute('contextmenu', topMenu.getAttribute('id')); } let menuItem = document.createElement('menuitem'); menuItem.setAttribute('type', options['type'] ? options['type'] : 'command'); menuItem.setAttribute('label', caption); if (options['id']) menuItem.setAttribute('id', options['id']); if (options['name']) menuItem.setAttribute('name', options['name']); if (options['checked']) menuItem.setAttribute('checked', 'checked'); if (options['disabled']) menuItem.setAttribute('disabled', 'disabled'); if (options['icon']) menuItem.setAttribute('icon', options['icon']); if (options['topLevel']) { topMenu.appendChild(menuItem); } else { let scriptMenu = topMenu.querySelector('menu[label="SteamGifts Steam Ratings"]'); if (!scriptMenu) { scriptMenu = document.createElement('menu'); scriptMenu.setAttribute('label', "SteamGifts Steam Ratings"); topMenu.appendChild(scriptMenu); } scriptMenu.appendChild(menuItem); } menuItem.addEventListener('click', commandFunc, false); } } } function GM__setValue(name, value) { if (!GM4){ GM_setValue(name, value); } else { localStorage.setItem("SGSR" + '_' + name, value); } } function GM__getValue(name, defvalue) { if (!GM4){ return GM_getValue(name, defvalue); } else { if (("SGSR"+'_'+name) in localStorage) { return localStorage.getItem("SGSR"+'_'+name); } else { return defvalue; } } } function GM__deleteValue(name) { if (!GM4){ GM_deleteValue(name); } else { localStorage.removeItem("SGSR" + '_' + name); } } function GM__listValues() { if (!GM4){ return GM_listValues(); } else { let values = []; let prefix = "SGSR"; let prelen = 4; for (let i = 0; i < localStorage.length; i++) { if (localStorage.key(i).substr(0, prelen) === prefix) { values.push(localStorage.key(i).substr(prelen+1)); } } return values; } } function GM__addStyle(style) { if (!GM4){ return GM_addStyle(style); } else { let head = document.getElementsByTagName('head')[0]; if (head) { let styleElem = document.createElement('style'); styleElem.setAttribute('type', 'text/css'); styleElem.textContent = style; head.appendChild(styleElem); return styleElem; } } } function GM__xmlhttpRequest(details) { if (!GM4){ return GM_xmlhttpRequest(details); } else { return GM.xmlHttpRequest(details); } } // GM4+ compatiblity code adapted from https://github.com/StigNygaard/GMCommonAPI.js ENDS HERE // defaults = { expiretime:3*24*60*60, expiretimeenabled:true, GAratings:true, GAfeatures:2, GAtags:2, GASratings:true, GASfeatures:true, GAStags:true, GASmeta:false, timer:false, iconsid:2, hidereviews:0, betaTitle:false, usesteamdb:false, delayscan:0.3*1000, dbversion:8 }; function savedata(a,b){ GM__setValue(a, JSON.stringify(b)); } function loaddata(a,b){ var val = GM__getValue(a,null); return (val !== null ? JSON.parse(val) : (b !== undefined ? b : false)); } function setdefault(restoredefault){ $.each(defaults, function( name, value ) { if (restoredefault===true){ GM__deleteValue(name); } if (name!=="dbversion"){ window[name] = loaddata(name,value); } else { window[name] = value; } }); } setdefault(); if(timer){ console.time('SG Ratings Internal'); console.time('SG Ratings'); } var run = 0; function log(text) { if(window.console && console.log) { console.log("SG Ratings: " + text); } } function clearstorage(a){ var toscan = []; e = GM__listValues(); for (var i=0; i<e.length; i++){ if(!isNaN(e[i])){ GM__deleteValue(e[i]); } } log((typeof(a)!=='undefined'?a+' ':'') + "Cleaning database."); } function toggleconfig(name,e){ e = e||!GM__getValue(name,defaults[name]); GM__setValue(name,e); alert(name + ': ' + e); } function betaTitleIn(a,b,c){ var tab = document.createElement("table"); tab.style.position = "absolute"; tab.style.display = "inline"; tab.style.padding = "0 8px"; tab.style.marginLeft = "4px" tab.style.border = "1px solid #d2d6e0"; tab.style.backgroundImage = "linear-gradient(rgb(255, 255, 255) 0%, rgba(255, 255, 255, 0.98) 100%)"; tab.style.zIndex = "1000"; tab.style.lineHeight = "20px"; if (a.offsetWidth < a.scrollWidth){ tab.style.left = a.getBoundingClientRect().left+105+4 + "px"; } if (!!b){ var b = b.split('\n'); var b2 = []; for (var bb=0; bb<b.length; bb++){ var featuresid = b[bb].split('::')[0]; var img = (featuresid!=='0'&&!isNaN(featuresid)?'<img class="category ' + featuresicons[featuresid].replace('_','-').toLowerCase() + '"></img> ':''); b2.push(img + b[bb].split('::')[1]); } var b = b2.join("<br>"); } tab.innerHTML = (!!b ? '<td style="padding-right: 8px;">' + b + '</td><td style="padding-left: 8px;border-left: 1px solid;">' : "<td>") + c.replace(/\b.+:/g,'').split('\n').join("<br>") + "</td>"; a.appendChild(tab); } function betaTitleOut(a){ a.removeChild(a.lastChild); } $.each([ ["List current settings", function(){ var set = []; $.each(defaults, function( name, value ) { if (name==='dbversion'){ set.push('\nDatabase version: ' + GM__getValue(name,value)); } else { set.push(name + ' = ' + GM__getValue(name,value) + ((GM__getValue(name,value)!=defaults[name])?" [default is " + defaults[name] + "]":"")); } }); set.push('Database entries: '+GM__listValues().length); alert(set.join('\n')); }], ["GA page: Show ratings",function(){ toggleconfig('GAratings'); }], ["GA page: Choose method to show features",function(){ var temp = prompt("Default: " + defaults['GAfeatures'] + "\n\n0 = Disabled\n1 = Show on mouseover\n2 = Show on page", GM__getValue('GAfeatures',GAfeatures)); if (!!temp.match(/0|1|2/)){ toggleconfig('GAfeatures',temp); } else { alert("invalid option"); } }], ["GA page: Choose method to show tags",function(){ var temp = prompt("Default: " + defaults['GAtags'] + "\n\n0 = Disabled\n1 = Show on mouseover [default]\n2 = Show on page", GM__getValue('GAtags',GAtags)); if (!!temp.match(/0|1|2/)){ toggleconfig('GAtags',temp); } else { alert("invalid option"); } }], ["GAS page: Show ratings",function(){ toggleconfig('GASratings'); }], ["GAS page: Show features",function(){ toggleconfig('GASfeatures'); }], ["GAS page: Show tags", function(){ toggleconfig('GAStags'); }], ["GAS page: Alternative mode to show features and tags [BETA]", function(){ toggleconfig('betaTitle'); }], ["GAS page: Show metascore", function(){ toggleconfig('GASmeta'); }], ["GAS page: Use SteamDB formula for ratings", function(){ toggleconfig('usesteamdb'); }], ["Choose icons",function(){ var temp = prompt("Default: " + defaults['iconsid'] + "\n\n-1 = auto\n0 = Thumbs up/down (unicode)\n1 = Alternative unicode icons\n2 = Thumbs up/down (images)", GM__getValue('iconsid',iconsid)); if (!!temp.match(/-1|0|1|2/)){ toggleconfig('iconsid',temp); } else { alert("invalid option"); } }], ["Choose which games to hide",function(){ var temp = prompt("Default: " + defaults['hidereviews'] + "\n\n0 = None\n1 = Very negative\n2 = Negative and Very negative\n3 = Mixed and below", GM__getValue('hidereviews',hidereviews)); if (!!temp.match(/0|1|2|3/)){ toggleconfig('hidereviews',temp); } else { alert("invalid option"); } }], ["Set time between queries to Steam Store", function(){ var temp = prompt("Time in milliseconds\n\nDefault: " + defaults['delayscan'] + "\nMinimum: 100 (0,1s)\nMaximum: 15000 (15s)\n\nAnything lower than 100 = off", GM__getValue('delayscan',delayscan)); if (isNaN(temp)){ alert('Not a number'); return false; } else if (temp!==null){ GM__setValue('delayscan',Math.min(temp,15000)); } }], ["Clear storage", function(){ clearstorage(); alert('Storage cleaned'); }], ["Restore default settings", function(){ setdefault(true); alert('Settings restored to defaults'); }] ], function(a,b){ GM__registerMenuCommand(b[0],b[1]); } ); if(loaddata('dbversion') !== false){ clearstorage("Old version."); restoredefault(); } if (window.location.pathname.match(/^\/giveaways/) || window.location.pathname === "/" || window.location.pathname.length === 0 || window.location.pathname.match(/^\/group\//)){ var isgaspage = true; } else { var isgaspage = false; } if (isgaspage){ var isgapage = false; var issearchpage = !!document.URL.match(/type=(wishlist|recommended)|q=.+/); } else { var isgapage = !!window.location.pathname.match(/^\/giveaway\//); var issearchpage = false; } var icons = [["\uD83D\uDC4D","\uD83D\uDC4D","\u25FC","\uD83D\uDC4E","\uD83D\uDC4E"],["\u25B2","\u25B2","\u25AC ","\u25BC","\u25BC"],['','','','','']]; var toscan = []; if (iconsid !== 2 && (icons[iconsid] === undefined || icons[iconsid].length !== 5)){ var canvas = document.createElement("canvas"); var context = canvas.getContext("2d"); var text = "abcdefghijklmnopqrstuvwxyz0123456789"; context.font = "72px monospace"; var baselineSize = context.measureText(text).width; context.font = "72px 'Segoe UI Symbol', monospace"; var newSize = context.measureText(text).width; delete canvas; if (newSize == baselineSize) { iconsid = 2; log('Font "Segoe UI Symbol" not found. Using image as fallback.'); } else { iconsid = 0; } } { var styles = []; if (iconsid===2){ styles.push(".rating{background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAABNCAYAAAB9s+4QAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEXUlEQVRIie2Xf2iUdRzH35/vPXc772xrt3Ydm8y5yVCzXCr+WJJhhHNF2djUMEUYZGVKsvwjDWT4iyFB9gskIvKfYIcoW8xi4WQkFs1ao/yRguKP6Swnd9vdc7t7nufdP3ptt7vbMwhJ6A3fP57v8319Pz++z+fh80X88ZK5ZhH2mZOhE2DakeP/ibMb/Lin4T0bbhNIEDAzQlAm/c8332MUXZqPgAZAIaMshXD3C1yxtwLZF6Yo1j8DZ7o2TQwCFK6ermYrPYq3Q70EogCscTEZ8mP3h084tv852OoK60Gr3BWQAaMCgGSEaAFu86/kc2Rb1Xxzivf0P1kUEuoGgfPJEaj4iOVzZo3aSD+4uszMx2EqRAgX6X9uv61ouRTa8Mp5a0yn4zodzv7E0+tq7IGdO7X4irItzEGEhQs7Oe+gZgsM7Z3hi5e4viWevEPUu0e+y3hOedvPDcSri4PwOgeA0bELSVuWbVn61yHRdzSWumPhJZaOZmVIUfqt3SeQ99hL0rwxDABKVc08hTA+UQn40wIAYMZmITq4PrkHlQpQJBcimc9C4IfR9ywPHJ4ysZiMwWpcvbB+YpCIG+Hri9lNTUEf7hLyMsi+8UFzPtqOVTje8ZUcdet60Cp0Q3RrQdbYaA3BaZxLFpx+aOd07ddbTVrYqAXghkgYRBcERhLy+joAdXRUlQ51fhzwHu55FXHZCKpceKdvlg+2tYzxcowH9fUqUTVrifP8zfdBAUrnNMi7b/SOXDMmexIMWs638f3wtNw9EMuPvr5GtrSorBAAiDRZoWmR76xJ0oqYVYEgtHEhAHh01adDiYrcY5ZTYsi/M+r39h+vp/sn4ZcI2lxrQcMOWYuLGhTqbCJRJNAM3M/s/Q/dd+hBqqfOTrrntZunqn9MLLNtKZ4PJZZyDUS0jV9cotsWtLxSog8RJ4woqj67YtSATOv+mMlSBz53WejVI1rj4m/M2te66Uldk7bjqmzjew7BLhBhOo32ArH2dCzP+S0Jvdxm7roMtShlq1wFLAAAAnEhLpbnG5tmduzuampqsuSVr3nhPFEmMk76BT0kfijwWWENCg1OE0cMwJcVIioFqNQ0BVXjxR8CXMkKpEitWyo3HYLjJOK2IQBYBBzwAj9PCFoYxbVhwTEyc8dMwiARBRBOnlN9C119XhyJEWnbT6cD3Q5gn/thDDxQ9dTI2d5C89KUVcYa25b0CDSGlKf/jGzd33NjzNedVj37b3jKc3gSDoa8S4y3gPT1NEbrS7kqDwxhEkOTfMaWF5s5eVyIh+jJn8yOuze7YZSYvxTNiI8unWcK+RXA30eMswIOjrgSmiJmf2V1rG7n3fKXp5y8fjKBQGpSUiXKugaq3uJq6xZWB/i6B9QzXjxTxrQ6Ui2bi15XDoZsZemu1Moa9D6Si+PAiA7SjjZP5aJijf223QOAtRtwxu1DO7LfQC0ABi3EkjMtW1k0NZ+nM1nw5PGst4BvFi9n7d/reSPZetpaMQAAAABJRU5ErkJggg==); width:13px;height:13px;display:inline-block;border-width: 0px 4px 0px 0px;border-style:solid;border-color:transparent;vertical-align:text-bottom;background-repeat:no-repeat}\ .rating1 { background-position: 0 0%; }\ .rating2 { background-position: 0 25%; }\ .rating3 { background-position: 0 50%; }\ .rating4 { background-position: 0 75%; }\ .rating5 { background-position: 0 100%; }"); } else { styles.push('.rating{font-size:16px;}\ .rating5::before{color:#0000ff;content:"' + icons[iconsid][0] + '"}\ .rating4::before{color:#33b4ff;content:"' + icons[iconsid][1] + '"}\ .rating3::before{color:#ffa300;content:"' + icons[iconsid][2] + '"}\ .rating2::before{color:#ff6666;content:"' + icons[iconsid][3] + '"}\ .rating1::before{color:#ff0000;content:"' + icons[iconsid][4] + '"}'); } if (betaTitle || (isgapage && GAfeatures===2)){ var featuresicons = ['','ico_multiPlayer','ico_singlePlayer','','','','ico_mod_hl2','ico_mod_hl','ico_vac','ico_coop','','','','ico_cc','ico_commentary','ico_stats','ico_sdk','ico_editor','ico_partial_controller','ico_sdk','ico_multiPlayer','ico_dlc','ico_achievements','ico_cloud','ico_coop','ico_leaderboards','','ico_multiPlayer','ico_controller','ico_cards','ico_workshop','VRIcon','ico_turn_notifications','','','ico_cart','ico_multiPlayer',"ico_multiPlayer","ico_coop","ico_coop"]; styles.push(".category{background-image: url(data:image/png;base64,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);width:21px;height:13px;display:inline-block;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.35);vertical-align:text-bottom;background-repeat:no-repeat; }\ .vricon { background-position: 0 0%; }\ .ico-achievements { background-position: 0 4.761905%; }\ .ico-cards { background-position: 0 9.52381%; }\ .ico-cart { background-position: 0 14.285714%; }\ .ico-cc { background-position: 0 19.047619%; }\ .ico-cloud { background-position: 0 23.809524%; }\ .ico-commentary { background-position: 0 28.571429%; }\ .ico-controller { background-position: 0 33.333333%; }\ .ico-coop { background-position: 0 38.095238%; }\ .ico-dlc { background-position: 0 42.857143%; }\ .ico-editor { background-position: 0 47.619048%; }\ .ico-leaderboards { background-position: 0 52.380952%; }\ .ico-mod-hl { background-position: 0 57.142857%; }\ .ico-mod-hl2 { background-position: 0 61.904762%; }\ .ico-multiplayer { background-position: 0 66.666667%; }\ .ico-partial-controller { background-position: 0 71.428571%; }\ .ico-sdk { background-position: 0 76.190476%; }\ .ico-singleplayer { background-position: 0 80.952381%; }\ .ico-stats { background-position: 0 85.714286%; }\ .ico-turn-notifications { background-position: 0 90.47619%; }\ .ico-vac { background-position: 0 95.238095%; }\ .ico-workshop { background-position: 0 100%; }\ .sidebar--wide{max-width:336px; }\ .steamdb{width:13px;height:13px;display:inline-block;border-width: 0px 4px 0px 0px;border-style:solid;border-color:transparent;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAACPUlEQVQokW2GPUwUQRhAP3svs3MzO7s7sz8zs5u9meXCzhH2qCTGQqM2FFirITEUWkGsJITSwprCTmMJCTQ2Bm0tJBDQQmiMP/wUWkCiF4jYQOdLXt4DAIC6rsXo6OjDpmle9/v9b03T/Gma5u/Y2NjPpmk+9Pv9F03TPKjrWgAAQLfbvV3X9fter3fS6/XOLnTOvRsZGXnsnLvjnLvnnJt3zr3qdrvXwVq7VFXVnjHmt7X2zFo7qKpqdWhoyHU6nWta67Qsy7osywljzFtr7RcQQpRKqX5RFDe01vfzPL8rpRzzPM9LkmQ8y7JnUsplKeWGlPJUa/0V4ji+KoRYjaLoOWNswvf98SAIHkVRtMw5/8U5P7swTdMfQohJqKpqwVr7MQzDBULIS0LIm3a7vUUIOSCEfD//pSiKnhhjtqqqmoeiKI7zPN9TStUAcKnValGEkG61Wh2EkEIIYQAApVSd5/leURTHkCTJihDiVAixzjmfopR2EELY9/3LCCFMCDGc8ykhxLoQ4jRJkhUoy/KW1nqHMbbr+/4RpXSfEPKJUrp+3n3f948YY7ta689lWd4EY8y2tXYnjuNhz/PGEULTnuctIISenncaY3wljuNha+2OMWYblFIHUspBlmVzaZpi+A9pmuIsy+aklAOl1AGEYTjJOd+IomgQBMEmY2yRMTZLKZ1mjM0yxhaDINiMomjAOd8Iw3ASAAAQQopSOkMIWcMYH2KMT9rt9hnG+ARjfEgIWaOUziCEFADAP5tvlu/HIunFAAAAAElFTkSuQmCC');background-size:100% 100%;background-repeat:no-repeat;vertical-align:middle;}"); } if (GASmeta || isgapage){ styles.push(".meta{width:13px;height:13px;display:inline-block;border-width: 0px 4px 0px 0px;border-style:solid;border-color:transparent;background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAACM0lEQVQokWWSSUgUAABFvzNZJo7lNi641KQmuaPOwIhMmZFegkCtBOkUVFKdQlOYAjEybFMrMYk0i5DSiCCCNpeoUDQp1zEPQVBYanapceJ1kErqnf/jX560DMa0eaHPcP1Vu9/4/Yumj72tPhNzfYZ2RpSrf+GEDD+HdO6MMwxLahoKykABNnwtWwiNS6C2MhTPoBrokPGPtDiks3tLLcjfjgIyCUzYypPnA8zOf6Pi5BW0MoNdRTF4Xqtx6WVEOeecoUtCaCZSNM66ZobeTnD3YTcAl9s6kU8W1UeDYUS5+vrccDMyNQ0FZrF6fTZHKmoZmZxm6+4y5BVD9YWrALR3PSHels3nbt3Wi3Y/l8xWtCqe5htd/OZh90t8I61oZSzlNY243Ytk7yzjQZP3O9275D9jDLFTvL+KN+NTxOcUcvDYaQCevhgkKM6B1iYRl1OIAmzcqV87o8ct3lMbHSUAzM4vYE7NR4qm9JATgOExF37r7CggBYXY6G41TWu+x3AreGMixfucuBc9DI+6iErLR14xFB+o4viZZlaEZ6EQK+bEdOaeGTvFmBx1lWFIyRSUHOb7DzfT7z+QkVeCTJtQYAqKsCKTnZPl4TCqPEmS560aSvZsQEomq2AfX+YWqKm/htYkIbMNmewUFcbinlLT3yI6ZPT0q/FUZQRmSwLhaTtQhAMFW4lKTKemIgJPv5oYkPf/OY1q23yP4dajllWTd877f+ppM7nmeo0djGn78t0vVQ8+T/mifr8AAAAASUVORK5CYII=');background-size:100% 100%;background-repeat:no-repeat;vertical-align:middle;}"); } if (isgaspage){ styles.push(".review{max-width:105px;text-overflow:ellipsis;overflow: hidden; }"); } var style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = styles.join(''); document.getElementsByTagName('head')[0].appendChild(style); } function cleanrating(rating, mode = false){ if (rating.indexOf('%') !== -1){ rating = rating.match(/%?([0-9,]+)(\s{0,1}%)?/g); ratinginvord = (rating[0].indexOf('%')!==-1) ? false : true; if (!mode){ rating = rating[ratinginvord?1:0] + ' (' + rating[ratinginvord?0:1] + ')'; } else { rating = Array((rating[ratinginvord?1:0].replace('%','')/100), Number(rating[ratinginvord?0:1].replace(',',''))); } } return rating; } function geticon(rating){ if (rating.indexOf('%') === -1){ return ""; } e = rating.match(/[0-9,]+/g); if (e.length !== 2){ return ""; } else { imagetest = e[0]; imagetest2 = e[1].replace(/,/g,''); if (imagetest>84 && imagetest2>=100){ var image = 5; } else if (imagetest>69){ var image = 4; } else if (imagetest>39){ var image = 3; } else if (imagetest>24 || imagetest2<=100){ var image = 2; } else { var image = 1; } } return '<span class="rating rating' + image + '" ></span>'; } function processpage(req, hlink, change, gaid, steamstore){ steamstore = !!steamstore ? " [Steam Store]" : ""; ratingtest = $('div.glance_ctn_responsive_left:first div[data-tooltip-text]', req); ratingtest2 = $('.game_area_comingsoon:first div:first h1:first', req); ratingtest3 = $('.noReviewsYetTitle:first', req); if (req.title.indexOf('Site Error') === -1 && (!!steamstore || (!!ratingtest.length || !!ratingtest2.length || !!ratingtest3.length))){ code = hlink.match(/[0-9]{2,6}/)[0]; rating2 = ""; if (!!ratingtest.length){ rating = ratingtest[ratingtest.length === 2 ? 1 : 0].getAttribute("data-tooltip-text"); if (ratingtest.length === 2){ rating2 = ratingtest[0].getAttribute("data-tooltip-text"); } } else { rating = ratingtest2.text()||ratingtest3.text()||"No ratings available"; } meta = $('#game_area_metascore div', req); meta = (meta.length === 5 ? [meta[0].textContent.replace(/\s/g,""), $('#game_area_metalink a:first', meta)[0].href.split('/pc/')[1]] : ""); saved = loaddata(code,false); features = $('a.name, div.DRM_notice div:first, div.DRM_notice:not(:has(*))', req).map(function() { return ((this.href!==undefined && this.href.indexOf("vrsupport")===-1)?this.href.match(/=([0-9]+)\&/)[1]:'0') + '::' + this.textContent.replace(/^\s{2,}/,'').replace(/\s{2,}/g,' '); }).get().join('\n'); genre = $('.blockbg:first a[href*="//store.steampowered.com/genre/"]', req); tags = (genre.length > 0 ? genre[0].href.match(/genre\/(.+)\//)[1] + ':[' + genre[0].innerText + ']\n' : '') + $('a.app_tag', req).slice(0,5).map(function() { return (this.href!==undefined?this.href.match(/\/tags\/([a-z\-]+)/)[1]:'0') + ':' + this.textContent.replace(/\s{2,}/g,''); }).get().join('\n'); savedata(code,{version: dbversion, rate: rating, rate2: rating2, meta: meta, time: (rating.indexOf("%")!==-1 ? (Number(cleanrating(rating).match(/[0-9,]+/g)[1].replace(/,/g,''))>=1000 ? parseInt(Date.now()/1000)+parseInt(expiretime*Math.min((Number(cleanrating(rating).match(/[0-9,]+/g)[1].replace(/,/g,'')/1000)-1),1)) : parseInt(Date.now()/1000)) : parseInt(Date.now()/1000)-expiretime+86400), features: features, tags: tags}); if (!saved){ dup = ""; } else { dup = " (dup)"; } if (!!ratingtest.length){ log("Loaded ratings for " + hlink + dup + steamstore); } else if (!!ratingtest2.length){ log("No ratings available YET for " + hlink + dup + steamstore); } else { log("No ratings available for " + hlink + steamstore); } getrating(hlink, change, gaid); } else if(!steamstore){ steamstorerequest(hlink, change, gaid); } } function steamstorerequest(hlink, change, gaid){ GM__xmlhttpRequest({ method: 'GET', url: hlink, headers: { 'Cookie': 'birthtime=0; mature_content=1' }, onload: function(req) { var req = new DOMParser().parseFromString(req.response, 'text/html'); processpage(req, hlink, change, gaid, true); }, }); } function getreviewlink(id,saved){ var dlc = saved.features.indexOf('21:'); if(dlc !== -1){ return 'http://store.steampowered.com/app/' + id + '/#responsive_apppage_reviewblock_ctn'; } else { return 'https://steamcommunity.com/app/' + id + '/reviews/?browsefilter=toprated'; } } function steamdb(rating){ var steamdbr = cleanrating(rating, true); return ((steamdbr[0] - ( steamdbr[0] - 0.5 ) * Math.pow( 2, -Math.log10( steamdbr[1] + 1 ) ))*100).toFixed(2); } function getrating(hlink, change, gaid, toscanarray, delayed){ var delayed = delayed||false; var toscanarray = toscanarray||[]; var code = hlink.match(/[0-9]{2,6}/)[0]; var saved = loaddata(code,false); if (delayscan>=100 && !delayed && toscanarray.indexOf(code)>0 && (!saved || (expiretimeenabled && parseInt(Date.now()/1000)-expiretime >= saved.time))){ setTimeout(function(){ getrating(hlink, change, gaid, toscanarray, true); }, delayscan*toscanarray.indexOf(code)); return false; } if(!!saved){ if (expiretimeenabled && parseInt(Date.now()/1000)-expiretime >= saved.time){ log("Cache expired [ " + hlink + " ]"); GM__deleteValue(code); getrating(hlink, change, gaid); } else if (saved.version !== dbversion){ log("Different dbversion on cache [ " + hlink + " ]"); GM__deleteValue(code); getrating(hlink, change, gaid); } else { rating = saved.rate; rating2 = saved.rate2; meta = saved.meta; if (isgapage){ sidebarwide = $(document.getElementsByClassName('sidebar--wide')[0]); if (GAratings){ sidebarwide.append( '<h3 class="sidebar__heading">Steam Reviews</h3><ul class="sidebar__navigation"><li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link" href=' + getreviewlink(code,saved) + ' rel="nofollow" target="_blank">' + geticon(cleanrating(rating)) + '<span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">' + rating + '</span></a></li>' + ( rating2 !== "" ? '<li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link" href=' + getreviewlink(code,saved) + ' rel="nofollow" target="_blank">' + geticon(cleanrating(rating2)) + '<span style="text-overflow: ellipsis; overflow: hidden; white-space: nowrap;">' + rating2 + '</span></a></li>' : "") + '<li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link" href="https://steamdb.info/app/' + code + '/" rel="nofollow" target="_blank"><span class="steamdb"></span><div class="sidebar__navigation__item__name">SteamDB Formula</div><div class="sidebar__navigation__item__underline"></div><div class="sidebar__navigation__item__count">' + steamdb(rating) + '%</div></a></li>' + ( meta !== "" ? '<li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link" href="http://www.metacritic.com/game/pc/' + meta[1] + '" rel="nofollow" target="_blank"><span class="meta"></span><div class="sidebar__navigation__item__name">metacritic</div><div class="sidebar__navigation__item__underline"></div><div class="sidebar__navigation__item__count">' + meta[0] + '/100</div></a></li>' : "") + '</ul>' ); } if (!!GAfeatures && !!saved.features){ if(GAfeatures === 2){ sidebarwide.append('<h3 class="sidebar__heading">Steam Features</h3><ul class="sidebar__navigation"></ul>'); var a = saved.features.split('\n'); for (var i=0; i<a.length; i++){ featuresid = a[i].split('::')[0]; var img = (featuresid!=='0'&&!isNaN(featuresid)?'<img class="category ' + featuresicons[featuresid].replace('_','-').toLowerCase() + '"></img> ':''); var link = (featuresid!=='0'&&!isNaN(featuresid)?' href="http://store.steampowered.com/search/?category2=' + featuresid + '&category1=' + featuresid +'&category3=' + featuresid +'"':''); $('ul:last', sidebarwide).append('<li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link"' + link + '><div class="sidebar__navigation__item__name">' + img + a[i].split('::')[1] + '</div></a></li>'); } } else if(GAfeatures === 1){ change.parentElement.title = saved.features.replace(/\b[0-9]+:/g,''); } } if(!!GAtags && !!saved.tags){ if(GAtags === 2){ sidebarwide.append('<h3 class="sidebar__heading">Steam Genre/Tags</h3><ul class="sidebar__navigation"></ul>'); var a = saved.tags.split('\n'); for (var i=0; i<a.length; i++){ $('ul:last', sidebarwide).append('<li class="sidebar__navigation__item"><a class="sidebar__navigation__item__link" href="' + (a[i].indexOf('[')===-1?'http://store.steampowered.com/tags/' + a[i].split(':')[0] + '/' + a[i].split(':')[1]:'http://store.steampowered.com/genre/'+a[i].split(':')[0]) + '/" rel="nofollow" target="_blank"><div class="sidebar__navigation__item__name">'+ a[i].split(':')[1] + '</div></a></li>'); } } else if (GAtags === 1){ change.parentElement.title += (!!change.parentElement.title?'\n\n':'') + saved.tags.replace(/\b.+:/g,''); } } var title = change.parentElement.title; if(!!title){ $(document.getElementsByClassName('sidebar__heading')).filter(':contains("Steam")').attr('title', title).next('ul').attr('title', title); } } else { if (gaid===0 && run === 0 && !!document.getElementById('ui-id-1')){ run++; getfeaturedga(); } if (GASmeta && meta !== "" && (!sgplusgrid || change.parentElement.parentElement.className.indexOf('pinned-giveaways__inner-wrap') !== -1)){ change.getElementsByClassName('giveaway__columns')[0].children[0].outerHTML += '<div><a href="http://www.metacritic.com/game/pc/' + meta[1] + '" rel="nofollow" target="_blank"><img class="meta"></img><span>' + meta[0] + '/100</div></a></div>'; } rating = cleanrating(rating); if(usesteamdb && rating.indexOf('%') !== -1){ rating = Math.round(steamdb(rating)) + "%" + rating.split('%')[1]; } image = geticon(rating); if (GASratings){ if (!sgplusgrid || change.parentElement.parentElement.className.indexOf('pinned-giveaways__inner-wrap') !== -1){ change.getElementsByClassName('giveaway__columns')[0].children[0].outerHTML += '<div class="review"><a href=' + getreviewlink(code,saved) + ' rel="nofollow" target="_blank">' + image + rating + '</a></div>'; } else if (rating.indexOf('%') !== -1){ if(change.className === "giveaway__row-inner-wrap"){ change.getElementsByClassName('fa fa-clock-o')[0].outerHTML = image + rating.split(' ')[0] + ' ' + change.getElementsByClassName('fa fa-clock-o')[0].outerHTML; } else { change.parentElement.getElementsByClassName('fa fa-clock-o')[0].outerHTML = image + rating.split(' ')[0] + ' ' + change.parentElement.getElementsByClassName('fa fa-clock-o')[0].outerHTML; } } } if (!!saved.features || !!saved.tags){ if (betaTitle){ change.getElementsByClassName("review")[0].onmouseenter = function(){ betaTitleIn(this,saved.features,saved.tags) }; change.getElementsByClassName("review")[0].onmouseleave = function(){ betaTitleOut(this) }; } else if (GASfeatures){ change.parentElement.title = saved.features.replace(/\b[0-9]+::/g,'') + (GAStags?(!!saved.features ? '\n\n':'')+saved.tags.replace(/\b.+:/g,''):''); } } if(hidereviews>0 && !issearchpage && change.className === "giveaway__row-inner-wrap" && image !== "" && image.match(/[0-9]/)[0] <= hidereviews){ change.parentElement.style.display = "none"; } } } } else { steamstorerequest(hlink, change, gaid); } } function getfeaturedga(){ if (GASratings || GASfeatures){ var code = false; var test1 = document.getElementsByClassName('featured__inner-wrap')[0].getElementsByTagName('img'); if (!!test1.length && test1[0].src.indexOf('/apps/') !== -1){ var code = test1[0].src.match(/[0-9]{2,6}/)[0]; } else { var test2 = $(document.getElementsByClassName('giveaway__heading__name')).filter('[href$="'+document.getElementsByClassName('featured__inner-wrap')[0].getElementsByTagName('a')[0].href.replace(/.*\/giveaway\/.{5}/,'')+'"]:first'); if (!!test2.length){ var test2b = $(test2[0].parentElement.getElementsByClassName('giveaway__icon')).filter('[href*="/app/"]:first'); if (!!test2b.length){ var code = test2b[0].href.match(/[0-9]{2,6}/)[0]; } } } if (!!code){ var saved = loaddata(code,false); if (!!saved){ if (GASmeta){ var meta = saved.meta; if(meta !== ""){ document.getElementsByClassName('featured__column')[0].outerHTML += '<div class="featured__column text-left"><a href="http://www.metacritic.com/game/pc/' + meta[1] + '" rel="nofollow" target="_blank"><img class="meta"></img><span>' + meta[0] + '/100</div></a></div>'; } } if (GASratings){ var rating = cleanrating(saved.rate); var image = geticon(rating); document.getElementsByClassName('featured__column')[0].outerHTML += '<div class="featured__column text-left"><a href=' + getreviewlink(code,saved) + ' rel="nofollow" target="_blank">' + image + rating + '</a></div>'; } if (GASfeatures && (saved.features || !!saved.tags)){ document.getElementsByClassName('featured__inner-wrap')[0].title = saved.features.replace(/\b[0-9]+::/g,'') + (GAStags?(!!saved.features ? '\n\n':'')+saved.tags.replace(/\b.+:/g,''):''); } } } } } function scangas(element){ a = $('a.giveaway__icon[href*="/app/"]', 'div.pinned-giveaways__inner-wrap').length; if (timer){ console.time('SG Ratings pageLoad'); } var list = GM__listValues(); var total = []; if (delayscan>=100){ for (var i=0; i<element.length; i++){ var code = element[i].href.match(/[0-9]{2,6}/)[0]; var scan = (list.indexOf(code) !== -1); var expired = (!loaddata(code,false)||(expiretimeenabled && !!loaddata(code,false) && parseInt(Date.now()/1000)-expiretime >= loaddata(code).time)); if (expired && total.indexOf(code)===-1){ total.push(code); } } } for (var i=0; i<element.length; i++){ var code = element[i].href.match(/[0-9]{2,6}/)[0]; var scan = (list.indexOf(code) !== -1); var expired = (expiretimeenabled && !!loaddata(code,false) && parseInt(Date.now()/1000)-expiretime >= loaddata(code).time); if (scan && toscan.indexOf(code)===-1){ if (expired){ toscan.push(code); } getrating(element[i].href, element[i].parentElement.parentElement.parentElement,i-a,total); } else if(toscan.indexOf(code)===-1 && !expired){ toscan.push(code); getrating(element[i].href, element[i].parentElement.parentElement.parentElement,i-a,total); } else { (function myLoop (i,element,code) { setTimeout(function () { if (!!GM__getValue(code,false)){ log('Avoided (Dup) for ' + element.href); getrating(element.href, element.parentElement.parentElement.parentElement,10,total); i=1; } if (--i) myLoop(i,element,code); }, 2000); })(60,element[i],code); } } } if (isgaspage && (GASratings || GASfeatures || GAStags)){ setTimeout(function(){ sgplus = !!$('a.nav__row.SGPP__settings:first').length; sgplusgrid = (sgplus ? !!$('div.SGPP__gridView:first').length : false); if (sgplusgrid){ log('SG++ using Grid view'); } sgplus = (sgplus ? (JSON.parse(localStorage.SGPP_Settings||false).EndlessScrollGiveaways||{enabled:false}).enabled : false); extendedsg = !!$(document.getElementsByClassName('page-loading')).filter('[src*="Extended_Steamgifts"]').length; esgst = document.querySelector('div[class*="esgst-es-page"]'); scangas($(document.getElementsByClassName('giveaway__icon')).filter('a[href*="/app/"]')); if(sgplus || extendedsg){ log((sgplus ? 'SG++' : extendedsg ? 'Extended SteamGifts' : 'ESGST') + ' using endless scroll'); log('Starting observer (Endless scroll compatibility)'); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { var element = ( !sgplus ? $(mutation.addedNodes).filter('div:not([class])') : $(mutation.addedNodes).filter('div.table__heading')); if (element.length === 1){ var element = $('a.giveaway__icon[href*="/app/"]', ( !sgplus ? element : element.parent().filter('div:not([class])'))); if (element.length !== 0){ scangas(element); } } }); }); observer.observe(document.getElementsByClassName('widget-container')[0].children[1], { childList: true, subtree: sgplus }); } else if (!!esgst){ log('ESGST using endless scroll'); log('Starting observer (Endless scroll compatibility)'); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { var elements = $(mutation.addedNodes); for (var i=0; i<elements.length; i++){ var element = $('a.giveaway__icon[href*="/app/"]', elements[i]); if (element.length===1){ scangas(element); } } }); }); observer.observe(esgst.parentNode, { childList: true, subtree: false }); } }, 20); } else if (isgapage && (GAratings || (GAfeatures===1||GAfeatures===2) || (GAtags===1||GAtags===2))) { var link = document.getElementsByClassName('global__image-outer-wrap--game-large'); if (link.length !== 0){ if (link[0].href.indexOf('store.steampowered.com/app/') !== -1){ getrating(link[0].href, link[0].parentElement); } } } setTimeout(function(){ if(timer){ console.timeEnd('SG Ratings'); } }, 0); if (timer) console.timeEnd('SG Ratings Internal');