- // ==UserScript==
- // @name Steam Badge Helper
- // @namespace iFantz7E.SteamBadgeHelper
- // @version 1.41
- // @description Add various features to Steam focus on Trading Cards and Badges
- // @match *://store.steampowered.com/*
- // @match *://steamcommunity.com/*
- // @match *://forums.steampowered.com/*
- // @match *://store.akamai.steampowered.com/*
- // @match *://store.steamgames.com/*
- // @run-at document-start
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_listValues
- // @grant GM_deleteValue
- // @grant GM_xmlhttpRequest
- // @grant GM_addStyle
- // @connect steamcommunity.com
- // @icon https://store.steampowered.com/favicon.ico
- // @copyright 2014, 7-elephant
- // ==/UserScript==
-
- // http://userscripts.org/scripts/show/186163
- // https://greasyfork.org/en/scripts/5348-steam-badge-helper
-
- (function ()
- {
- "use strict";
- // jshint multistr:true
-
- var timeStart = new Date();
-
- // ===== Config =====
-
- var enableDebug = false;
- var enableDebugConsole = true;
- var enableCleanLink = true;
- var enableGreenlightNoAutoplay = true;
- var enableMoveGreenlitHeader = true;
- var enableLinkBadgeToFriend = true;
- var enableLinkStoreToBadge = true;
- var enableLinkForumToBadge = true;
- var enableLinkBadgeToForum = true;
- var enableLinkMarketToBadge = true;
- var enableLinkBadgeToMarket = true;
- var enableLinkInventoryToBadge = true;
- var enableLinkProfile = true;
- var enableCompareBadge = true;
- var enableAlwaysClearCache = false;
- var enableCleanSteamMenu = true;
- var enableHideEnhancedBadgePrice = true;
- var enableAutoscrollSearch = true;
- var enableSwapTitle = true;
- var enableShowTitleNoti = false;
- var enableResizeTradeWindow = true;
- var enableMoveMenuEditProfile = true;
- var enableRefreshError = true;
- var enableSetAllCheckBox = true;
- var enableStoreFocus = true;
- var enableStoreHideSection = true;
- var enableAutoExploreQueue = true;
- var enableSkipAgeCheck = true;
- var enableSkipLinkFilter = true;
- var enableMoveSale = true;
- var enableRedirectToLogin = true;
-
- var enableCache = true;
- var enableDebugCache = false;
- var timeCacheExpireSec = 60;
-
- var appCards = ["286120", "203990", "32200", "259720", "245550", "306410", "249610", "291130"
- , "218640", "268420", "46500", "102200", "301680", "273770", "264320", "339290", "340280"
- , "273830", "303850", "346200", "353980", "296070", "380770", "294190", "258200", "15700"
- , "92800", "267920", "257890", "314700", "448010", "94400", "390460", "269990", "383560"
- , "252490", "384150", "289690", "492340", "445170", "566270", "432990", "281990", "411590"
- , "425220"];
- var appCardMaps = {"202970": "202990", "234510": "35450"};
-
- var appDlcs = // Exclude
- [
- "230889", "256576", "256611", "258643", "222606", "222615", "222618", "277751"
- ];
-
- var marketCurrencies =
- {
- "USD": "1", "GBP": "2", "EUR": "3", "CHF": "4", "RUB": "5",
- "BRL": "7", "JPY": "8", "NOK": "9", "IDR": "10", "MYR": "11",
- "PHP": "12", "SGD": "13", "THB": "14", "KRW": "16", "TRY": "17",
- "MXN": "19", "CAD": "20", "NZD": "22", "CNY": "23", "INR": "24",
- "CLP": "25", "PEN": "26", "COP": "27", "ZAR": "28", "HKD": "29",
- "TWD": "30", "SAR": "31", "AED": "32",
- };
-
- var marketCountries =
- {
- "US": "1", "UK": "2", "BE": "3", "IT": "3", "CH": "4", "RU": "5", "AZ": "1",
- "BR": "7", "JP": "8", "NO": "9", "ID": "10", "MY": "11",
- "PH": "12", "SG": "13", "TH": "14", "KR": "16", "TR": "17",
- "MX": "19", "CA": "20", "NZ": "22", "CN": "23", "IN": "24",
- "CL": "25", "PE": "26", "CO": "27", "ZA": "28", "HK": "29",
- "TW": "30", "SA": "31", "AE": "32",
- };
-
- // ===== End Config =====
-
- // ===== Cache =====
-
- var tmpl_time = "badge_{APP}_time";
- var tmpl_price = "badge_{APP}_{SET}_{NUM}_price";
- var tmpl_url = "badge_{APP}_{SET}_{NUM}_url";
- var tmpl_owned = "badge_{APP}_{SET}_{NUM}_owned";
-
- function clearCache()
- {
- var keep = ["counter"];
- var cache = GM_listValues();
- debug("clearCache: " + cache.length);
- for (var i = 0; i < cache.length; i++)
- {
- if (keep.indexOf(cache[i]) < 0)
- {
- GM_deleteValue(cache[i]);
- }
- }
- }
- if (enableAlwaysClearCache) clearCache();
-
- function debugCache()
- {
- var cache = GM_listValues()
- if (enableDebugCache)
- {
- debug("debugCache: ");
- if (cache != null) for (var i = 0; i < cache.length; i++)
- {
- debug("-> " + cache[i] + ": " + GM_getValue(cache[i], 0));
- }
- }
- debug("debugCache: " + (cache == null ? 0 : cache.length));
- }
- setTimeout(debugCache, 0);
-
- function generateCacheName(tmpl, app, isFoil, number)
- {
- var name = tmpl.replace("{APP}", app);
- if (isFoil != null)
- {
- var set = isFoil ? "F1" : "N1";
- name = name.replace("{SET}", set);
- }
- if (number != null)
- {
- name = name.replace("{NUM}", number);
- }
- return name;
- }
- function generateCacheNameTime(app)
- {
- return generateCacheName(tmpl_time, app);
- }
- function generateCacheNamePrice(app, isFoil, number)
- {
- return generateCacheName(tmpl_price, app, isFoil, number);
- }
- function generateCacheNameUrl(app, isFoil, number)
- {
- return generateCacheName(tmpl_url, app, isFoil, number);
- }
- function generateCacheNameOwned(app, isFoil, number)
- {
- return generateCacheName(tmpl_owned, app, isFoil, number);
- }
-
- function getCacheTime(app)
- {
- var name = generateCacheNameTime(app);
- return GM_getValue(name, 0);
- }
- function getCacheTimeDiff(app)
- {
- return getUnixTimestamp() - getCacheTime(app);
- }
- function setCacheTime(app)
- {
- var name = generateCacheNameTime(app);
- GM_setValue(name, getUnixTimestamp());
- }
- function checkCacheExpire(app)
- {
- var cacheDiff = getCacheTimeDiff(app);
- var isCacheExpire = cacheDiff < 0 || cacheDiff > timeCacheExpireSec;
-
- debug("cacheTimeDiff: " + cacheDiff + "s");
- debug("isCacheExpire: " + isCacheExpire);
-
- return isCacheExpire;
- }
-
- function getCachePrice(app, isFoil, number)
- {
- var name = generateCacheNamePrice(app, isFoil, number);
- return GM_getValue(name, 0);
- }
- function setCachePrice(app, isFoil, number, data)
- {
- var name = generateCacheNamePrice(app, isFoil, number);
- GM_setValue(name, data);
- }
-
- function getCacheUrl(app, isFoil, number)
- {
- var name = generateCacheNameUrl(app, isFoil, number);
- return GM_getValue(name, 0);
- }
- function setCacheUrl(app, isFoil, number, data)
- {
- var name = generateCacheNameUrl(app, isFoil, number);
- GM_setValue(name, data);
- }
-
- function getCacheOwned(app, isFoil, number)
- {
- var name = generateCacheNameOwned(app, isFoil, number);
- return GM_getValue(name, 0);
- }
- function setCacheOwned(app, isFoil, number, data)
- {
- var name = generateCacheNameOwned(app, isFoil, number);
- GM_setValue(name, data);
- }
-
- // ===== End Cache =====
-
- // ===== Helper =====
-
- setTimeout(function ()
- {
- var counter = GM_getValue('counter', 0);
- GM_setValue('counter', ++counter);
- }, 0);
-
- function debug(msg)
- {
- try
- {
- msg = msg ? (new String(msg)).trim().replace(/\s\s/gi, "").replace(/\s/gi, " ") : "";
-
- if (enableDebugConsole)
- console.log(msg);
-
- if (enableDebug)
- {
- var divDebugID = "div_debug_7e";
- var divDebugOuterID = divDebugID + "_outer";
- var divOut = document.getElementById(divDebugOuterID);
- var div = document.getElementById(divDebugID);
-
- var isExistOuter = divOut != null;
- if (!isExistOuter)
- {
- divOut = document.createElement("div");
- divOut.id = divDebugOuterID;
- divOut.style = "font-family:'Courier New', Courier; font-size: 11px; z-index: 999999; padding: 3px; text-align: left;"
- + " border: 3px solid orange; color: black; background-color: rgba(255,255,255,0.9);"
- + " position: fixed; top: 3px; left: 3px; overflow-x:hidden; overflow-y:scroll; resize: both;";
- divOut.style.width = "150px";
- divOut.style.height = "100px";
-
- if (div == null)
- {
- div = document.createElement("div");
- div.id = divDebugID;
- div.style.minWidth = "1000px";
- div.innerHTML = "<span style='font-weight: bold; line-height: 18px;'>Debug:</span>";
- }
- divOut.appendChild(div);
- document.body.appendChild(divOut);
- }
- div.innerHTML = div.innerHTML + " <br/> " + msg;
- divOut.scrollTop = divOut.scrollHeight;
- }
- }
- catch (e)
- {
- console.log("Ex: " + e);
- }
- }
-
- function debugTime(header)
- {
- header = header ? (new String(header)) + ": " : "";
- var ms = (new Date()) - timeStart;
- debug(header + ms + "ms");
- }
-
- function getUnixTimestamp()
- {
- return parseInt((new Date()) / 1000);
- }
-
- function randNum()
- {
- return parseInt(Math.random() * 900000 + 100000);
- }
-
- function randTempID()
- {
- return "id_temp_7e_" + randNum();
- }
-
- function createDivTemp(id, html)
- {
- var div = document.getElementById(id);
- if (div == null)
- {
- div = document.createElement("div");
- div.id = id;
- document.body.appendChild(div);
- }
- div.style.display = "none";
- div.style.zIndex = "-999999";
-
- // remove all external sources
- var pattScript = /(<(script|meta|link|style|title)[^>]*>|<\/(script|meta|link|style|title)>)/gi;
- html = html.replace(pattScript, "");
-
- // replace http to https
- //html = html.replace(/http:\/\//ig, "https://");
-
- div.innerHTML = html;
- }
-
- function removeDivTemp(id)
- {
- var ele = document.getElementById(id);
- ele.parentNode.removeChild(ele);
- }
-
- function attachOnLoad(callback)
- {
- window.addEventListener("load", function (e) {
- callback();
- });
- }
-
- function attachOnReady(callback)
- {
- document.addEventListener("DOMContentLoaded", function (e) {
- if (document.readyState === "interactive")
- {
- callback();
- }
- });
- }
-
- function reload()
- {
- var curHref = window.location.href;
- var posHashtag = curHref.indexOf("#");
- if (posHashtag > -1)
- {
- window.location = curHref.substr(0, posHashtag);
- }
- else
- {
- window.location = curHref;
- }
- }
-
- function getCookie(c_name)
- {
- var c_value = document.cookie;
- var c_start = c_value.indexOf(" " + c_name + "=");
- if (c_start == -1) {
- c_start = c_value.indexOf(c_name + "=");
- }
- if (c_start == -1) {
- c_value = null;
- }
- else {
- c_start = c_value.indexOf("=", c_start) + 1;
- var c_end = c_value.indexOf(";", c_start);
- if (c_end == -1) {
- c_end = c_value.length;
- }
- c_value = unescape(c_value.substring(c_start, c_end));
- }
- return c_value;
- }
-
- var isVisible = (function()
- {
- var stateKey;
- var eventKey;
- var keys =
- {
- hidden: "visibilitychange",
- webkitHidden: "webkitvisibilitychange",
- mozHidden: "mozvisibilitychange",
- msHidden: "msvisibilitychange"
- };
- for (stateKey in keys)
- {
- if (stateKey in document)
- {
- eventKey = keys[stateKey];
- break;
- }
- }
- return function(c)
- {
- if (c)
- {
- document.addEventListener(eventKey, c);
- }
- return !document[stateKey];
- }
- })();
-
- function isError()
- {
- var url = document.documentURI;
- var retVal =
- url.indexOf("/api") < 0
- && url.indexOf("api.") < 0
- && url.indexOf("/priceoverview") < 0
- && url.indexOf("/render") < 0
- && url.indexOf("/login/") < 0
- && url.indexOf("/widget/") < 0
- && url.indexOf("/actions/") < 0
- && url.indexOf("/dynamicstore/") < 0
- && url.indexOf("/search/suggest?") < 0
- && url.indexOf("/ajax") < 0
- && url.indexOf("/moderatormessages") < 0
- && url.indexOf("/itemordershistogram") < 0
- && url.indexOf("mobile") < 0
- && url.indexOf("/chat/") < 0
- && url.indexOf(".js") < 0
- && window === window.parent
- &&
- (
- (
- document.querySelector("body.headerless_page"
- + ", body.flat_page"
- + ", #main"
- + ", #supernav"
- + ", table.tborder"
- + ", #headerrow"
- + ", #global_header"
- + ", .page_header_ctn"
- + ", .search_page"
- + ", #bigpicture_about"
- + ", #ig_bottom"
- + ", #feedHeaderContainer"
- + ", img[alt='Steam']"
- + ", .waitforauth"
- + ", .no_header"
- + ", .mobileBody") == null
- )
- ||
- (
- document.querySelector(".profile_fatalerror_message"
- + ", #error_msg") != null
- //|| document.querySelector("#message") != null
- )
- );
- return retVal;
- }
-
- function isErrorBox()
- {
- var retVal = !!(document.querySelector("#error_box"));
- return retVal;
- }
-
- function isErrorCard()
- {
- var retVal = document.querySelectorAll("#message > p.returnLink").length > 0;
- return retVal;
- }
-
- function isErrorMarket()
- {
- var retVal = document.querySelectorAll("#searchResultsTable > .market_listing_table_message").length > 0
- ;//&& document.querySelector("#hover_content") == null);
- return retVal;
- }
-
- function getQueryByName(name, url)
- {
- if (url == null)
- url = location.search;
- name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
- var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
- var results = regex.exec(url);
- var retVal = "";
- if (results != null)
- {
- retVal = results[1].replace(/\+/g, " ");
- try
- {
- retVal = decodeURIComponent(retVal);
- }
- catch (ex)
- {
- }
- }
- return retVal;
- }
-
- function insertBeforeElement(newNode, referenceNode)
- {
- referenceNode.parentNode.insertBefore(newNode, referenceNode);
- }
-
- function insertAfterElement(newNode, referenceNode)
- {
- referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
- }
-
- function clickToSelect(ele)
- {
- if (ele != null)
- {
- var range = document.createRange();
- range.setStartBefore(ele.firstChild);
- range.setEndAfter(ele.lastChild);
-
- var sel = window.getSelection();
- sel.removeAllRanges();
- sel.addRange(range);
- }
- }
-
- // ===== End Helper =====
-
-
- // ===== Cleaner =====
-
- /** Auto refresh when error
- */
- function refreshError()
- {
- if(isError())
- {
- debug("refreshError: activated");
- setTimeout(reload, 5000);
- }
- }
- function refreshErrorCard()
- {
- if(isErrorCard())
- {
- debug("refreshErrorCard: activated");
- setTimeout(reload, 5000);
- }
- }
- function refreshErrorMarket()
- {
- if(isErrorMarket())
- {
- debug("refreshErrorMarket: activated");
- setTimeout(reload, 5000);
- }
- }
- function refreshErrorExplore()
- {
- if(isErrorBox())
- {
- debug("refreshErrorExplore: activated");
- setTimeout(reload, 1000);
- }
- }
- function refreshErrorTimeout(tm)
- {
- function refresh()
- {
- var url = document.documentURI;
- var pattCard = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
- var pattTrade = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/tradeoffers\//i;
- var pattMarket = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/[0-9]+/i;
- var pattExplore = /^http[s]?:\/\/store.steampowered.com\/\/?explore/i;
-
- if (url.indexOf("#") < 0 && url.indexOf("json") < 0 && url.indexOf("xml") < 0)
- {
- setTimeout(refreshError, tm);
-
- if (pattCard.test(url) || pattTrade.test(url))
- {
- setTimeout(refreshErrorCard, tm);
- }
- else if (pattMarket.test(url))
- {
- setTimeout(refreshErrorMarket, tm);
- }
- else if (pattExplore.test(url))
- {
- setTimeout(refreshErrorExplore, tm);
- }
- }
- }
- attachOnLoad(refresh);
- }
- if (enableRefreshError) refreshErrorTimeout(5000);
-
- /** Remove unnessary parameters in URL
- */
- function cleanLink()
- {
- var url = document.documentURI;
- var pattApp = /^http[s]?:\/\/store.steampowered.com\/(app|sub|bundle)\/[0-9]+/i;
- var pattSale = /^http[s]?:\/\/store.steampowered.com\/sale\//i;
- var pattBadge = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
- var pattFork = /^http[s]?:\/\/store\.(.+steampowered|steamgames)\.com\//i;
- var pattParam = /\/\?.*$/
- var pattParamCC = /\/\?cc\=.*$/
-
- var isSameSite = true;
-
- var urlNew = url;
-
- if (pattApp.test(url))
- {
- var urlNews = url.match(pattApp);
- if (urlNews != null)
- {
- var urlTail = url.replace(pattApp, "");
-
- if (urlTail == "")
- {
- urlNew = urlNews[0] + "/";
- }
- else if (urlTail != "/")
- {
- if (urlTail[0] === "?")
- {
- urlTail = "/" + urlTail;
- }
- if (!pattParamCC.test(urlTail) && pattParam.test(urlTail))
- {
- urlNew = urlNews[0] + "/";
- }
- }
- }
- }
- else if (pattSale.test(url))
- {
- var idxQuery = url.indexOf("?");
- if (idxQuery > 0)
- {
- urlNew = url.substr(0, idxQuery);
- }
-
- if (!urlNew.endsWith("/"))
- {
- urlNew += "/";
- }
- }
- else if (pattBadge.test(url))
- {
- var urlNews = url.match(pattBadge);
- if (urlNews != null)
- {
- var urlTail = url.replace(pattBadge, "");
-
- if (urlTail.charAt(0) != "/")
- {
- urlNew = urlNews[0] + "/" + urlTail;
- }
- }
- }
- else if (pattFork.test(url))
- {
- urlNew = url.replace(pattFork, "http://store.steampowered.com/");
- isSameSite = false;
- }
-
- if (urlNew != url)
- {
- debug("cleanLink: activated");
- if (isSameSite)
- {
- try
- {
- window.history.replaceState(null, null, urlNew);
- }
- catch (ex)
- {
- window.location.replace(urlNew);
- }
- }
- else
- {
- window.location.replace(urlNew);
- }
- }
- }
- function cleanLinkAttach()
- {
- attachOnReady(function()
- {
- cleanLink();
- });
- }
- if (enableCleanLink) cleanLinkAttach();
-
- /** Change search parameter to page 1 to determine visited links
- */
- function cleanLinkSearch()
- {
- var pattSearch = /snr=1_7_7_230_150_[0-9]+/i
-
- var as = document.querySelectorAll("a.search_result_row");
- for (var j = 0; j < as.length; j++)
- {
- var urlSearch = as[j].href;
- urlSearch = urlSearch.replace(pattSearch, "snr=1_7_7_230_150_1");
- as[j].href = urlSearch;
- }
-
- document.addEventListener("DOMNodeInserted", onNodeInserted);
- function onNodeInserted(e)
- {
- try
- {
- var node = e.target;
- if (node.classList.contains("search_result_row"))
- {
- var urlSearch = node.href;
- urlSearch = urlSearch.replace(pattSearch, "snr=1_7_7_230_150_1");
- node.href = urlSearch;
- }
-
- var count = document.querySelectorAll(".search_result_row").length;
- var divs = document.querySelectorAll(".search_pagination_left");
- for (var i = 0; i < divs.length; i++)
- {
- var oldVals = divs[i].innerHTML.match(/[0-9]+/g);
- var oldVal = oldVals[oldVals.length > 0 ? oldVals.length-1 : 0];
- divs[i].innerHTML = "showing " + count + " of " + oldVal;
- }
- }
- catch (ex)
- {
- }
- }
-
- if (enableAutoscrollSearch)
- {
- var divButton = document.createElement("div");
- divButton.classList.add("btn_client_small");
- divButton.id = "divAutoscroll";
- divButton.style = "position: fixed; right: 20px; bottom: 20px; z-index:3;";
- divButton.innerHTML = "<a href='' onclick='document.addEventListener(\"DOMNodeInserted\", function(){ window.scrollTo(0,document.body.scrollHeight); }); this.parentElement.style.display=\"none\"; window.scrollTo(0,document.body.scrollHeight); return false;'>Autoscroll to end</a>";
- document.body.appendChild(divButton);
- }
- }
- function cleanLinkSearchAttach(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/search\//i;
-
- if (patt.test(url))
- {
- attachOnLoad(function()
- {
- setTimeout(cleanLinkSearch, tm);
- });
- }
- }
- if (enableCleanLink) cleanLinkSearchAttach(100);
-
- /** Remove link lifter in URL
- */
- function cleanLinkLifter()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\//i;
- var pattHome = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/home/i;
-
- function cleanLifter()
- {
- var lifter = "https://steamcommunity.com/linkfilter/";
- var lifterLen = lifter.length;
- var lifter2 = "?url=";
- var lifterLen2 = lifter2.length;
- var js = "javascript:"
- var jsLen = js.length;
-
- var as = document.getElementsByTagName("a");
- for (var i = 0; i < as.length; i++)
- {
- var urlLink = as[i].href;
- if (urlLink.indexOf(lifter) == 0)
- {
- urlLink = urlLink.substr(lifterLen);
- if (urlLink.indexOf(lifter2) == 0)
- {
- urlLink = urlLink.substr(lifterLen2);
- }
- as[i].href = urlLink;
- }
- else if (patt.test(url) && urlLink.indexOf(js) == 0)
- {
- if (as[i].getAttribute('onclick') == null)
- {
- urlLink = decodeURIComponent(urlLink.substr(jsLen));
- as[i].setAttribute('onclick', urlLink + "; return false;");
- }
- }
- }
- }
-
- var cleanLifterTimeoutId = 0;
-
- function cleanLifterTimeout()
- {
- clearTimeout(cleanLifterTimeoutId);
- cleanLifterTimeoutId = setTimeout(cleanLifter, 1000);
- }
-
- attachOnReady(cleanLifter);
-
- if (pattHome.test(url))
- {
- document.addEventListener("DOMNodeInserted", cleanLifterTimeout);
- }
- }
- if (enableCleanLink) cleanLinkLifter();
-
- /** Clean Steam's menu on top
- */
- function cleanSteamMenuTimeout(tm)
- {
- attachOnReady(function ()
- {
- GM_addStyle(
- // Steam header
- " .header_installsteam_btn_content , .header_installsteam_btn { display: none !important; } "
- // Enhanced Steam header
- + " #enhanced_pulldown, #es_menu { display: none !important; } "
- // SOE header
- + " #soe-t-menu { display: none !important; } "
- );
-
- setTimeout(function()
- {
- var eleSoe = document.querySelector("#soe-t-menu");
- if (eleSoe)
- {
- eleSoe.textContent = "SOE";
-
- var node = eleSoe.nextElementSibling.nextSibling;
- if (node.nodeName == "#text" && node.nodeValue.toString().trim() == "|")
- {
- node.parentElement.removeChild(node);
- }
- }
-
- var eleEs = document.querySelector("#enhanced_pulldown, #es_menu");
- if (eleEs != null)
- {
- var eleNoti = document.querySelector("#header_notification_area");
- if (eleNoti)
- {
- insertAfterElement(eleEs, eleNoti);
- }
-
- var eleEsPop = document.querySelector("#es_popup");
- if (eleEsPop)
- {
- insertAfterElement(eleEsPop.parentElement, eleEs);
- }
- }
-
- var menu = document.querySelector("#account_pulldown");
- if (menu)
- {
- menu.addEventListener('mouseover', function() {
- var eleSoe = document.querySelector("#soe-t-menu");
- if (eleSoe)
- {
- eleSoe.style.setProperty("display", "inline-block", "important");
- }
-
- var eleEs = document.querySelector("#enhanced_pulldown, #es_menu");
- if (eleEs)
- {
- eleEs.style.setProperty("display", "inline-block", "important");
- }
- });
- }
-
- }, tm);
- });
-
- }
- if (enableCleanSteamMenu) cleanSteamMenuTimeout(1000);
-
- /** Hide EnhancedSteam's price on Badge page
- */
- function hideEnhancedBadgePrice()
- {
- GM_addStyle(".es_card_search, .es_item_action { display: none !important; } ");
- }
- function hideEnhancedBadgePriceTimeout(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/(gamecards\/[0-9]+|inventory)/i;
-
- if (patt.test(url))
- {
- attachOnReady(function()
- {
- setTimeout(hideEnhancedBadgePrice, tm);
- });
- }
- }
- if (enableHideEnhancedBadgePrice) hideEnhancedBadgePriceTimeout(0);
-
- // ===== End Cleaner =====
-
- // ===== Main =====
-
- /** Disable autoplay on Greenlight page while autoplay option is on
- */
- function disableGreenlightAutoplay()
- {
- var iframes = document.getElementsByTagName("iframe");
- for (var i in iframes)
- {
- if (iframes[i].className == "highlight_flash_player_notice")
- {
- iframes[i].src = iframes[i].src.replace("autoplay=1", "autoplay=0");
- }
- }
- }
- function disableGreenlightAutoplayTimeout(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/sharedfiles\/filedetails\//i;
-
- if (patt.test(url))
- {
- attachOnLoad(function ()
- {
- setTimeout(disableGreenlightAutoplay, tm);
- });
- }
- }
- if (enableGreenlightNoAutoplay) disableGreenlightAutoplayTimeout(0);
-
- /** Move Greenlit header to match voting section of Greenlight item
- */
- function moveGreenlitHeader()
- {
- var eleGreenlit = document.querySelector(".flag");
- if (eleGreenlit)
- {
- var eleArea = document.querySelector(".workshopItemPreviewArea");
- if (eleArea)
- {
- eleArea.appendChild(eleGreenlit.parentElement.parentElement);
- }
- }
-
- var eleWait = document.querySelector("#action_wait");
- if (eleWait)
- {
- var eleVote = document.querySelector("#voteNext");
- if (eleVote)
- {
- insertBeforeElement(eleWait, eleVote);
- eleWait.style.top = "6px";
- eleWait.style.position = "relative";
- }
- }
- }
- function moveGreenlitHeaderReady(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/sharedfiles\/filedetails\//i;
-
- if (patt.test(url))
- {
- attachOnReady(function ()
- {
- moveGreenlitHeader();
- });
- }
- }
- if (enableMoveGreenlitHeader) moveGreenlitHeaderReady();
-
- /** Move button in Edit Profile page to right
- */
- function moveMenuEditProfile()
- {
- GM_addStyle(
- ".group_content_bodytext { position: fixed; top: 400px; margin-left: 680px; line-height: 34px; z-index: 10; } "
- + ".rightcol { position: fixed; top: 230px; margin-left: 658px; z-index: 10; } "
- + ".saved_changes_msg { width: 610px; } "
- );
- }
- function moveMenuEditProfileTimeout(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/edit/i;
-
- if (patt.test(url))
- {
- attachOnReady(function()
- {
- setTimeout(moveMenuEditProfile, tm);
- });
- }
- }
- if (enableMoveMenuEditProfile) moveMenuEditProfileTimeout(0);
-
- /** Add small button on friend section in Badge page to view friends' Badge page for comparing cards
- * Reduce height of Review textbox
- */
- function linkBadgeToFriend()
- {
- var url = document.documentURI;
- var pattHead = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]*/i;
- var urlTail = url.replace(pattHead, "");
- //var pattProfile = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+[\/]?$/i;
-
- // Correct style
- {
- var styleCorrect = "";
-
- // fix long card name show incorrect column of cards
- styleCorrect += ".badge_card_set_card .badge_card_set_text { max-width: 220px; } ";
-
- // fix Firefox show incorrect column of friends' avatar
- styleCorrect += ".persona { line-height: 16px; } ";
-
- // fix EnhancedSteam show incorrect size of next badge progress
- styleCorrect += ".gamecard_badge_progress .badge_info { width: 250px !important; } ";
-
- // fix oversize friend action button
- styleCorrect += ".badge_friendwithgamecard_actions .btn_medium { padding-bottom: 0px !important;"
- + " width: 26px !important; text-align: center !important; } ";
-
- // fix card name display over counter
- styleCorrect += ".badge_card_set_text_qty { z-index: 2 !important; position: relative !important; } ";
-
- // fix card drop counter is behind button and reposition
- styleCorrect += ".badge_title_stats_content { margin-top: -4px; } ";
- if (document.querySelector(".badge_title_playgame") != null)
- {
- styleCorrect += ".badge_title_stats_content { padding-right: 45px; } ";
- }
-
- GM_addStyle(styleCorrect);
- }
-
- // Link to friends
- {
- var imgCard = "<img style='height:16px; opacity:0.72'"
- + " src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAgCAYAAABdP1tmAAAAGXRF"
- + "WHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAA"
- + "ADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4Onht"
- + "cG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1j"
- + "MDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6"
- + "cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNj"
- + "cmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEu"
- + "MC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3Vy"
- + "Y2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdp"
- + "bmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpCOUQ2NEUyQkU4MUZFMzExQUEyMkQ1MDNCQkRFRjU0RCIgeG1w"
- + "TU06RG9jdW1lbnRJRD0ieG1wLmRpZDo5REYxOTJDOTIyM0MxMUUzODY5NTlGQjMwODBFMkI0MyIgeG1w"
- + "TU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5REYxOTJDODIyM0MxMUUzODY5NTlGQjMwODBFMkI0MyIgeG1w"
- + "OkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1IFdpbmRvd3MiPiA8eG1wTU06RGVyaXZlZEZy"
- + "b20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3QTQwRjJENkNDMjBFMzExQUEyMkQ1MDNCQkRFRjU0"
- + "RCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOUQ2NEUyQkU4MUZFMzExQUEyMkQ1MDNCQkRFRjU0"
- + "RCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVu"
- + "ZD0iciI/PviNBbAAAAD6SURBVHjaYvz//z/DcAIslBowY8YMivRnZGRQ1UNMDMMMMJKS5ICxsRdIOdHA"
- + "HceBMWVFVw8BPcMPpD7QMHAFgJ76OFB56B8Qf6KCJ7iAmG0wFArPgKEpS4XCYzEQxwyqUo5CwIvE/kCg"
- + "xLwDxBrAgPw7mEs5UpKtChDzDJoYwlbfoMUIzkIBqI7oonjY1UOjHhr10KiHRj006qFRD416aNRDg7e1"
- + "zUBCa5vmHTx8/Rxiwc/BEkNCQI9MpoL9toPFQ6B+Sc5ooUAZAPVYvwylQoEqoz4juh76O6w8BEwOoPS7"
- + "nkbuWEON5AYCjJTOPgy2wXrG4TadAhBgANX8SbJBOSc0AAAAAElFTkSuQmCC'></a> ";
-
- var els = document.querySelectorAll(".badge_friends_have_earned_friends, .badge_friendwithgamecard");
- for (var i = 0; i < els.length; i++)
- {
- var as = els[i].querySelectorAll(".playerAvatar a, a.persona");
- var limit = 1;
- var curLimit = 0;
-
- for (var j = 0; j < as.length; j++)
- {
- var a = as[j];
- //if (pattProfile.test(a.href))
- {
- var badgeUrl = a.href + urlTail;
-
- if (els[i].classList.contains("badge_friends_have_earned_friends")
- || !a.parentNode.classList.contains("playerAvatar"))
- {
- a.href = badgeUrl;
- }
-
- if (curLimit < limit && els[i].classList.contains("badge_friendwithgamecard"))
- {
- var elActs = els[i].getElementsByClassName("badge_friendwithgamecard_actions");
- if (elActs)
- {
- for (var k = 0; k < elActs.length; k++)
- {
- var eleA = document.createElement("a");
- eleA.classList.add("btn_grey_grey");
- eleA.classList.add("btn_medium");
- eleA.setAttribute("title", "View friend's badge");
- eleA.setAttribute("href", badgeUrl);
- eleA.innerHTML = imgCard;
-
- elActs[k].appendChild(eleA);
-
- curLimit += 1;
- } // end for k
- }
- }
- }
- } // end for j
- } // end for i
- }
-
- // Sort friends
- {
- setTimeout(function()
- {
- var eleSections = document.querySelectorAll(".badge_friendswithgamecards_section");
- for (var i = 0; i < eleSections.length; i++)
- {
- var keyArr = new Array();
- var valArr = new Array();
-
- var eleFriends = eleSections[i].querySelectorAll(".badge_friendwithgamecard");
- for (var j = 0; j < eleFriends.length; j++)
- {
- var elePersona = eleFriends[j].querySelector(".persona");
- if (elePersona != null)
- {
- var key = "";
-
- if (elePersona.classList.contains("in-game"))
- {
- key = "01";
- }
- else if (elePersona.classList.contains("online"))
- {
- key = "02";
- }
- else
- {
- key = "03";
- }
-
- var key = key + "___" + elePersona.textContent.trim().toLowerCase()
- + "___" + elePersona.getAttribute("data-miniprofile");
- keyArr.push(key);
- valArr[key] = eleFriends[j];
- eleSections[i].removeChild(eleFriends[j]);
- }
- } // end for j
-
- keyArr.sort();
-
- for (var j = keyArr.length - 1; j > -1 ; j--)
- {
- eleSections[i].insertBefore(valArr[keyArr[j]], eleSections[i].firstChild);
- } // end for j
-
- } // end for i
- }, 100);
- }
- }
- function linkBadgeToFriendAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
-
- if (patt.test(url) && !isErrorCard())
- {
- attachOnLoad(linkBadgeToFriend);
- }
- }
- if (enableLinkBadgeToFriend) linkBadgeToFriendAttach();
-
- /** Add button on top of Store page to view Badge page
- */
- function linkStoreToBadge()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/app\//i;
- var pattEnd = /[^0-9].*$/i;
- var app = url.replace(patt, "").replace(pattEnd, "");
-
- var aOwner = document.querySelector("#global_actions > .user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
- var isOwned = document.querySelector(".game_area_already_owned") != null;
-
- var urlCard = "category2=29";
- var titleCard = "Steam Trading Cards";
- var urlDlc = "category1=21";
- var titleDlc = "Downloadable Content";
- var urlAch = "category2=22";
- var titleAch = "Steam Achievement";
-
- var isBadge = false;
- var isBadgeMap = false;
- var isAch = false;
-
- var cookieCountry = getCookie("steamCountry");
- if (cookieCountry)
- {
- GM_setValue("storeCountry", cookieCountry.substr(0, 2));
- }
-
- var as = document.querySelectorAll(".game_area_details_specs a");
- for (var i = 0; i < as.length; i++)
- {
- if (appDlcs.indexOf(app) > -1 || as[i].href.indexOf(urlDlc) > -1 || as[i].textContent == titleDlc)
- {
- isBadge = false;
- isAch = false;
- break;
- }
- else if (as[i].href.indexOf(urlCard) > -1 || as[i].textContent == titleCard)
- {
- isBadge = true;
- }
- else if (as[i].href.indexOf(urlAch) > -1 || as[i].textContent == titleAch)
- {
- isAch = true;
- }
- }
-
- if (appCardMaps[app] != null)
- {
- isBadge = true;
- isBadgeMap = true;
- }
- else if (!isBadge)
- {
- if (appCards.indexOf(app) > -1)
- {
- isBadge = true;
- }
- }
-
- if (isBadge)
- {
- var appCard = app;
- if (isBadgeMap)
- {
- appCard = appCardMaps[app];
- }
-
- var divs = document.getElementsByClassName("apphub_OtherSiteInfo");
- for (var i = 0; i < divs.length; i++)
- {
- divs[i].innerHTML = divs[i].innerHTML
- + " <a class=\"btnv6_blue_hoverfade btn_medium\""
- + " href=\"" + ownerUrl + "/gamecards/" + appCard + "/\">"
- + "<span>Trading Cards</span></a>";
- }
- }
-
- if (false && isAch)
- {
- var urlAchLink = (isLoggedIn && isOwned ? ownerUrl + "/stats/appid/" : "http://steamcommunity.com/stats/")
- + app + "/achievements/";
-
- var divCommu = document.querySelector(".communitylink .block_content_inner");
- if (divCommu != null)
- {
- var aAch = ' <a class="linkbar" href="' + urlAchLink + '">'
- + '<div class="rightblock" style="margin-top: 3px;"><img src="http://cdn4.store.steampowered.com/public/images/ico/ico_achievements.png"'
- + ' align="top" border="0" style="margin-right: -9px; height: 20px; margin-top: -5px;"></div>'
- + 'View Steam Achievements</a>';
- divCommu.innerHTML = divCommu.innerHTML + aAch;
- }
-
- /*var divDemo = document.querySelector("#demo_block > div");
- if (divDemo != null)
- {
- var divAch = '<div class="demo_area_button"><a class="game_area_wishlist_btn" href="'
- + urlAchLink + '">View Steam Achievements</a></div>';
-
- divDemo.innerHTML = divAch + divDemo.innerHTML;
- }*/
- }
-
- var txtRec = document.getElementById("game_recommendation");
- if (txtRec != null)
- {
- // reduce height of review textbox
- txtRec.style.height = "16px";
- txtRec.onfocus = function(){txtRec.style.height="150px";};
- }
-
- // Move early access zone
- {
- var eleEa = document.querySelector(".early_access_header");
- if (eleEa != null)
- {
- var elePurchase = document.querySelector("#game_area_purchase");
- if (elePurchase != null)
- {
- insertAfterElement(eleEa, elePurchase);
- }
- }
- }
-
- // Move language zone
- {
- var eleNote = document.querySelector("#purchase_note > .notice_box_content > b");
- if (eleNote != null)
- {
- var elePurchase = document.querySelector("#game_area_purchase");
- if (elePurchase != null)
- {
- /*var elesGame = elePurchase.querySelectorAll(".game_area_purchase_game_wrapper");
- if (elesGame.length > 0)
- {
- insertAfterElement(eleNote.parentElement.parentElement, elesGame[elesGame.length - 1]);
- }
- else*/
- {
- if (elePurchase.lastElementChild.classList.contains("game_area_dlc_section"))
- {
- eleNote.parentElement.parentElement.style.marginTop = "60px";
- }
- insertAfterElement(eleNote.parentElement.parentElement, elePurchase.lastElementChild);
- }
- }
- }
- }
-
- // Redirect Steam run
- {
- var eleCart = document.querySelector(".btn_addtocart a");
- if (eleCart)
- {
- if (eleCart.href.indexOf("ShowGotSteamModal") > -1)
- {
- eleCart.href = eleCart.href.replace("javascript:ShowGotSteamModal('", "")
- .replace(/\',.*$/i, "").replace("steam://run", "steam://install");
- }
- else if (eleCart.href.indexOf("steam://run") === 0)
- {
- eleCart.href = eleCart.href.replace("steam://run", "steam://install");
- }
- }
- }
-
- if (!isLoggedIn)
- {
- var eleLoginMain = document.querySelector("a.global_action_link[href*='/login/']");
- var eleLoginQueue = document.querySelector(".queue_actions_ctn a[href*='/login/']");
- if (eleLoginMain != null && eleLoginQueue != null)
- {
- eleLoginMain.setAttribute("href", eleLoginQueue.getAttribute("href"));
- }
- }
- }
- function linkStoreToBadgeAttach(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/(app|sub)\//i;
-
- if (patt.test(url))
- {
- attachOnReady(function()
- {
- setTimeout(linkStoreToBadge, tm);
- });
- }
- }
- if (enableLinkStoreToBadge) linkStoreToBadgeAttach(1000);
-
- /** Add button in Forum page to view Badge page
- * Mark topic to determine visited links
- */
- function linkForumToBadge()
- {
- var url = document.documentURI;
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/app\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
-
- var divs = document.getElementsByClassName("apphub_OtherSiteInfo");
- for (var j = 0; j < divs.length; j++)
- {
- var aBadge = " <a class='btn_darkblue_white_innerfade btn_medium' href='"
- + ownerUrl + "/gamecards/" + app
- + "/'><span>Trading Cards</span></a> ";
- divs[j].innerHTML = divs[j].innerHTML + aBadge;
- }
-
- function markTopic()
- {
- var as = document.getElementsByClassName("forum_topic_overlay");
- for (var i = 0; i < as.length; i++)
- {
- // mark topic
- as[i].style.borderLeft = "3px solid";
- }
- }
- markTopic();
- document.addEventListener("DOMNodeInserted", markTopic);
- }
- function linkForumToBadgeTimeout(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/app\/[0-9]+\/tradingforum\//i;
-
- if (patt.test(url))
- {
- setTimeout(linkForumToBadge, tm);
- }
- }
- if (enableLinkForumToBadge) linkForumToBadgeTimeout(100);
-
- /** Add buttons in Badge page to view Trading Forum, Store, friend's Inventory and my Badge page
- */
- function linkBadgeToForum()
- {
- var url = document.documentURI;
-
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
-
- GM_addStyle
- (
- " .sbh_badge_menu_right { float: right; margin-left: 5px; } "
- + " .badge_card_to_collect_links a[href$='/tradingforum/'], .es_visit_tforum { display: none; } "
- );
-
- var divs = document.getElementsByClassName("gamecards_inventorylink");
- if (divs.length > 0)
- {
- var aStoreUrl = "http://store.steampowered.com/app/" + app + "/";
- var aForumUrl = "http://steamcommunity.com/app/" + app + "/tradingforum/";
- var aCustom = " <a class='btn_grey_grey btn_small_thin sbh_badge_menu_right' href='" + aStoreUrl + "'>"
- + " <span>Visit Store Page</span></a> "
- + " <a class='btn_grey_grey btn_small_thin sbh_badge_menu_right' href='" + aForumUrl + "'>"
- + " <span>Visit Trade Forum</span></a> ";
-
- divs[0].innerHTML = divs[0].innerHTML + aCustom;
- }
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
-
- var aFriend = document.querySelector(".profile_small_header_name > a");
- var isFriendExist = aFriend != null;
- var friendUrl = isFriendExist ? aFriend.href : "http://steamcommunity.com/my";
- var friendName = isFriendExist ? aFriend.textContent.trim() : "my"
- var friendNameOwner = isFriendExist ? friendName + "'s" : friendName;
-
- var isOwner = isLoggedIn && ownerUrl == friendUrl;
-
- if (!isOwner)
- {
- var divInv;
- if (divs.length > 0)
- {
- divInv = divs[0];
- }
- else
- {
- divInv = document.createElement("div");
- divInv.classList.add("gamecards_inventorylink");
- var divBadge = document.querySelector(".badge_detail_tasks");
- if (divBadge != null)
- {
- divBadge.insertBefore(divInv, divBadge.firstChild);
- }
- }
- var aFrInvUrl = friendUrl + "/inventory/#753_6";
- var aOwnUrl = url.replace(pattAppHead, ownerUrl + "/gamecards/");
- divInv.innerHTML = divInv.innerHTML
- + "<a class='btn_grey_grey btn_small_thin' href='" + aFrInvUrl + "'><span>View cards in "
- + friendNameOwner + " Inventory</span></a> "
- + " <a class='btn_grey_grey btn_small_thin' href='" + aOwnUrl + "'><span>View my Progress</span></a> ";
-
- }
- }
- function linkBadgeToForumAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
-
- if (patt.test(url) && !isErrorCard())
- {
- attachOnLoad(linkBadgeToForum);
- }
- }
- if (enableLinkBadgeToForum) linkBadgeToForumAttach();
-
- /** Add button in Market page to view Badge and Store page
- */
- function linkMarketToBadge()
- {
- var url = document.documentURI;
-
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/753\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var pattNumber = /[0-9]+/;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
-
- GM_addStyle(
- "#market_buynow_dialog_purchase > span:nth-child(1) { line-height: 80px; padding: 0px 50px 0px 50px !important; } "
- + "#market_buynow_dialog { width: 850px; } "
- + ".market_listing_table_header { margin: 0px; } "
- + ".market_listing_row { margin-top: 2px; } "
- + ".market_listing_row > .market_listing_es_lowest:nth-child(3) { visibility: hidden; } "
- + ".market_listing_row > .market_listing_es_lowest:nth-child(8) { display: none; } "
- + ".es_market_lowest_button { display: none; } "
- );
-
- var div_tabL = document.querySelectorAll("div.market_large_tab_well");
- for (var i = 0; i < div_tabL.length; i++)
- {
- // reduce height of header
- div_tabL[i].style.height = "50px";
- }
- var div_tabLB = document.querySelectorAll("div.market_large_tab_well_gradient");
- for (var i = 0; i < div_tabLB.length; i++)
- {
- div_tabLB[i].style.height = "65px";
- }
-
- var div_store = document.getElementById("largeiteminfo_game_name");
-
- if (div_store != null)
- {
- div_store.innerHTML = "<a href='http://store.steampowered.com/app/" + app + "/'>"
- + div_store.innerHTML + "</a>";
- }
-
- var isFoil = false;
- var ele_name = document.getElementById("largeiteminfo_item_name");
- if (ele_name != null)
- {
- isFoil = (ele_name.innerHTML.search("Foil") > -1);
- ele_name.innerHTML = "<a href='" + ownerUrl + "/gamecards/" + app
- + (isFoil ? "/?border=1" : "/") + "'>" + ele_name.innerHTML + "</a>";
- }
-
- var ele_icon = document.getElementsByClassName("item_desc_game_icon");
- for (var i = 0; i < ele_icon.length; i++)
- {
- ele_icon[i].innerHTML = "<a href='http://store.steampowered.com/app/" + app + "/'>"
- + ele_icon[i].innerHTML + "</a>";
- }
-
- var div_nav = document.getElementsByClassName("market_large_tab_well");
- for (var j = 0; j < div_nav.length; j++)
- {
- var aBadge = ' <div class="apphub_OtherSiteInfo" '
- + 'style="position: relative; float: right; right: 2px; top: 2px;"> '
- + '<a style="position: relative; z-index: 1;" class="btn_darkblue_white_innerfade btn_medium" '
- + 'href="#" onclick="document.getElementById(\'pricehistory\').style.display = \'inherit\'; '
- + 'document.querySelector(\'.pricehistory_zoom_controls\').style.display = \'inherit\'; return false; " >'
- + '<span>Show History</span></a> '
- + '<a style="position: relative; z-index: 1;" class="btn_darkblue_white_innerfade btn_medium" '
- + 'href="http://store.steampowered.com/app/' + app + '"><span>Store Page</span></a> '
- + '<a class="btn_darkblue_white_innerfade btn_medium" '
- + 'href="' + ownerUrl + '/gamecards/' + app + (isFoil ? "/?border=1" : "/")
- + '"><span>Trading Cards</span></a></div>';
- div_nav[j].innerHTML = div_nav[j].innerHTML + aBadge;
- GM_addStyle(
- "#pricehistory, .pricehistory_zoom_controls { display: none } "
- );
- }
-
- var span_list = document.querySelectorAll("div.market_listing_row > div:nth-child(3) > span:nth-child(1) > span:nth-child(1)");
- for (var i = 0; i < span_list.length; i++)
- {
- if (!pattNumber.test(span_list[i].textContent))
- {
- span_list[i].parentElement.parentElement.parentElement.style.display = "none";
- }
- }
-
- // preview bg in profile
- {
- if (ownerUrl != "http://steamcommunity.com/my")
- {
- var aImg = document.querySelector("#largeiteminfo_item_actions > a");
- if (aImg != null)
- {
- var img = aImg.href;
- if (/\.jpg$/i.test(img))
- {
- var urlPreview = ownerUrl + "?previewbg=" + img;
-
- var a = document.createElement("a");
- a.classList.add("btn_small");
- a.classList.add("btn_grey_white_innerfade");
- a.setAttribute("target", "_blank");
- a.href = urlPreview;
- a.innerHTML = '<span>Preview in Profile</span>';
- aImg.parentElement.appendChild(a);
- }
- }
- }
- }
- }
- function linkMarketToBadgeAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/753\/[0-9]+/i;
-
- if (patt.test(url) && !isErrorMarket())
- {
- attachOnLoad(linkMarketToBadge);
- }
- }
- if (enableLinkMarketToBadge) linkMarketToBadgeAttach();
-
- /** Add price of each cards in Badge page and link to Market page
- */
- function linkBadgeToMarket()
- {
- GM_addStyle(
- ".div_market_price { float: right; } " // padding-top: 1px; display: inline-block; padding-left: 90px;
- + ".gamecard_badge_craftbtn_ctn .badge_craft_button { width: 160px !important; } "
- );
-
- var url = document.documentURI;
-
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
- var isFoil = getQueryByName("border", url) == "1";
- var urlPrice = "http://steamcommunity.com/market/priceoverview/?appid=753¤cy=";
- var urlMarket = "http://steamcommunity.com/market/listings/753/";
-
- var priceCards = new Array();
- var priceUrls = new Array();
-
- var cookieCountry = getCookie("steamCountry");
- if (cookieCountry)
- {
- GM_setValue("storeCountry", cookieCountry.substr(0, 2));
- }
-
- setTimeout(function (app, isFoil)
- {
- var isCacheExpire = checkCacheExpire(app);
-
- var elesCardName = document.querySelectorAll(".sbh_cardName");
- for (var i = 0; i < elesCardName.length; i++)
- {
- updatePrice(app, isFoil, i);
-
- if (isCacheExpire || !enableCache)
- {
- var currency = marketCountries[GM_getValue("storeCountry", "US")] || "1";
- var urlPriceCur = urlPrice + currency
- + "&market_hash_name="
- + app + "-" + encodeURIComponent(elesCardName[i].textContent.trim())
- + (isFoil ? "%20(Foil)" : "")
- + "&sbh_appid=" + app
- + (isFoil ? "&sbh_border=1" : "")
- + "&sbh_cardid=" + i
- + "&sbh_cardnum=" + (elesCardName.length + 1)
- + "&sbh_expire=" + (isCacheExpire ? 1 : 0);
-
- //console.log(urlPriceCur);
-
- GM_xmlhttpRequest({
- method: "GET",
- url: urlPriceCur,
- onload: getPriceCur,
- });
- }
- }
- }, 100, app, isFoil);
-
- function getPriceCur(res)
- {
- var urlCur = res.finalUrl;
- try
- {
- var dataRes = JSON.parse(res.responseText);
-
- var isFoil = getQueryByName("sbh_border", urlCur) == "1";
- var curCard = parseInt(getQueryByName("sbh_cardid", urlCur));
- var numCard = parseInt(getQueryByName("sbh_cardnum", urlCur));
- var app = getQueryByName("sbh_appid", urlCur);
- var marketName = getQueryByName("market_hash_name", urlCur);
- var isResolve = getQueryByName("sbh_resolve", urlCur) == "1";
- var indexCard = (isFoil ? 1 : 0) * numCard + curCard;
- var isCacheExpire = getQueryByName("sbh_expire", urlCur) == "1";
-
- //console.log("marketName: " + marketName);
-
- if (dataRes)
- {
- if (!dataRes.success && !isResolve)
- {
- var marketNameNew = marketName;
- if (marketName.indexOf("566020-Mysterious") > -1)
- {
- marketNameNew = marketName.replace("566020-Mysterious", "566020-Mysterious Card");
- }
- else if (marketName.indexOf("639900-Mysterious") > -1)
- {
- marketNameNew = marketName.replace("639900-Mysterious", "639900-Mysterious Card");
- }
- else
- {
- marketNameNew = isFoil ? marketName.replace("(Foil)", "(Foil Trading Card)")
- : marketName + " (Trading Card)";
- }
-
- //console.log("marketNameNew: " + marketNameNew);
-
- var currency = marketCountries[GM_getValue("storeCountry", "US")] || "1";
- var urlPriceCur = urlPrice + currency
- + "&market_hash_name=" + encodeURIComponent(marketNameNew)
- + "&sbh_appid=" + app
- + (isFoil ? "&sbh_border=1" : "")
- + "&sbh_cardid=" + curCard
- + "&sbh_cardnum=" + numCard
- + "&sbh_expire=" + (isCacheExpire ? 1 : 0)
- + "&sbh_resolve=1";
-
- //console.log(urlPriceCur);
-
- GM_xmlhttpRequest({
- method: "GET",
- url: urlPriceCur,
- onload: getPriceCur,
- });
- }
- else
- {
- var cPrice = dataRes.lowest_price || "0";
- var cUrl = encodeURIComponent(marketName);
-
- priceCards[indexCard] = cPrice;
- priceUrls[indexCard] = cUrl;
-
- //console.log("getPriceCur: " + indexCard + ", " + cPrice + ", " + cUrl);
-
- if (enableCache && isCacheExpire)
- {
- setCacheTime(app);
-
- if (cPrice != "0")
- {
- setCachePrice(app, isFoil, curCard, cPrice);
- }
- setCacheUrl(app, isFoil, curCard, cUrl);
- }
-
- if (false)
- {
- var pattNumCard = /Card [0-9]+ of /i;
- var pattMarket = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/753\//i;
- var pattPrice = /(Price: |Last seen: )/i;
-
- var divTempID = randTempID();
- createDivTemp(divTempID, res.responseText);
- try
- {
- //debug("ID: "+divTempID);
- var divTemp = document.getElementById(divTempID);
- var numCard = 0;
- try
- {
- var spanNumber = divTemp.getElementsByClassName("element-count")[0];
- if (spanNumber == null)
- {
- debug("Warning: can't get price");
- return;
- }
- numCard = parseInt(spanNumber.textContent.replace(pattNumCard, ""));
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
-
- var offsetCard = isFoil ? numCard : 0;
- var curCard = 0;
-
- var isCacheExpire = checkCacheExpire(app);
-
- priceCards = new Array();
- priceUrls = new Array();
-
- var as = divTemp.getElementsByClassName("button-blue");
- for (var i = 0; i < as.length; i++)
- {
- if (pattMarket.test(as[i].href))
- {
- if (curCard < numCard * 2)
- {
- var cPrice = as[i].textContent.replace(pattPrice, "").trim();
- var cUrl = as[i].href.replace(urlMarket, "");
-
- var indexCard = curCard - offsetCard;
- if (indexCard >= 0 && indexCard < numCard)
- {
- priceCards[indexCard] = cPrice;
- priceUrls[indexCard] = cUrl;
- }
-
- // cache
- if (enableCache && isCacheExpire)
- {
- setCacheTime(app);
- if (curCard < numCard)
- {
- setCachePrice(app, false, curCard, cPrice);
- setCacheUrl(app, false, curCard, cUrl);
- }
- else // foil
- {
- setCachePrice(app, true, curCard - numCard, cPrice);
- setCacheUrl(app, true, curCard - numCard, cUrl);
- }
- }
-
- curCard += 1;
- }
- else
- {
- break;
- }
- }
- }
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
- removeDivTemp(divTempID);
- }
- updatePrice(app, isFoil, curCard);
- }
-
- //debugTime("getPriceCur");
- }
- else
- {
- debug("getPriceCur: Fail " + urlCur);
-
- var cUrl = encodeURIComponent(marketName);
- priceUrls[indexCard] = cUrl;
-
- if (enableCache && getCacheUrl(app, isFoil, curCard) == 0)
- {
- setCacheUrl(app, isFoil, curCard, cUrl);
- }
-
- updatePrice(app, isFoil, curCard);
- }
- }
- catch (e)
- {
- debug("Ex: " + e + ", URL: " + urlCur);
- }
- }
-
- function updatePrice(app, isFoil, curCard)
- {
- var pattNum = /[0-9\.]+/;
- var colorUp = "#CC0000";
- var colorDown = "#009900";
-
- if (enableCache)
- {
- priceCards = new Array();
- priceUrls = new Array();
-
- var i = curCard;
- if (i < 15)
- //for (var i = 0; i < 15; i++)
- {
- var p = getCachePrice(app, isFoil, i);
- var u = getCacheUrl(app, isFoil, i);
- if (p != 0)
- {
- priceCards[i] = p;
- }
- if (u != 0)
- {
- priceUrls[i] = u;
- }
- }
- }
-
- var texts = document.getElementsByClassName("badge_card_set_card");
- var numCard = texts.length;
- var priceSet = 0;
-
- var j = curCard;
- if (j < texts.length)
- //for (var j = 0; j < texts.length; j++)
- {
- var pUrl = priceUrls[j] ? urlMarket + priceUrls[j] : "";
- var pCard = priceCards[j] ? priceCards[j] : "-";
- var pOnClick = priceCards[j] ? "" : " onclick='return false;' ";
- var pDiff = "";
- var pCardOld = "";
-
- var divTexts = texts[j].querySelectorAll("div.badge_card_set_text");
- var divText = divTexts[divTexts.length - 1];
- var divMarkets = texts[j].getElementsByClassName("div_market_price");
- var divMarket;
- if (divMarkets.length == 0)
- {
- divMarket = document.createElement("div");
- divMarket.classList.add("div_market_price");
- //divMarket.classList.add("badge_card_set_text_qty");
- divText.appendChild(divMarket);
-
- var divClear = document.createElement("div");
- divClear.style.clear = "right";
- divText.appendChild(divClear);
-
- divText.style.whiteSpace = "normal";
- }
- else
- {
- divMarket = divMarkets[0];
- var as = divMarket.getElementsByTagName("a");
- if (as.length > 0)
- {
- var pOld = as[0].textContent;
- var pValOld = pOld.match(pattNum);
- if (pValOld != null)
- {
- //debug("oldPrice[" + j + "]: "+ pValOld);
-
- pCardOld = "title='Cache Price: " + pOld + "'";
-
- var pVal = pCard.match(pattNum);
- pVal = pVal ? pVal : 0;
-
- priceSet += parseFloat(pVal);
-
- var pValDiff = (parseFloat(pVal) - parseFloat(pValOld)).toFixed(2);
- if(pValDiff > 0)
- {
- pDiff = "<span style='cursor: help; color: " + colorUp + ";' "
- + pCardOld + ">+" + pValDiff + "</span>";
- }
- else if (pValDiff < 0)
- {
- pDiff = "<span style='cursor: help; color: " + colorDown + ";' "
- + pCardOld + ">" + pValDiff + "</span>";
- }
- else
- {
- pCardOld = "";
- }
- }
- }
- }
-
- divMarket.innerHTML = pDiff + ' <a href="' + pUrl + '" ' + pOnClick + ' title="Lowest Price">' + pCard + "</a>";
- } // end for
-
- if (priceSet > 0)
- {
- //debug("priceSet: " + priceSet);
- }
- }
- }
- function linkBadgeToMarket_old()
- {
- GM_addStyle(
- ".div_market_price { float: right; } " // padding-top: 1px; display: inline-block; padding-left: 90px;
- + ".gamecard_badge_craftbtn_ctn .badge_craft_button { width: 160px !important; } "
- );
-
- var url = document.documentURI;
-
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
- var isFoil = getQueryByName("border", url) == "1";
- var urlExternal = "http://www.steamcardexchange.net/index.php?gamepage-appid-" + app;
- var urlMarket = "http://steamcommunity.com/market/listings/753/";
-
- var priceCards = new Array();
- var priceUrls = new Array();
-
- updatePrice();
-
- var isCacheExpire = checkCacheExpire(app);
- if (isCacheExpire || !enableCache)
- {
- setTimeout(function ()
- {
- GM_xmlhttpRequest({
- method: "GET",
- url: urlExternal,
- onload: getExternalPrice,
- });
- }, 0);
- }
-
- function getExternalPrice(res)
- {
- try
- {
- var pattNumCard = /Card [0-9]+ of /i;
- var pattMarket = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/753\//i;
- var pattPrice = /(Price: |Last seen: )/i;
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
-
- var aFriend = document.querySelector(".profile_small_header_name > a");
- var isFriendExist = aFriend != null;
- var friendUrl = isFriendExist ? aFriend.href : "http://steamcommunity.com/my";
- var friendName = isFriendExist ? aFriend.textContent.trim() : "my"
- var friendNameOwner = isFriendExist ? friendName + "'s" : friendName;
-
- var isOwner = isLoggedIn && ownerUrl == friendUrl;
-
- var divTempID = randTempID();
- createDivTemp(divTempID, res.responseText);
- try
- {
- //debug("ID: "+divTempID);
- var divTemp = document.getElementById(divTempID);
- var numCard = 0;
- try
- {
- var spanNumber = divTemp.getElementsByClassName("element-count")[0];
- if (spanNumber == null)
- {
- debug("Warning: can't get price");
- return;
- }
- numCard = parseInt(spanNumber.textContent.replace(pattNumCard, ""));
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
-
- var offsetCard = isFoil ? numCard : 0;
- var curCard = 0;
-
- var isCacheExpire = checkCacheExpire(app);
-
- priceCards = new Array();
- priceUrls = new Array();
-
- var as = divTemp.getElementsByClassName("button-blue");
- for (var i = 0; i < as.length; i++)
- {
- if (pattMarket.test(as[i].href))
- {
- if (curCard < numCard * 2)
- {
- var cPrice = as[i].textContent.replace(pattPrice, "").trim();
- var cUrl = as[i].href.replace(urlMarket, "");
-
- var indexCard = curCard - offsetCard;
- if (indexCard >= 0 && indexCard < numCard)
- {
- priceCards[indexCard] = cPrice;
- priceUrls[indexCard] = cUrl;
- }
-
- // cache
- if (enableCache && isCacheExpire)
- {
- setCacheTime(app);
- if (curCard < numCard)
- {
- setCachePrice(app, false, curCard, cPrice);
- setCacheUrl(app, false, curCard, cUrl);
- }
- else // foil
- {
- setCachePrice(app, true, curCard - numCard, cPrice);
- setCacheUrl(app, true, curCard - numCard, cUrl);
- }
- }
-
- curCard += 1;
- }
- else
- {
- break;
- }
- }
- }
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
- removeDivTemp(divTempID);
-
- updatePrice();
-
- debugTime("getExternalPrice");
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
- }
-
- function updatePrice()
- {
- var pattNum = /[0-9\.]+/;
- var colorUp = "#CC0000";
- var colorDown = "#009900";
-
- if (enableCache)
- {
- priceCards = new Array();
- priceUrls = new Array();
-
- for (var i = 0; i < 15; i++)
- {
- var p = getCachePrice(app, isFoil, i);
- var u = getCacheUrl(app, isFoil, i);
- if (p != 0 && u != 0)
- {
- priceCards[i] = p;
- priceUrls[i] = u;
- }
- else
- {
- break;
- }
- }
- }
-
- var texts = document.getElementsByClassName("badge_card_set_card");
- var numCard = texts.length;
- var priceSet = 0;
-
- for (var j = 0; j < texts.length; j++)
- {
- var pUrl = priceUrls[j] ? urlMarket + priceUrls[j] : "";
- var pCard = priceCards[j] ? priceCards[j] : "-";
- var pOnClick = priceCards[j] ? "" : " onclick='return false;' ";
- var pDiff = "";
- var pCardOld = "";
-
- var divTexts = texts[j].querySelectorAll("div.badge_card_set_text");
- var divText = divTexts[divTexts.length - 1];
- var divMarkets = texts[j].getElementsByClassName("div_market_price");
- var divMarket;
- if (divMarkets.length == 0)
- {
- divMarket = document.createElement("div");
- divMarket.classList.add("div_market_price");
- //divMarket.classList.add("badge_card_set_text_qty");
- divText.appendChild(divMarket);
-
- var divClear = document.createElement("div");
- divClear.style.clear = "right";
- divText.appendChild(divClear);
-
- divText.style.whiteSpace = "normal";
- }
- else
- {
- divMarket = divMarkets[0];
- var as = divMarket.getElementsByTagName("a");
- if (as.length > 0)
- {
- var pOld = as[0].textContent;
- var pValOld = pOld.match(pattNum);
- if (pValOld != null)
- {
- //debug("oldPrice[" + j + "]: "+ pValOld);
-
- pCardOld = "title='Cache Price: " + pOld + "'";
-
- var pVal = pCard.match(pattNum);
- pVal = pVal ? pVal : 0;
-
- priceSet += parseFloat(pVal);
-
- var pValDiff = (parseFloat(pVal) - parseFloat(pValOld)).toFixed(2);
- if(pValDiff > 0)
- {
- pDiff = "<span style='cursor: help; color: " + colorUp + ";' "
- + pCardOld + ">+" + pValDiff + "</span>";
- }
- else if (pValDiff < 0)
- {
- pDiff = "<span style='cursor: help; color: " + colorDown + ";' "
- + pCardOld + ">" + pValDiff + "</span>";
- }
- else
- {
- pCardOld = "";
- }
- }
- }
- }
-
- divMarket.innerHTML = pDiff + " <a href='" + pUrl + "' " + pOnClick + " title='Lowest Price'>" + pCard + "</a>";
- } // end for
-
- if (priceSet > 0)
- {
- debug("priceSet: " + priceSet);
- }
- }
- }
- function linkBadgeToMarketAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
-
- if (patt.test(url) && !isErrorCard())
- {
- attachOnReady(linkBadgeToMarket);
- }
- }
- if (enableLinkBadgeToMarket) linkBadgeToMarketAttach();
-
- /** Compare my cards and friend's cards in Badge page
- * Mark color of my cards count (Green) and friend's cards count (Blue)
- */
- function compareBadge()
- {
- var url = document.documentURI;
-
- var pattAppHead = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\//i;
- var pattAppTail = /[^0-9]+.*/i;
- var app = url.replace(pattAppHead, "").replace(pattAppTail, "");
-
- {
- try
- {
- var pattNumCard = /Card [0-9]+ of /i;
- var pattMarket = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/753\//i;
- var pattPrice = /Price: /i;
-
- var isFoil = url.indexOf("border=1") > -1;
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
- var ownerUrl = isLoggedIn ? aOwner.href.substr(0, aOwner.href.length - 1) : "http://steamcommunity.com/my";
-
- var aFriend = document.querySelector(".profile_small_header_name > a");
- var isFriendExist = aFriend != null;
- var friendUrl = isFriendExist ? aFriend.href : "http://steamcommunity.com/my";
- var friendName = isFriendExist ? aFriend.textContent.trim() : "my"
- var friendNameOwner = isFriendExist ? friendName + "'s" : friendName;
-
- var isOwner = isLoggedIn && ownerUrl == friendUrl;
-
- //debug("ownerUrl: "+ownerUrl);
- //debug("friendUrl: "+friendUrl);
-
- var texts = document.getElementsByClassName("badge_card_set_card");
- var numCard = texts.length;
-
- //debug("isOwner: "+isOwner);
- //debug("numCard: "+numCard);
-
- for (var j = 0; j < numCard; j++)
- {
- var divQty = texts[j].querySelector("div.badge_card_set_text_qty");
- var numQty = "(0)";
- if (divQty != null)
- {
- numQty = divQty.textContent.trim();
- }
- else
- {
- divQty = document.createElement("div");
- divQty.classList.add("badge_card_set_text_qty");
- divQty.innerHTML = numQty;
-
- var divCtn = texts[j].querySelector("div.game_card_ctn");
- if (divCtn != null)
- {
- var divTexts = texts[j].querySelectorAll("div.badge_card_set_text");
- if (divTexts.length < 2)
- {
- texts[j].insertBefore(divQty, divCtn.nextSibling);
- }
- else
- {
- divTexts[0].insertBefore(divQty, divTexts[0].firstChild);
- }
- }
- }
- //debug("numQty: "+numQty);
- } // end for
-
- var colorOwner = "#8CBE0F";
- var colorFriend = "#5491CF";
- var colorZeroOwner = "#557309";
- var colorZeroFriend = "#355C82";
-
- var countCardAll = 0;
-
- var divQtys = document.querySelectorAll("div.badge_card_set_text_qty");
- for (var k = 0; k < divQtys.length; k++)
- {
- var num = divQtys[k].textContent.trim().replace(/[\(\)]/gi, "");
- countCardAll += parseInt(num);
-
- divQtys[k].innerHTML = "";
-
- var spanNum = document.createElement("span");
- spanNum.classList.add("span_card_qty");
- spanNum.style.cursor = "help";
- spanNum.innerHTML = " (" + num + ") ";
- divQtys[k].insertBefore(spanNum, null);
-
- if (isOwner)
- {
- spanNum.classList.add("span_card_qty_owner");
- spanNum.style.color = num > "0" ? colorOwner : colorZeroOwner;
- spanNum.title = "My cards: " + num;
- }
- else
- {
- spanNum.classList.add("span_card_qty_friend");
- spanNum.style.color = num > "0" ? colorFriend : colorZeroFriend;
- spanNum.title = friendNameOwner + " cards: " + num;
- }
- }
-
- debug("countCard: " + countCardAll);
- debug("maxSet: " + parseInt(countCardAll / numCard));
-
- if (!isOwner)
- {
- var pattProfile = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]*/i;
- var urlExternal = url.replace(pattProfile, ownerUrl);
- //debug("urlExternal: "+urlExternal);
-
- setTimeout(function ()
- {
- GM_xmlhttpRequest({
- method: "GET",
- url: urlExternal,
- onload: compareCard,
- });
- }, 0);
-
- function compareCard(res)
- {
- var divTempID = randTempID();
- createDivTemp(divTempID, res.responseText);
- try
- {
- //debug("ID: "+divTempID);
- var divTemp = document.getElementById(divTempID);
-
- var owner_texts = divTemp.getElementsByClassName("badge_card_set_card");
- var owner_numCard = owner_texts.length;
-
- if (numCard == owner_numCard)
- {
- var owner_numQtys = new Array();
-
- for (var i = 0; i < owner_texts.length; i++)
- {
- var owner_divQty = owner_texts[i].querySelector("div.badge_card_set_text_qty");
- if (owner_divQty != null)
- {
- owner_numQtys[i] = owner_divQty.textContent.trim().replace(/[\(\)]/gi, "");
- }
- else
- {
- owner_numQtys[i] = "0";
- }
- //debug("owner_numQtys[i]: "+owner_numQtys[i]);
- } // end for
-
- var friend_divQtys = document.querySelectorAll("div.badge_card_set_text_qty");
- for (var k = 0; k < friend_divQtys.length; k++)
- {
- var owner_spanNum = friend_divQtys[k].querySelector("span_card_qty_owner");
- if (owner_spanNum == null)
- {
- owner_spanNum = document.createElement("span");
- owner_spanNum.classList.add("span_card_qty");
- owner_spanNum.style.cursor = "help";
- owner_spanNum.classList.add("span_card_qty_owner");
- owner_spanNum.style.color = owner_numQtys[k] > "0" ? colorOwner : colorZeroOwner;
- owner_spanNum.title = "My cards: " + owner_numQtys[k];
- friend_divQtys[k].insertBefore(owner_spanNum, friend_divQtys[k].firstChild);
- }
- owner_spanNum.innerHTML = " (" + owner_numQtys[k] + ") ";
- }
- }
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
- removeDivTemp(divTempID);
- debugTime("compareBadge");
- }
- }
- }
- catch (e)
- {
- debug("Ex: " + e);
- }
- }
-
- // Add clickable card name
- {
- GM_addStyle(
- " .sbh_cardName { color: #999; max-width: 170px; text-overflow: ellipsis; "
- + " overflow: hidden; /*display: inline-block;*/ white-space: nowrap;} "
- );
-
- var eleTexts = document.querySelectorAll(".badge_card_set_card");
- for (var i = 0; i < eleTexts.length; i++)
- {
- var eleText = eleTexts[i].querySelector(".badge_card_set_text");
- for (var j = 0; j < eleText.childNodes.length; j++)
- {
- if (eleText.childNodes[j].nodeName == "#text")
- {
- var text = eleText.childNodes[j].textContent.trim();
- if (text != "")
- {
- var eleSpan = document.createElement("div");
- eleSpan.classList.add("sbh_cardName");
- eleSpan.textContent = text;
- eleText.replaceChild(eleSpan, eleText.childNodes[j]);
-
- eleSpan.addEventListener("click", function (e)
- {
- var ele = e.target;
- clickToSelect(ele);
- });
-
- j = eleText.childNodes.length;
- }
- }
- }
- }
- }
- }
- function compareBadgeAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/gamecards\/[0-9]+/i;
-
- if (patt.test(url) && !isErrorCard())
- {
- attachOnReady(compareBadge);
- }
- }
- if (enableCompareBadge) compareBadgeAttach();
-
- /** Link items in inventory to store and badge page
- */
- function linkInventoryToBadge()
- {
- if (isError())
- return;
-
- GM_addStyle
- (
- " .view_inventory_page .item.activeInfo "
- + "{ background-image: none !important; background-color: #9B9B9B !important; border: 1px solid #C9C9C9; } "
- + " .descriptor { max-height: 100px; overflow-y: auto; } "
- + " .inventory_iteminfo .item_desc_content { padding-top: 225px !important; padding-bottom: 0px !important; }"
- + " #pricehistory_notavailable { display: none !important; }"
- );
-
- if (getQueryByName("modal") == "1")
- {
- GM_addStyle
- (
- " .inventory_page_left { padding-bottom: 400px; } "
- + " .descriptor, .item_scrap_actions { display: none; } "
- + " #market_sell_dialog_accept > span { line-height: 30px; } "
- + " #market_sell_dialog_confirm_buttons > .market_dialog_bottom_buttons { margin-top: 110px; } "
- + " #market_sell_dialog_ok { min-width: 150px; } "
- );
- }
- }
- function linkInventoryToBadgeAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/inventory/i;
-
- if (patt.test(url))
- {
- attachOnLoad(linkInventoryToBadge);
- }
- }
- if (enableLinkInventoryToBadge) linkInventoryToBadgeAttach();
-
- function editTitle()
- {
- var url = document.documentURI;
- try
- {
- var titleOld = document.title;
- var titleNew = titleOld;
- var titleNoti = "";
- var pattSale = /[0-9]+%/i;
- var intervalTitle = null;
-
- if (enableSwapTitle)
- {
- var splitSpace = titleOld.split(" ");
- if (splitSpace.length > 1)
- {
- if (pattSale.test(splitSpace[1]))
- {
- splitSpace.splice(0, 1);
- splitSpace.splice(1, 1);
- titleOld = splitSpace.join(" ");
- }
- }
- var split = titleOld.split("::").reverse();
- for (var i = 0; i < split.length; i++)
- {
- split[i] = split[i].trim();
- }
- if (url.indexOf("steamcommunity.com/market/listings/") > -1)
- {
- var posApp = split[0].search(/\d/);
- if (posApp > -1)
- {
- split[0] = split[0].substr(posApp);
- }
- var posSub = split[0].indexOf("-");
- if (posSub > 0)
- {
- split[0] = split[0].substr(posSub + 1) + " - " + split[0].substr(0, posSub);
- }
- }
- titleNew = split.join(" :: ");
- document.title = titleNew;
- }
-
- var divH = document.querySelector("#header_notification_area");
- if (divH != null)
- {
- divH.addEventListener('mouseover', function() {
- clearInterval(intervalTitle);
- document.title = titleNew;
- });
- }
-
- if (enableShowTitleNoti)
- {
- function updateTitleNoti()
- {
- var noti = document.querySelector("#header_notification_link");
- if (noti != null)
- {
- var notiNum = noti.textContent.trim();
- if (notiNum != "" && notiNum != "0")
- {
- //debug("updateTitleNoti: "+notiNum);
- titleNoti = "("+notiNum+") ";
- }
- else
- {
- titleNoti = "";
- }
- if (document.title != titleNoti + titleNew)
- {
- //debug("changeTitle: "+notiNum);
- document.title = titleNoti + titleNew;
- }
- }
- }
-
- intervalTitle = setInterval(updateTitleNoti, 1000);
-
- {
- /*
- var timeoutID = -1;
-
- noti.addEventListener("DOMSubtreeModified", function (e) {
- debug("DOMSubtreeModified");
- try
- {
- clearTimeout(timeoutID);
- }
- catch (ex)
- {
- }
- updateTitleNoti();
- });
-
- noti.addEventListener("DOMNodeInserted", function (e) {
- debug("DOMNodeInserted");
- try
- {
- clearTimeout(timeoutID);
- }
- catch (ex)
- {
- }
- updateTitleNoti();
- });
-
- noti.addEventListener("DOMNodeRemoved", function (e) {
- debug("DOMNodeRemoved");
- timeoutID = setTimeout(updateTitleNoti,100);
- });
- */
- }
- }
- }
- catch (ex)
- {
- debug("editTitle: "+ex);
- }
- }
- function editTitleAttach()
- {
- attachOnReady(editTitle);
- }
- if (enableSwapTitle || enableShowTitleNoti) editTitleAttach();
-
- /** Resize trade window that is larger than 768px
- */
- function resizeTradeWindow()
- {
- if (window.innerHeight < 800)
- {
- //GM_addStyle("#mainContent { transform: scale(0.8, 0.8); transform-origin: 50% 0px 0px; }");
-
- if (window.innerWidth > 1000)
- {
- //window.resizeBy(-240,0);
- //window.moveBy(200,0);
- }
- }
-
- var ele = document.querySelector("#trade_escrow_header, .trade_partner_info_block");
- if (ele != null)
- {
- ele.scrollIntoView();
- }
-
- // Fix blank box in Firefox
- {
- setInterval(function ()
- {
- if (isVisible())
- {
- var ele = document.querySelector("#inventory_displaycontrols");
- if (ele != null)
- {
- if (ele.offsetHeight > 200)
- {
- if (ele.style.float != "left")
- {
- ele.style.float = "left";
- }
- }
- else
- {
- if (ele.style.float != "")
- {
- ele.style.float = "";
- }
- }
- }
- }
- }, 1000);
- }
-
- // Use arrow keys to change page
- {
- document.body.addEventListener("keydown", function (e)
- {
- var query = "";
-
- if (e.keyCode != undefined)
- {
- if (e.keyCode === 37) // Left
- {
- query = "#pagebtn_previous";
- }
- else if (e.keyCode === 39) // Right
- {
- query = "#pagebtn_next";
- }
- }
-
- if (query !== "")
- {
- var eleTarget = document.querySelector(query);
- if (eleTarget)
- {
- e.preventDefault();
- eleTarget.click();
- return false;
- }
- }
- }, true);
- }
- }
- function resizeTradeWindowAttach(tm)
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(tradeoffer|trade)\//i;
-
- if (patt.test(url))
- {
- attachOnLoad(function ()
- {
- setTimeout(resizeTradeWindow, tm);
- });
- }
- }
- if (enableResizeTradeWindow) resizeTradeWindowAttach(100);
-
- /** Add link in profile page
- */
- function linkProfile()
- {
- GM_addStyle(".achievement_progress_bar_ctn { width: 118px; margin-left: 4px; } "
- + ".showcase_stat .value { z-index: 2; position: relative; } ");
-
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
-
- var url = document.documentURI;
- var urlOwner = url;
-
- if (urlOwner[urlOwner.length-1] != "/")
- {
- urlOwner = urlOwner + "/";
- }
-
- var urlName = urlOwner + "namehistory/";
- var urlPost = urlOwner + "posthistory/";
- var labelName = "Name History";
- var labelPost = "Post History";
- var arrUrl = ["", urlName, urlPost];
- var arrLbl = ["", labelName, labelPost];
-
- var divOuter = document.querySelector(".profile_item_links");
- if (divOuter != null)
- {
- for (var i = 0; i < arrUrl.length; i++)
- {
- var div = document.createElement("div");
- if (div != null)
- {
- div.className = "profile_count_link";
- div.innerHTML = '<a href="' + arrUrl[i] + '"><span class="count_link_label">'
- + arrLbl[i] + '</span> <span class="profile_count_link_total"> </span></a>';
-
- divOuter.appendChild(div);
- }
- }
- }
-
- // preview bg in profile
- function previewBg()
- {
- var bg = getQueryByName("previewbg");
- if (bg != "")
- {
- var divBg = document.querySelector("div.has_profile_background");
- if (divBg != null)
- {
- divBg.style.backgroundImage = "url('" + bg + "')";
- }
-
- var divBgIn = document.querySelector("div.profile_background_image_content");
- if (divBgIn != null)
- {
- divBgIn.style.backgroundImage = "url('" + bg + "')";
- }
- }
- }
- attachOnLoad(previewBg);
-
- // Focus profile
- if (isLoggedIn)
- {
- var eleTarget = document.querySelector(".no_header");
- if (eleTarget != null)
- {
- eleTarget.scrollIntoView();
- }
- }
- }
- function linkProfileReady()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+(\/?\?.*)?\/?$/i;
-
- if (patt.test(url))
- {
- attachOnReady(linkProfile);
- }
- }
- if (enableLinkProfile) linkProfileReady();
-
- /** Set all checkbox to checked
- */
- function setAllCheckBox()
- {
- var eles = document.querySelectorAll("#market_buynow_dialog_accept_ssa"
- + ", #market_sell_dialog_accept_ssa, #accept_ssa, #verify_country_only, #market_buyorder_dialog_accept_ssa");
- for (var i = 0; i < eles.length; i++)
- {
- eles[i].checked = true;
- }
- }
- function setAllCheckBoxReady()
- {
- var url = document.documentURI;
- var pattMarket = /^http[s]?:\/\/steamcommunity.com\/market\/listings\/[0-9]+/i;
- var pattInv = /^http[s]?:\/\/steamcommunity.com\/(id|profiles)\/[^\/]+\/inventory/i;
- var pattCart = /^http[s]?:\/\/store.steampowered.com\/checkout/i;
-
- if (pattMarket.test(url) || pattInv.test(url) || pattCart.test(url))
- {
- attachOnReady(setAllCheckBox);
- }
- }
- if (enableSetAllCheckBox) setAllCheckBoxReady();
-
- /** Scroll store page to easy view
- */
- function storeFocus()
- {
- // Store focus
- {
- var eleAccount = document.querySelector("#account_pulldown");
- if (eleAccount != null)
- {
- var divHead = document.querySelector(".breadcrumbs > .blockbg, "
- + " .breadcrumbs > a, div.auction_block:nth-child(1), .market_listing_nav > a");
- if (divHead != null)
- {
- divHead.scrollIntoView();
- }
- }
- }
-
- // Click to select app name
- {
- var eleName = document.querySelector(".apphub_AppName, .pageheader");
- if (eleName != null)
- {
- eleName.addEventListener("click", function (e)
- {
- var ele = e.target;
- clickToSelect(ele);
- });
- }
- }
- }
- function storeFocusAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/(store.steampowered.com\/(app|sub|bundle)\/|steamcommunity.com\/(auction\/item\/|sharedfiles\/filedetails\/\?id=|market\/listings\/))/i;
-
- if (patt.test(url))
- {
- attachOnReady(storeFocus);
- }
- }
- if (enableStoreFocus) storeFocusAttach();
-
- function autoExploreQueue()
- {
- var url = document.documentURI;
- var pattApp = /^http[s]?:\/\/store.steampowered.com\/app/i;
- var pattExplore = /^http[s]?:\/\/store.steampowered.com\/\/?explore/i;
-
- // Auto explore queue in app
- if (pattApp.test(url))
- {
- GM_addStyle(
- " .sbh_autoQueueOption { float: right; padding-right: 3px; } "
- + " #sbh_autoQueue { vertical-align: text-top; } "
- );
-
- // Clean url in next queue
- {
- var eleQueue = document.querySelector("#next_in_queue_form");
- if (eleQueue != null)
- {
- var action = eleQueue.getAttribute("action");
- if (action[action.length] != "/")
- {
- action += "/";
- eleQueue.setAttribute("action", action);
- }
- }
- }
-
- function autoQueue()
- {
- var tm = 3000;
- debug("AutoQueue: Next in " + tm + "ms");
- setTimeout(function ()
- {
- var eleCheck = document.querySelector("#sbh_autoQueue");
- if (eleCheck != null && eleCheck.checked)
- {
- var ele = document.querySelector(".btn_next_in_queue");
- if (ele != null)
- {
- GM_setValue("storeAutoQueueLast", getUnixTimestamp());
- ele.click();
- }
- }
- }, tm);
- }
-
- var eleDes = document.querySelector(".queue_controls_description");
- if (eleDes != null)
- {
- var eleSpan = document.createElement("span");
- eleSpan.classList.add("sbh_autoQueueOption");
-
- var eleInput = document.createElement("input");
- eleInput.id = "sbh_autoQueue";
- eleInput.setAttribute("type", "checkbox");
- eleInput.setAttribute("value", "auto");
-
- if (GM_getValue("storeAutoQueue", 0) == "true")
- {
- eleInput.checked = true;
-
- var ele = document.querySelector(".btn_next_in_queue");
- if (ele != null)
- {
- autoQueue();
- }
- }
-
- eleInput.addEventListener("click", function (e)
- {
- var ele = e.target;
- if (ele.checked)
- {
- GM_setValue("storeAutoQueue", "true");
- autoQueue();
- }
- else
- {
- GM_setValue("storeAutoQueue", "false");
- }
- });
-
- var eleLabel = document.createElement("label");
- eleLabel.setAttribute("for", "sbh_autoQueue");
- eleLabel.textContent = " Auto Explore Queue";
-
- eleSpan.appendChild(eleInput);
- eleSpan.appendChild(eleLabel);
- eleDes.appendChild(eleSpan);
- }
- else
- {
- // Session lost
-
- if (GM_getValue("storeAutoQueue", 0) == "true")
- {
- var aOwner = document.querySelector("#global_actions > .user_avatar");
- var isLoggedIn = aOwner != null;
-
- if (!isLoggedIn)
- {
- // Auto reload every 10s within 2 minutes
- var tmExpireShort = 120;
- var tmReloadShort = 10000;
-
- // Auto reload every 30s within 10 minutes
- var tmExpireLong = 600;
- var tmReloadLong = 30000;
-
- var tmReload = 0;
-
- var tmDiff = getUnixTimestamp() - GM_getValue("storeAutoQueueLast", 0);
- if (tmDiff < tmExpireShort)
- {
- tmReload = tmReloadShort;
- }
- else if (tmDiff < tmReloadLong)
- {
- tmReload = tmExpireLong;
- }
-
- if (tmReload > 0)
- {
- debug("AutoQueue: Refresh in " + tmReload + "ms");
- setTimeout(reload, tmReload);
- }
- }
- }
- }
- }
-
- // Auto explore queue in explore
- if (pattExplore.test(url))
- {
- if (GM_getValue("storeAutoQueue", 0) == "true")
- {
- var eleText = document.querySelector(".subtext");
- if (eleText != null && /[^-][0-9]/.test(eleText.textContent.trim()))
- {
- setTimeout(function ()
- {
- var ele = document.querySelector("#discovery_queue_start_link");
- if (!ele || ele.parentElement.style.display === "none")
- {
- ele = document.querySelector("#refresh_queue_btn");
- }
- if (ele)
- {
- ele.click();
- }
- }, 3000);
-
- setTimeout(function ()
- {
- var ele = document.querySelector(".newmodal_buttons > .btn_medium");
- if (ele)
- {
- ele.click();
-
- debug("AutoQueue: Refresh in " + 1000 + "ms");
- setTimeout(reload, 1000);
- }
- }, 10000);
-
- setTimeout(function ()
- {
- var ele = document.querySelector(".newmodal_buttons > .btn_medium");
- if (ele)
- {
- ele.click();
-
- debug("AutoQueue: Refresh in " + 1000 + "ms");
- setTimeout(reload, 1000);
- }
- }, 20000);
- }
- }
-
- }
- }
- function autoExploreQueueAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/\/?(app|explore)/i;
-
- if (patt.test(url))
- {
- // Fix for slow connection
- var didAutoExploreQueue = false;
- var attemptAutoExploreQueue = 0;
- var tmAutoExploreQueue = setInterval(function()
- {
- //console.log("AutoQueue: Slow connection");
- didAutoExploreQueue = true;
- autoExploreQueue();
- if (document.querySelector("#sbh_autoQueue") != null)
- {
- clearInterval(tmAutoExploreQueue);
- }
- else
- {
- if (attemptAutoExploreQueue > 10)
- {
- console.log("AutoQueue: Auto refresh from slow connection");
- reload();
- }
- attemptAutoExploreQueue++;
- }
- }, 5000);
- attachOnReady(function()
- {
- if (!didAutoExploreQueue || document.querySelector("#sbh_autoQueue") == null)
- {
- clearInterval(tmAutoExploreQueue);
- autoExploreQueue();
- }
- });
- }
- }
- if (enableAutoExploreQueue) autoExploreQueueAttach();
-
- function skipAgeCheck()
- {
- setTimeout(function ()
- {
- var ele = document.querySelector(".btns.agegate_text_container > a, #age_gate_btn_continue");
- if (ele != null)
- {
- ele.setAttribute("onclick", ele.getAttribute("onclick") + "; return false;");
- ele.click();
- }
-
- var eleAge = document.querySelector("#ageYear option[selected]");
- if (eleAge != null)
- {
- eleAge.removeAttribute("selected");
-
- var eleAgeFirst = document.querySelector("#ageYear option");
- eleAgeFirst.setAttribute("selected", "true");
-
- var eleBtn = document.querySelector(".btn_small[onclick^='DoAgeGateSubmit()']");
- if (eleBtn != null)
- {
- eleBtn.click();
- }
- }
-
- }, 3000);
- }
- function skipAgeCheckAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/(store\.steampowered\.com\/(app\/[0-9]+\/agecheck|agecheck\/app\/[0-9]+)|steamcommunity\.com\/app\/)/i;
-
- if (patt.test(url))
- {
- attachOnReady(skipAgeCheck);
- }
- }
- if (enableSkipAgeCheck) skipAgeCheckAttach();
-
- function skipLinkFilter()
- {
- setTimeout(function ()
- {
- var ele = document.querySelector("#proceedButton");
- if (ele != null)
- {
- ele.click();
- }
- }, 3000);
- }
- function skipLinkFilterAttach()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/linkfilter\//i;
-
- if (patt.test(url))
- {
- attachOnReady(skipLinkFilter);
- }
- }
- if (enableSkipLinkFilter) skipLinkFilterAttach();
-
- /** Hide queue in already owned in store page
- */
- function storeHideSection()
- {
- var divOwn = document.querySelector(".already_owned_actions");
- if (divOwn)
- {
- GM_addStyle(
- ".game_area_already_owned { margin-top: 10px !important; } "
- + ".queue_ctn { display: none; } "
- + "#review_container, .reviewPostedDescription, .review_box > .thumb { display: none; } "
- + ".sbh_margin_left { margin-left: 5px; } "
- + ".game_area_play_stats { min-height: 50px; } "
- + "#review_container { margin-top: 30px; } "
- + ".game_area_already_owned_btn a[href='http://store.steampowered.com/about/'] { display: none; } "
- );
-
- var html = ""
-
- html += ' <a class="btnv6_blue_hoverfade btn_medium right sbh_margin_left sbh_showFollow" onclick="'
- + "var sbhQueue = document.querySelector('.queue_ctn');"
- + "if (sbhQueue != null) { sbhQueue.style.display = 'inherit'; sbhQueue = null;} "
- + "this.style.display = 'none'; return false;"
- + '"><span>Follow</span></a> ';
-
- var divReview = document.querySelector("#review_container, .reviewPostedDescription");
- if (divReview != null)
- {
- html += ' <a class="btnv6_blue_hoverfade btn_medium right sbh_margin_left" onclick="'
- + "var sbhReview = document.querySelector('#review_container, .reviewPostedDescription'); "
- + "if (sbhReview != null) { sbhReview.style.display = 'inherit'; sbhReview = null; } "
- + "var sbhReviewThumb = document.querySelector('.review_box > .thumb'); "
- + "if (sbhReviewThumb != null) { sbhReviewThumb.style.display = 'inherit'; sbhReviewThumb = null; } "
- + "this.style.display = 'none'; return false;"
- + '"><span>Review</span></a> ';
- }
-
- divOwn.innerHTML += html;
-
- setTimeout(function()
- {
- var eleQueue = document.querySelector(".queue_ctn");
- if (eleQueue)
- {
- var eleIgnore = eleQueue.querySelector(".queue_btn_ignore .queue_btn_inactive:first-child");
- if (eleIgnore)
- {
- if (eleIgnore.style.display === "none")
- {
- eleQueue.style.display = 'inherit';
- var eleFollow = document.querySelector(".sbh_showFollow");
- if (eleFollow)
- {
- eleFollow.style.display = 'none';
- }
- }
- }
- }
- }, 500);
- }
- }
- function storeHideSectionReady()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/app\//i;
-
- if (patt.test(url))
- {
- attachOnReady(storeHideSection);
- }
- }
- if (enableStoreHideSection) storeHideSectionReady();
-
- /** Move sale section in main page
- */
- function moveSale()
- {
- var eleSpecial = document.querySelector(".home_page_content.special_offers");
- if (eleSpecial)
- {
- var eleFeature = document.querySelector(".home_cluster_ctn.home_ctn");
- if (eleFeature)
- {
- var eleMarketing = document.querySelector(".home_ctn.marketingmessage_area");
- if (eleMarketing)
- {
- insertBeforeElement(eleMarketing, eleFeature.firstElementChild);
- }
- insertBeforeElement(eleSpecial, eleFeature.firstElementChild);
- }
- }
- }
- function moveSaleReady()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/($|\?)/i;
-
- if (patt.test(url))
- {
- attachOnReady(moveSale);
- }
- }
- if (enableMoveSale) moveSaleReady();
-
- /** Move sale section in main page
- */
- function redirectToLogin()
- {
- var url = document.documentURI;
- var aOwner = document.querySelector("#global_actions > a.user_avatar");
- var isLoggedIn = aOwner != null;
-
- if (!isLoggedIn)
- {
- if (url.indexOf("/login/") > -1)
- {
- var eleRemember = document.querySelector("#remember_login");
- if (eleRemember)
- {
- eleRemember.checked = true;
- }
- }
- else
- {
- window.location = "https://steamcommunity.com/login/home/?goto=";
- }
- }
- }
- function redirectToLoginReady()
- {
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/steamcommunity.com\/(login\/home\/\?goto=)?$/i;
-
- if (patt.test(url))
- {
- attachOnReady(redirectToLogin);
- }
- }
- if (enableRedirectToLogin) redirectToLoginReady();
-
- // ===== End Main =====
-
- attachOnReady(function()
- {
- debugTime("ready");
-
- var url = document.documentURI;
- var patt = /^http[s]?:\/\/store.steampowered.com\/(app|sub|sale)\//i;
-
- if (patt.test(url))
- {
- // Fix price position in old ES
- {
- GM_addStyle
- (
- " .game_area_dlc_row, .tab_item { display: inherit !important; } "
- + " .game_purchase_action_bg { white-space: normal !important; } "
- + " .sbh_regional_container { min-width: 220px; } "
- + " .sbh_regional_container.sbh_regional_container_oldEs { right: 300px !important; } "
- );
-
- var time_fixPosEs = getUnixTimestamp();
- var tmId_fixPosEs = setInterval(function ()
- {
- if (getUnixTimestamp() - time_fixPosEs > 10)
- {
- clearInterval(tmId_fixPosEs);
- }
-
- var elesContainer = document.querySelectorAll(".es_regional_container");
- if (elesContainer.length > 0)
- {
- clearInterval(tmId_fixPosEs);
-
- for (var i = 0; i < elesContainer.length; i++)
- {
- elesContainer[i].classList.add("sbh_regional_container");
- }
-
- if (document.querySelector(".es_regional_icon"))
- {
- // New ES
- }
- else
- {
- // Old ES
-
- for (var i = 0; i < elesContainer.length; i++)
- {
- elesContainer[i].classList.add("sbh_regional_container_oldEs");
- }
-
- var elesOrg = document.querySelectorAll(".game_purchase_action .discount_original_price");
- for (var i = 0; i < elesOrg.length; i++)
- {
- if (elesOrg[i].style.position == "relative")
- {
- elesOrg[i].style.position = "";
- }
- }
-
- var elesPct = document.querySelectorAll(".game_purchase_action .discount_pct");
- for (var i = 0; i < elesPct.length; i++)
- {
- if (elesPct[i].parentElement.style.paddingLeft == "25px")
- {
- elesPct[i].style.marginLeft = "-25px";
- elesPct[i].style.marginRight = "25px";
- }
- }
- }
- }
- }, 300);
- }
- }
- });
-
- attachOnLoad(function()
- {
- debugTime("load");
-
- // Set currency for SIH
- {
- setTimeout(function()
- {
- var currency = marketCountries[GM_getValue("storeCountry", "US")] || "1";
- var clientScript = " currencyId = " + currency + "; ";
-
- var eleClientScript = document.createElement("script");
- eleClientScript.innerHTML = clientScript;
- document.head.appendChild(eleClientScript);
- }, 500);
- }
-
- // Fix css for older browser
- GM_addStyle(".carousel_container .arrow.left > div { background-position: 23px 0px; } ");
-
- // Fix css for market transaction display
- GM_addStyle("#market_transactions .transactionRowTitle { display: inline-block; padding-right: 5px; }");
-
- // Fix css for ES tag
- GM_addStyle(".recent_game .game_info .game_info_cap img.es_overlay { width: auto; }");
-
- });
-
- function testEvent()
- {
- /*
- document.querySelector("#header_notification_link").addEventListener("DOMCharacterDataModified", function (e) {
- debugTime("DOMCharacterDataModified");
- });
-
- document.querySelector("#header_notification_link").addEventListener("DOMSubtreeModified", function (e) {
- debugTime("DOMSubtreeModified");
- });
-
- {
- // select the target node
- var target = document.querySelector("#header_notification_link");
-
- // create an observer instance
- var observer = new MutationObserver(function(mutations)
- {
- mutations.forEach(function(mutation)
- {
- debugTime("mutation: " + mutation.type);
- });
- });
-
- // pass in the target node, as well as the observer options
- observer.observe(target,
- {
- childList: true,
- attributes: true,
- characterData: true,
- subtree: true,
- attributeOldValue: true,
- characterDataOldValue: true,
- });
-
- // later, you can stop observing
- //observer.disconnect();
- }
- */
-
- }
- attachOnLoad(testEvent);
-
-
-
- })();
-
- // End