- // ==UserScript==
- // @name (Steam 价格转换器)Steam Price Exchanger
- // @version 0.3.2.0
- // @description Exchange price on steam and community
- // @author lzt,coralfox
- // @match *://*.steampowered.com/*
- // @match *://*.steamcommunity.com/*
- // @grant GM_xmlhttpRequest
- // @grant GM_setValue
- // @grant GM_getValue
- // @grant unsafeWindow
- // @grant window
- // @connect api.augmentedsteam.com
- // @namespace steam_price_exchanger
- // @license MIT
- // ==/UserScript==
-
- (function() {
- "use strict";
-
- // Your code here...
-
- var style = document.createElement("style");
- style.type = "text/css";
- var text = document.createTextNode(".tab_item_discount {width: 180px;}");
- style.appendChild(text);
- var head = document.getElementsByTagName("head")[0];
- head.appendChild(style);
-
- console.log(GM_getValue("timestamp"))
- if (GM_getValue("timestamp") == undefined) {GM_setValue("timestamp", 0);console.log("set timestamp to 0")};
- unsafeWindow.rub = {"rate": GM_getValue("rub"), "lock": 0};
- unsafeWindow.ars = {"rate": GM_getValue("ars"), "lock": 0};
-
- function initobserver (rate, unit) {
- var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
- var target = document.body;
- var observer = new MutationObserver(function(mutations) {
- mutations.forEach(function(mutation) {
- unsafeWindow.fillprice(rate, unit, 500)
- });
- });
- var config = { attributes: true, childList: true, characterData: true, subtree: true}
- observer.observe(target, config);
- }
-
- unsafeWindow.fillprice = function (rate, unit, delay){
- if (rate["lock"] == 1) {return -1};
- rate["lock"] = 1;
- var lists = document.evaluate("//*[contains(text(), '" + unit + "')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
- var re = new RegExp(unit == "ARS"?"ARS\\$?\\s*[0-9.,]+":"[0-9.,]+\\s*pуб.?", "ig");
- for(let i = 0; i < lists.snapshotLength; i++) {
- var item = lists.snapshotItem(i)
- if (item.firstChild.nodeValue == null) {continue};
- if (item.firstChild.nodeValue.search("¥") != -1) {continue};
- if (item.classList.contains("es-regprice") & item.classList.contains("es-flag")) {continue};
- if (item.parentNode.classList.contains("es-flag--cn")) {continue};
-
- var s = item.firstChild.nodeValue.match(re)
- if (s != null) {
- for(let j = 0; j < s.length; j++) {
- var price = s[j].replace(".", "");
- price = price.replace(",", ".");
- price = "¥" + parseInt(parseFloat(price.match(/[0-9.]+/))*rate["rate"]).toString();
- if ((item.classList.contains("col") & item.classList.contains("search_price")) |
- item.nodeName == "STRIKE") {
- item.firstChild.nodeValue = item.firstChild.nodeValue.replace(s[j], s[j].replace(" ", "") + "(" + price + ")").trim();
- }else {
- item.firstChild.nodeValue = item.firstChild.nodeValue.replace(s[j], s[j] + "(" + price + ")").trim()
- }
- }
- }
- }
- lists = document.getElementsByClassName("col search_price discounted");
- for (let i = 0; i < lists.length; i++) {
- if (lists[i].childNodes[3].nodeValue == null) {continue};
- if (lists[i].childNodes[3].nodeValue.search("¥") != -1) {continue};
- if (lists[i].childNodes[3].nodeValue.search(unit) == -1) {continue};
-
- var price = lists[i].childNodes[3].nodeValue.replace(".", "");
- price = price.replace(",", ".");
- price = "¥" + parseInt(parseFloat(price.match(/[0-9.]+/))*rate["rate"]).toString();
- lists[i].childNodes[3].nodeValue = lists[i].childNodes[3].nodeValue.replace(" ", "").trim() + "(" + price + ")";
- }
- if (unit == "ARS") {setTimeout("window.ars['lock'] = 0", delay)}
- else{setTimeout("window.rub['lock'] = 0", delay)}
- }
-
-
- if ((new Date().getTime() - GM_getValue("timestamp")) >= 3600000*6 |
- typeof(unsafeWindow.rub) == undefined |
- typeof(unsafeWindow.ars) == undefined) {
- console.log("update rates")
- GM_xmlhttpRequest({
- method: "get",
- url: "https://api.augmentedsteam.com/v01/rates/?to=CNY",
- responseType: "json",
- onload: function(r) {
- unsafeWindow.ars["rate"] = r.response["data"]["ARS"]["CNY"];
- unsafeWindow.rub["rate"] =r.response["data"]["RUB"]["CNY"];
-
- console.log(unsafeWindow.ars["rate"] + " ARS/CNY");
- console.log(unsafeWindow.rub["rate"] + " RUB/CNY");
- GM_setValue("rub", unsafeWindow.rub["rate"]);
- GM_setValue("ars", unsafeWindow.ars["rate"]);
- GM_setValue("timestamp", new Date().getTime());
-
- unsafeWindow.fillprice(unsafeWindow.rub, "pуб", 0);
- unsafeWindow.fillprice(unsafeWindow.ars, "ARS", 0);
- initobserver(unsafeWindow.rub, "pуб");
- initobserver(unsafeWindow.ars, "ARS");
- }
- });
- }else{
- unsafeWindow.fillprice(unsafeWindow.rub, "pуб", 50);
- unsafeWindow.fillprice(unsafeWindow.ars, "ARS", 50);
- initobserver(unsafeWindow.rub, "pуб");
- initobserver(unsafeWindow.ars, "ARS");
- }
-
-
- })();