STDB Region Lock Checker

Get Region Lock Information Quickly

目前為 2018-10-20 提交的版本,檢視 最新版本

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



})();