NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Steam Play Community Rating Notice
// @version 0.2
// @description Retrieve and show community rating on Steam's store game pages.
// @author DanMan
// @match *://store.steampowered.com/app/*/*
// @grant GM_xmlhttpRequest
// @connect spcr.netlify.com
// @license MIT
// @updateURL https://openuserjs.org/meta/DanMan/Steam_Play_Community_Rating_Notice.meta.js
// ==/UserScript==
(function(){
var matches, xhr, memo=JSON.parse(sessionStorage.getItem('spcr'));
function inject(appId, rating){
let node = document.createElement('a'),
img = 'https://support.steampowered.com/images/custom/platform_steamplay.png',
target = document.querySelector('.game_area_purchase_platform');
if(target){
node.textContent = rating[0].toUpperCase();
node.setAttribute('title', 'Most frequent of '+rating[1]+' rating(s)');
node.setAttribute('href', 'https://spcr.netlify.com/app/'+appId);
node.setAttribute('style', [
'background: #4d4b49 url('+img+') no-repeat -51px center',
'display:inline-block',
'line-height: 19px',
'color: #b0aeac',
'font-size: 1.4ex',
'padding: 3px 10px 0 79px',
'margin-right: 1ex',
'vertical-align:bottom',
'font-family: "Motiva Sans", sans-serif'
].join(';'));
target.insertBefore(node,target.firstChild);
}
}
function reqListener (response) {
let data=[], scores={}, idx, rating='N/A', target;
if(response.responseText.charAt(0) !== '<'){
data = JSON.parse(response.responseText);
if(data.length>0){
data.forEach(function(item){
idx = item.rating;
scores[idx]=(scores[idx] || 0);
scores[idx]++;
});
rating = Object.keys(scores).reduce((a, b) => scores[a] > scores[b] ? a : b);
}
}
memo[matches[1]]=[rating, data.length];
sessionStorage.setItem('spcr', JSON.stringify(memo));
inject(matches[1], memo[matches[1]]);
}
if(!document.querySelector('.platform_img.linux') &&
!document.querySelector('.sysreq_tab[data-os=linux]')){
matches= document.location.pathname.match(/\/(\d+)\//);
if(matches[1]){
if((memo === null || !memo[matches[1]])){
if(memo===null) sessionStorage.setItem('spcr','{}');
GM_xmlhttpRequest ( {
method: "GET",
url: "https://spcr.netlify.com/data/reports/app/"+matches[1]+".json",
headers: {"Accept": "application/json"},
onload: reqListener
} );
} else if(memo[matches[1]]){
inject(matches[1], memo[matches[1]]);
}
}
}
}());