// ==UserScript==
// @name STDB Region Lock Checker
// @namespace local.CR
// @version 0.1.1
// @description Get Region Lock Information Quickly
// @author CharRun
// @match https://steamdb.info/app/*
// @grant GM_xmlhttpRequest
// @icon https://steamdb.info/static/logos/header.svg
// ==/UserScript==
(function() {
// Initialization
var details = false; //是否开启详情模式 ;
var auto_loading = true; //是否开启自动加载;
var time_delay = 1500; //自动加载延时 1000 = 1秒;
function createTitle(){
var head = document.getElementsByClassName('span2 sort-header')[0].parentElement;
var title = document.createElement('th');
if (details) {
title.innerHTML = "Region Lock Information";
title.style.width = "260px";
}else{
title.innerHTML = "Mini RLI";
title.style.width = "140px";
}
head.appendChild(title);
}
function createContainer(){
var packages = document.getElementsByClassName('package');
var count = packages.length;
if (details) {
for(var num = 0; num < count; num++){
var main_container = document.createElement('td');
main_container.setAttribute("class","public_container")
main_container.setAttribute("status_num","0");
main_container.innerHTML = "Waiting for Check.";
main_container.style.textAlign = "center";
main_container.style.width = "260px"
main_container.style.opacity = 1.0;
packages[num].appendChild(main_container);
addOperatingMode(main_container,num);
}
}else{
for(var num = 0; num < count; num++){
var main_container = document.createElement('td');
var visible_container = document.createElement('div');
var invisible_container = document.createElement('div');
var hidden_content0 = document.createElement('p');
var hidden_content1 = document.createElement('p');
var hidden_content2 = document.createElement('p');
main_container.style.position = "relative";
main_container.style.padding = "0px";
visible_container.style.position = "absolute";
visible_container.style.width = "100%";
visible_container.style.height = "100%";
visible_container.setAttribute("class","public_container")
visible_container.setAttribute("status_num","0");
visible_container.innerHTML = "Waiting for Check.";
visible_container.style.width = "140px"
visible_container.style.opacity = 1.0;
visible_container.style.padding = "8px 0px";
visible_container.style.textAlign = "center";
invisible_container.style.display = "none";
invisible_container.style.position = "absolute";
invisible_container.style.left = "140px"
invisible_container.style.top = "0px"
invisible_container.style.width = "260px";
invisible_container.style.boxShadow = "10px 10px 20px 0px rgba(0,0,0,0.2)";
invisible_container.style.padding = "0px 10px";
invisible_container.style.backgroundColor = "rgba(204,204,204,0.6)";
invisible_container.style.borderRadius = "25px";
hidden_content0.setAttribute("class","hidden_content0");
hidden_content0.style.color = "white";
hidden_content0.style.backgroundColor = "rgba(140, 193, 82, 1)";
hidden_content0.style.textAlign = "center";
hidden_content0.style.fontSize = "16px";
hidden_content0.style.lineHeight = "150%";
hidden_content0.style.borderRadius = "15px";
hidden_content0.style.margin = "10px";
hidden_content1.setAttribute("class","hidden_content1");
hidden_content1.style.color = "white";
hidden_content1.style.backgroundColor = "orange";
hidden_content1.style.textAlign = "left";
hidden_content1.style.fontSize = "16px";
hidden_content1.style.lineHeight = "150%";
hidden_content1.style.borderRadius = "15px";
hidden_content1.style.padding = "0px 5px";
hidden_content2.setAttribute("class","hidden_content2");
hidden_content2.style.color = "white";
hidden_content2.style.backgroundColor = "rgba(229,57,53,.8)";
hidden_content2.style.textAlign = "left";
hidden_content2.style.fontSize = "16px";
hidden_content2.style.lineHeight = "150%";
hidden_content2.style.borderRadius = "15px";
hidden_content2.style.padding = "0px 5px";
packages[num].appendChild(main_container);
main_container.appendChild(visible_container);
main_container.appendChild(invisible_container);
invisible_container.appendChild(hidden_content0);
invisible_container.appendChild(hidden_content1);
invisible_container.appendChild(hidden_content2);
addOperatingMode(main_container,num,invisible_container);
}
}
}
function getStatusNum(num){
var status_num;
var count = document.getElementsByClassName('package').length;
if(num >= count){
status_num = "overflow"
}else{
status_num = document.getElementsByClassName("public_container")[num].getAttribute("status_num");
}
return status_num;
}
function addOperatingMode (element1,num,element2){
element1.onmouseover = function (){
var status_num = getStatusNum(num);
if (status_num === "0" || status_num === "1" ){
reciver(num);
}else if(details){
//
}else{
element2.style.display = "block";
}
}
element1.onmouseout = function (){
if(!details){
element2.style.display = "none";
}
}
}
function autoLoading(){
var num = 0;
var count = document.getElementsByClassName('package').length;
if (auto_loading) {
var delay = setInterval(function(){
var statusnum = getStatusNum(num);
for (;statusnum !== "0";) {
num ++;
statusnum = getStatusNum(num);
}
reciver(num);
num ++;
if (num >= count) {
clearInterval(delay);
}
},time_delay)
}
}
function reciver(num){
var packages = document.getElementsByClassName('package');
var count = packages.length;
if(num >= count){return;}
var subid = packages[num].getAttribute("data-subid");
GM_xmlhttpRequest({
url: "https://steamdb.info/sub/"+subid+"/",
method: "get",
onload: function (info) {
check(num,info.response);
},
onerror: output(num,"1"),
onprogress: output(num,"2"),
});
}
function check(num,info){
var status_num;
var detail1;
var detail2;
var browserCheck = /checking_browser/.exec(info);
if (browserCheck) {
output(num,"3");
return;
}
info = info.split("id=\"info\"")[1].split("id=\"app\"")[0];
var allow = /AllowPurchaseFromRestrictedCountries<\/td>\n<td>Yes<\/td>/ig.exec(info);
var purchaseContries = /PurchaseRestrictedCountries .*[\s\S].*countries-list">(.*?)<\/td>/ig.exec(info);
var runCountries = /onlyallowrunincountries .*[\s\S].*countries-list">(.*?)<\/td>/ig.exec(info);
if(purchaseContries||runCountries){
if(allow && purchaseContries){
purchaseContries = purchaseContries[1];
detail1 = "Purchase Only: " + purchaseContries ;
status_num = "4";
}else if (!allow && purchaseContries) {
purchaseContries = purchaseContries[1];
detail1 = "Can't Purchase Only: " + purchaseContries;
status_num = "4";
}else{
}
if(runCountries){
runCountries = runCountries[1];
detail2 = "RunOnly: " + runCountries;
status_num = "4";
}
}else{
status_num = "4";
}
output(num,status_num,detail1,detail2);
}
function output (num,status_num,detail1,detail2){
var public_container = document.getElementsByClassName("public_container")[num]
var hidden_content0 = document.getElementsByClassName("hidden_content0")[num]
var hidden_content1 = document.getElementsByClassName("hidden_content1")[num]
var hidden_content2 = document.getElementsByClassName("hidden_content2")[num]
if(status_num == "1" || status_num == "2" || status_num == "3"){
switch (status_num){
case "1":
public_container.setAttribute("status_num",status_num);
public_container.style.backgroundColor = "";
public_container.innerHTML = "Connection Failed";
break;
case "2":
public_container.setAttribute("status_num",status_num);
public_container.style.textAlign = "center";
public_container.style.backgroundColor = "rgba(32, 45, 21, 0.3)";
public_container.innerHTML = "On Loading...";
break;
case "3":
public_container.setAttribute("status_num",status_num);
public_container.style.textAlign = "center";
public_container.style.backgroundColor = "";
public_container.innerHTML = "Browser Safety Check";
break;
default:
}
}else if(details){
if(!detail1 && !detail2){
public_container.innerHTML = "No Restriction";
public_container.style.fontWeight = "bold"
public_container.style.color = "rgba(130, 130, 130,.8)";
public_container.style.backgroundColor = "rgba(140, 193, 82, 1)";
}else if(detail2){
detail2 = detail1 + "<br>" + detail2;
public_container.innerHTML = detail2;
public_container.style.textAlign = "left";
public_container.style.color = "rgba(255,255,240,.8)";
public_container.style.backgroundColor = "rgba(229,57,53,.8)";
public_container.style.fontWeight = "bold"
}else{
public_container.innerHTML = detail1;
public_container.style.textAlign = "left";
public_container.style.color = "rgba(16, 71, 169, .8)";
public_container.style.backgroundColor = "rgba(255, 165, 0, .8)";
public_container.style.fontWeight = "bold"
}
}else{
public_container.style.backgroundColor = "";
if(!detail1 && !detail2){
public_container.innerHTML = "(✿◕‿◕✿)";
public_container.style.color = "rgba(140, 193, 82,1)";
hidden_content0.innerHTML = "No Restriction";
}else if(detail2){
public_container.style.color = "rgba(229,57,53,.8)";
public_container.innerHTML = "w(゚Д゚)w";
hidden_content1.innerHTML = detail1;
hidden_content2.innerHTML = detail2;
}else{
public_container.innerHTML = "(●ˇ∀ˇ●)";
public_container.style.color = "rgba(255, 165, 0, .8)";
hidden_content1.innerHTML = detail1;
}
}
}
function main(){
createTitle();
createContainer();
autoLoading();
}
main();
})();