steam show Community Items beta

add Community Items images

目前为 2023-04-10 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name steam show Community Items beta
  3. // @description add Community Items images
  4. // @namespace steam_Items_images
  5. // @author Covenant
  6. // @version 1.0.5
  7. // @license MIT
  8. // @homepage
  9. // @match https://store.steampowered.com/*
  10. // @match https://steamcommunity.com/*
  11. // @match https://steamdb.info/*
  12. // @match https://www.steamcardexchange.net/*
  13. // @icon data:image/svg+xml;base64,PHN2ZyB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMjAgMTYiIHdpZHRoPSI0MCIgaGVpZ2h0PSIzMiI+CjxjaXJjbGUgc3Ryb2tlLXdpZHRoPSIxLjVweCIgY3k9IjQuNSIgY3g9IjE1LjUiIHI9IjMuNzUiIGNsYXNzPSJzdHJva2UiIHN0cm9rZT0iI0JCQkJCQiIgZmlsbD0ibm9uZSI+PC9jaXJjbGU+CjxjaXJjbGUgY3g9IjE1LjUiIGN5PSI0LjUiIHI9IjEuODU1IiBjbGFzcz0iZmlsbCIgZmlsbD0iI0JCQkJCQiI+PC9jaXJjbGU+CjxwYXRoIGQ9Ik0xMS42NTYgNC4yTDEyLjc1IDcuMTRsMi44NjUgMS4zODctNS4xMyAzLjg1My0uODY3LTIuMDktMS43NzMtLjk0MnoiIGNsYXNzPSJmaWxsIiBmaWxsPSIjQkJCQkJCIj48L3BhdGg+CjxjaXJjbGUgY3k9IjEyLjUiIGN4PSI3LjUiIHI9IjMiIGNsYXNzPSJzdHJva2UiIHN0cm9rZT0iI0JCQkJCQiIgZmlsbD0ibm9uZSI+PC9jaXJjbGU+CjxyZWN0IHRyYW5zZm9ybT0ibWF0cml4KC45MjQzMiAuMzgxNiAtLjM4NzI3IC45MjE5NiAwIDApIiByeT0iMS41MjYiIHdpZHRoPSI5LjQ3NyIgeT0iNy4xNTUiIHg9IjMuNzY3IiBoZWlnaHQ9IjMuMDUzIiBjbGFzcz0iZmlsbCIgZmlsbD0iI0JCQkJCQiI+PC9yZWN0Pgo8L3N2Zz4=
  14. // @grant GM_setValue
  15. // @grant GM_getValue
  16. // @grant GM_registerMenuCommand
  17. // @grant GM_xmlhttpRequest
  18. // @connect www.steamcardexchange.net
  19. // @connect steamcommunity.com
  20. // @run-at document-end
  21. // @noframes
  22. // ==/UserScript==
  23. var timeoutID;
  24. var is_Community_Items_Exist=true;
  25. var is_avatar_Exist=true;
  26. var ary_lang_steam=["english","japanese","latam","bulgarian","schinese","tchinese","czech","danish","dutch","finnish","french","german","greek","hungarian","italian","koreana","norwegian","polish","brazilian","portuguese","romanian","russian","spanish","swedish","thai","turkish","ukrainian","vietnamese"];
  27. var ary_currency_steam=["USD","GBP","EUR","CHF","RUB","PLN","BRL","JPY","SEK","IDR","MYR","BWP","SGD","THB","VND","KRW","TRY","UAH","MXN","CAD","AUD","NZD","CNY","INR","CLP","PEN","COP","ZAR","HKD","TWD","SAR","AED"];
  28. var akamaihd="steamcdn-a.akamaihd.net";
  29. var steamstatic="cdn.cloudflare.steamstatic.com";
  30. var steamcommunity="steamcommunity.com";
  31. var profilebackground="/economy/profilebackground";
  32. var public_images="/steamcommunity/public/images";
  33. var priceoverview="https://steamcommunity.com/market/priceoverview/";
  34. var s_normal_Cards="&category_753_cardborder[]=tag_cardborder_0#p1_name_asc";
  35. var s_foil_cards="&category_753_cardborder[]=tag_cardborder_1#p1_name_asc";
  36. var s_p_background="&category_753_item_class[]=tag_item_class_3#p1_name_asc";
  37. var s_emotion="&category_753_item_class[]=tag_item_class_4#p1_name_asc";
  38. var s_sale_items="&category_753_item_class[]=tag_item_class_10#p1_name_asc";
  39. var gm_currency=GM_getValue('steam_currency', 1);
  40. var gm_steamcommunity_item_json=GM_getValue('load_steamcommunity_item_json', false);
  41. var url_steam_app;
  42. var url_category_753_Game;
  43. var url_avatar;
  44. var url_points_shop;
  45. var url_curatorsreviewing;
  46. var url_cardexchange;
  47. var url_steamdb_app;
  48. var url_steamdb_communityitems;
  49. var url_steamdb_achievements;
  50. function create_style(innerText,class_name){
  51. var style=document.createElement("style");
  52. if(Array.isArray(class_name)){
  53. for(let i=0; i<class_name.length; i++){style.classList.add(class_name[i]);}
  54. }
  55. else if(typeof class_name==='string'){style.classList.add(class_name);}
  56. style.textContent=innerText;
  57. style.title="user_gm_css";
  58. document.body.appendChild(style);
  59. return style;
  60. }
  61. var style_font_face=create_style("@font-face{font-family: 'color_emoji';src: local('Segoe UI Emoji'),local('Noto Color Emoji');}\n",["user_gm_css","font_face","css_steam_Items_images"]);
  62. var font_family_steam_main="font-family: 'Motiva Sans','color_emoji','Noto Sans CJK JP','Meiryo','Yu Gothic','Microsoft JhengHei','old_emoji',sans-serif;";
  63. var font_family_steam_info="font-family: Arial, Helvetica,'color_emoji','Noto Sans CJK JP','Meiryo','Yu Gothic','Microsoft JhengHei','old_emoji',sans-serif;";
  64. var style=create_style(".user_div_steam_main{"+font_family_steam_main+"font-weight: 100;}\n",["user_gm_css","css_steam_Items_images"]);
  65. style.textContent+=".user_div_steam_info{"+font_family_steam_info+"font-weight: 100;}\n";
  66. style.textContent+=".user_newmodal_background{position: fixed;z-index: 900;background: #000000;opacity: 0.8;top: 0;right: 0;bottom: 0;left: 0;}\n";
  67. style.textContent+=".user_btn_steam{min-width: 2.5rem;margin-right: 2px;margin-left: 3px;margin-top: 1px;margin-bottom: 1px;padding-left: 5px;padding-right: 5px;}\n";
  68. style.textContent+="a[class~='external'].external{background-position-x: right;background-position-y: center;background-repeat: no-repeat;background-size: 0.857em;padding-right: 1em;background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiPjxkZWZzPjxmaWx0ZXIgaWQ9ImRhcmtyZWFkZXItaW1hZ2UtZmlsdGVyIj48ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMC4yNDkgLTAuNjE0IC0wLjY3MiAwLjAwMCAxLjAzNSAtMC42NDYgMC4yODggLTAuNjY0IDAuMDAwIDEuMDIwIC0wLjYzNiAtMC42MDkgMC4yNTAgMC4wMDAgMC45OTQgMC4wMDAgMC4wMDAgMC4wMDAgMS4wMDAgMC4wMDAiIC8+PC9maWx0ZXI+PC9kZWZzPjxpbWFnZSB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIGZpbHRlcj0idXJsKCNkYXJrcmVhZGVyLWltYWdlLWZpbHRlcikiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaVZWUkdMVGdpUHo0S1BITjJaeUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lJSGRwWkhSb1BTSXhNaUlnYUdWcFoyaDBQU0l4TWlJZ2RtbGxkMEp2ZUQwaU1DQXdJREV5SURFeUlqNEtDVHgwYVhSc1pUNEtDUWxsZUhSbGNtNWhiQ0JzYVc1ckNnazhMM1JwZEd4bFBnb0pQSEJoZEdnZ1ptbHNiRDBpSXpNMll5SWdaRDBpVFRZZ01XZzFkalZNT0M0NE5pQXpMamcxSURRdU55QTRJRFFnTnk0emJEUXVNVFV0TkM0eE5rdzJJREZhVFRJZ00yZ3lkakZJTW5ZMmFEWldPR2d4ZGpKaE1TQXhJREFnTUNBeExURWdNVWd5WVRFZ01TQXdJREFnTVMweExURldOR0V4SURFZ01DQXdJREVnTVMweFdpSXZQZ284TDNOMlp6NEsiIC8+PC9zdmc+);}\n";
  69. function create_div(class_name,is_appendChild,node,refNode){
  70. let div=document.createElement("div");
  71. if(Array.isArray(class_name)){
  72. for(let i=0; i<class_name.length; i++){div.classList.add(class_name[i]);}
  73. }
  74. else if(typeof class_name==='string'){div.classList.add(class_name);}
  75. div.style.backgroundSize='contain';
  76. div.style.backgroundRepeat='no-repeat';
  77. div.lang='ja';
  78. if(is_appendChild){
  79. node.appendChild(div);
  80. }
  81. else{node.insertBefore(div, refNode);}
  82. return div;
  83. }
  84. var newmodal_background=create_div("user_newmodal_background",true,document.body);
  85. newmodal_background.style.setProperty('display','none');
  86. function create_a(text,url,class_name,is_appendChild,node,refNode){
  87. let anchor=document.createElement("a");
  88. anchor.href=url;
  89. anchor.innerText=text;
  90. anchor.title=text;
  91. if(Array.isArray(class_name)){
  92. for(let i=0; i<class_name.length; i++){anchor.classList.add(class_name[i]);}
  93. }
  94. else if(typeof class_name==='string'){anchor.classList.add(class_name);}
  95. anchor.target="_blank";
  96. if(is_appendChild){
  97. node.appendChild(anchor);
  98. }
  99. else{node.insertBefore(anchor, refNode);}
  100. return anchor;
  101. }
  102. function create_img(url,title,class_name,is_appendChild,node,refNode){
  103. let img=document.createElement('img');
  104. img.src=url;
  105. img.title=title;
  106. img.alt=title;
  107. if(Array.isArray(class_name)){
  108. for(let i=0; i<class_name.length; i++){img.classList.add(class_name[i]);}
  109. }
  110. else if(typeof class_name==='string'){img.classList.add(class_name);}
  111. if(is_appendChild){
  112. node.appendChild(img);
  113. }
  114. else{node.insertBefore(img, refNode);}
  115. return img;
  116. }
  117. function create_img_click(url,title,class_name,is_appendChild,node,refNode){
  118. let img=create_img(url,title,class_name,is_appendChild,node,refNode);
  119. img.width=54;
  120. img.addEventListener('click',() => {
  121. let img_tmp=img.cloneNode(true);
  122. img_tmp.style.setProperty('position','fixed');
  123. img_tmp.style.setProperty('left',"50%");
  124. img_tmp.style.setProperty('top',"50%");
  125. img_tmp.style.setProperty('transform',"translate(-50%,-50%)");
  126. img_tmp.style.setProperty('max-height',"95%");
  127. img_tmp.style.setProperty('z-index','1000');
  128. img_tmp.removeAttribute('width');
  129. newmodal_background.style.removeProperty('display');
  130. document.body.appendChild(img_tmp);
  131. img_tmp.addEventListener('click',() => {
  132. newmodal_background.style.setProperty('display','none');
  133. img_tmp.remove();
  134. });
  135. /*if(img.style.getPropertyValue('position')!="fixed"){
  136. img.style.setProperty('position','fixed');
  137. img.style.setProperty('left',"50%");
  138. img.style.setProperty('top',"50%");
  139. img.style.setProperty('transform',"translate(-50%,-50%)");
  140. img.style.setProperty('max-height',"95%");
  141. img.removeAttribute('width');
  142. newmodal_background.style.removeProperty('display');
  143. }
  144. else{
  145. img.style.removeProperty('position');
  146. img.style.removeProperty('left');
  147. img.style.removeProperty('top');
  148. img.style.removeProperty('transform');
  149. img.setAttribute('width', '54');
  150. newmodal_background.style.setProperty('display','none');
  151. }//*/
  152. });
  153. return img;
  154. }
  155. function create_btn(new_name,class_name,is_appendChild,node,refNode){
  156. let btn=document.createElement("button");
  157. btn.textContent=new_name;
  158. if(Array.isArray(class_name)){
  159. for(let i=0; i<class_name.length; i++){btn.classList.add(class_name[i]);}
  160. }
  161. else if(typeof class_name==='string'){btn.classList.add(class_name);}
  162. if(is_appendChild){
  163. node.appendChild(btn);
  164. }
  165. else{node.insertBefore(btn, refNode);}
  166. return btn;
  167. }
  168. function create_span(text,class_name,is_appendChild,node,refNode){
  169. let span=document.createElement("span");
  170. span.innerText=text;
  171. if(Array.isArray(class_name)){
  172. for(let i=0; i<class_name.length; i++){span.classList.add(class_name[i]);}
  173. }
  174. else if(typeof class_name==='string'){span.classList.add(class_name);}
  175. if(is_appendChild){
  176. node.appendChild(span);
  177. }
  178. else{node.insertBefore(span, refNode);}
  179. return span;
  180. }
  181. function create_br(is_appendChild,node,refNode){
  182. let br = document.createElement("br");
  183. if(is_appendChild){
  184. node.appendChild(br);
  185. }
  186. else{node.insertBefore(br, refNode);}
  187. return br;
  188. }
  189. function fn_gm_XMLHttpRequest(url,fn){
  190. GM_xmlhttpRequest({
  191. method: "GET",
  192. url: url,
  193. headers:{
  194. 'content-type': 'text/html; charset=UTF-8',
  195. 'user-agent':window.navigator.userAgent
  196. },
  197. onload: function (response){
  198. fn(response);
  199. /*console.log([
  200. "GM_xmlhttpRequest",
  201. response.status,
  202. response.statusText,
  203. response.readyState,
  204. response.responseHeaders,
  205. //response.responseText,
  206. response.finalUrl].join("\n")
  207. );//*/
  208. }
  209. });
  210. }
  211. function fn_url(url){
  212. let str_url=new URL(url);
  213. let params=new URLSearchParams(str_url.search);
  214. return [str_url,params];
  215. }
  216. //console.log("break");
  217. function steam_app_id(url){
  218. url=fn_url(url);
  219. let host=url[0].host;
  220. let pathname=url[0].pathname;
  221. let ary_pathname=pathname.split('/');
  222. if(url[0].host=="store.steampowered.com"){
  223. if(ary_pathname[1]=="app")return ary_pathname[2];
  224. else if(ary_pathname[1]=="api")return url[1].get('appids');
  225. }
  226. else if(url[0].host=="steamdb.info"){
  227. if(ary_pathname[1]=="app")return ary_pathname[2];
  228. }
  229. else if(url[0].host=="steamcommunity.com"){
  230. if(ary_pathname[1]=="app")return ary_pathname[2];
  231. if(ary_pathname[3]=="achievements"){//achievements
  232. if(!isNaN(ary_pathname[2])){return ary_pathname[2];}
  233. else{
  234. let gameLogo_a=document.querySelectorAll('div.gameLogo>a')[0];
  235. if(gameLogo_a!=undefined){return fn_url(gameLogo_a.href)[0].pathname.split('/')[2];}
  236. else{return null;}
  237. }
  238. }
  239. if(url[1].get('category_753_Game[]')!=null)return url[1].get('category_753_Game[]').replace(/tag_app_/i, '');//Community Market
  240. if(ary_pathname[3]=="753")return parseInt(ary_pathname[4],10);//Community Market item
  241. if(ary_pathname[3]=="gamecards")return parseInt(ary_pathname[4],10);//badge
  242. }
  243. else if(url[0].host=="www.steamcardexchange.net"){
  244. if(url[0].search.search(new RegExp("\\?gamepage-appid-", "i"))==0){
  245. return url[0].search.replace(/[^0-9.]/g, '').replace(/(\\..*?)\\..*/g, '$1');
  246. }
  247. }
  248. return null;
  249. }
  250. function fn_re_market_check(response){
  251. let dom=document.createRange().createContextualFragment(response.responseText);
  252. if(response.status==200){
  253. if(dom.querySelectorAll('div.market_sortable_column').length==0)is_Community_Items_Exist=false;
  254. let anchor=document.querySelectorAll('a.anchor_Items');
  255. for(let i = 0; i < anchor.length; i++){
  256. if(is_Community_Items_Exist){
  257. anchor[i].parentNode.classList.add('link_item');
  258. }
  259. else{anchor[i].style.display="none";}
  260. }
  261. anchor[0].parentNode.classList.add('checked_item');
  262. }
  263. else{//451
  264. console.log("market response.status: "+response.status+response.responseHeaders);
  265. }
  266. }
  267. function fn_re_avatar_check(response){
  268. if(response.status==200){
  269. if(response.finalUrl.search(new RegExp("/Avatar/List", "i"))==-1)is_avatar_Exist=false;
  270. let anchor=document.querySelectorAll('a.anchor_avatar')[0];
  271. if(is_avatar_Exist){
  272. anchor.parentNode.classList.add('link_avatar');
  273. }
  274. else{anchor.style.display="none";}
  275. anchor.parentNode.classList.add('checked_avatar');
  276. }
  277. else{//
  278. console.log("avatar response.status: "+response.status+response.responseHeaders);
  279. }
  280. }
  281. function fn_re_item(response){
  282. let dom=document.createRange().createContextualFragment(response.responseText);
  283. let url=fn_url(response.finalUrl);
  284. let appid=url[0].search.replace(/\?gamepage-appid-/i, '');
  285. if(response.status==200){
  286. let output=document.querySelectorAll('div.user_item')[0];
  287. let badge=Array.from(dom.querySelectorAll('div.badge>div>img'));//badge
  288. for(let j=0; j<badge.length; j++){
  289. create_img_click(badge[j].src.replace(akamaihd, steamstatic),'badge',null,true,output);
  290. }
  291. create_br(true,output);
  292. let ary_img=Array.from(dom.querySelectorAll('div.emoticon>div>img'));//emoticon
  293. ary_img=ary_img.concat(Array.from(dom.querySelectorAll('div.background>div>a>img')));
  294. for(let j=0; j<ary_img.length; j++){
  295. if(ary_img[j].src.search(new RegExp("/economy/emoticon", "i"))==-1){
  296. let img_url=ary_img[j].src.replace(akamaihd, steamstatic);
  297. img_url=img_url.replace(steamcommunity, steamstatic);
  298. img_url=img_url.replace(profilebackground, public_images);
  299. create_img_click(img_url,'',null,true,output);
  300. }
  301. }
  302. create_br(true,output);
  303. let ary_animated=Array.from(dom.querySelectorAll('div.avataranimated>div>img.image-animated'));//animated
  304. ary_animated=ary_animated.concat(Array.from(dom.querySelectorAll('div.sticker>div>img.image-animated')),Array.from(dom.querySelectorAll('div.animated>div>a>img')));
  305. ary_animated=ary_animated.concat(Array.from(dom.querySelectorAll('div.minibg>div>img')),Array.from(dom.querySelectorAll('div.aframe>div>img.image-animated')));
  306. for(let j=0; j<ary_animated.length; j++){
  307. if(true){
  308. create_img_click(ary_animated[j].src.replace(akamaihd, steamstatic),'',null,true,output);
  309. }
  310. }
  311. let href_booster=dom.querySelectorAll('div.booster>div>div>a')[0].href;
  312. let card=dom.querySelectorAll('div.card>div>a>img');
  313. let market_hash_name=href_booster.replace(new RegExp("https://steamcommunity.com/market/listings/753/", "i"), '');
  314. create_a("booster "+6000/(card.length/2),href_booster,["linkbar","booster"],true,output);
  315. if(gm_steamcommunity_item_json)fn_gm_XMLHttpRequest(priceoverview+"?appid=753&market_hash_name="+market_hash_name+"&currency="+gm_currency,fn_re_json_priceoverview);
  316. console.log("fn_re_item 200");
  317. }
  318. else{//
  319. console.log("item response.status: "+response.status+response.responseHeaders);
  320. }
  321. }
  322. function fn_re_avatar(response){
  323. let dom=document.createRange().createContextualFragment(response.responseText);
  324. let url=fn_url(response.finalUrl);
  325. if(response.status==200){
  326. let output=document.querySelectorAll('div.user_item')[0];//console.log(response.responseText);
  327. let avatarBlockFull=Array.from(dom.querySelectorAll('div#avatarBlockFull>a>img'));
  328. for(let j=0; j<avatarBlockFull.length; j++){
  329. let img_url=avatarBlockFull[j].src;
  330. create_img_click(img_url,'',null,true,output);
  331. }
  332. create_br(true,output);
  333. console.log("fn_re_avatar 200");
  334. }
  335. else{//
  336. console.log("avatar response.status: "+response.status+response.responseHeaders);
  337. }
  338. }
  339. function fn_re_json_priceoverview(response){
  340. let output;
  341. if(document.location.host=="steamcommunity.com")output=document.querySelectorAll('div#largeiteminfo_item_type')[0];
  342. else if(document.location.host=="store.steampowered.com")output=document.querySelectorAll('a.booster')[0];
  343. else if(document.location.host=="www.steamcardexchange.net")output=document.querySelectorAll('div.game-title>h1')[0];
  344. if(response.status==200){
  345. let url=fn_url(response.finalUrl);
  346. let json=JSON.parse(response.responseText);
  347. let lowest_price=json['lowest_price'];
  348. output.innerText+=" "+lowest_price;
  349.  
  350. }
  351. else{//
  352. console.log("json_render response.status: "+response.status+response.responseHeaders);
  353. create_span(" response_status: "+response.status,"response_status",true,output);
  354. }
  355. }
  356. function fn_re_json_render(response){
  357. let output;
  358. if(document.location.host=="steamcommunity.com")output=document.querySelectorAll('div#largeiteminfo_game_info')[0];
  359. else if(document.location.host=="store.steampowered.com")output=document.querySelectorAll('div.user_item')[0];
  360. else if(document.location.host=="www.steamcardexchange.net")output=document.querySelectorAll('div.game-title')[0];
  361. if(response.status==200){
  362. let url=fn_url(response.finalUrl);
  363. let json=JSON.parse(response.responseText);
  364. let text=json['results_html'];
  365. let results_html=document.createRange().createContextualFragment(text);
  366. let market_listing_price=results_html.querySelectorAll('span.market_listing_price');
  367. for(let i=0; i<market_listing_price.length; i++){
  368. output.appendChild(market_listing_price[i]);
  369. }
  370. }
  371. else{//
  372. console.log("json_render response.status: "+response.status+response.responseHeaders);
  373. create_span(" response_status: "+response.status,"response_status",true,output);
  374. }
  375. }
  376. function main_01(game_meta_data,appid){
  377. var tmp=document.querySelectorAll('div.Community_Items')[0];//old script
  378. if(tmp==undefined){
  379. var category_block=document.querySelectorAll('div#category_block')[0];
  380. var div_item_link=create_div(['block',"user_div_steam_info","Community_Items"],false,game_meta_data[0],category_block);
  381. var a_avatar=create_a("Avatar",url_avatar,['linkbar',"anchor_avatar"],true,div_item_link);
  382. var a_market=create_a("Community Market",url_category_753_Game,['linkbar',"anchor_Items"],true,div_item_link);
  383. var a_points=create_a("Points Shop",url_points_shop,['linkbar',"anchor_Items"],true,div_item_link);
  384. var a_steamcardexchange=create_a("steamcardexchange",url_cardexchange,['linkbar',"anchor_Items","external"],true,div_item_link);
  385. var a_steamdb=create_a("steamdb/communityitems",url_steamdb_communityitems,['linkbar',"anchor_Items","external"],true,div_item_link);
  386. div_item_link.style.backgroundImage="url('https://cdn.cloudflare.steamstatic.com/steam/apps/"+appid+"/page_bg_generated_v6b.jpg')";
  387. div_item_link.classList.add('link_dev');
  388. fn_gm_XMLHttpRequest(url_category_753_Game,fn_re_market_check);
  389. fn_gm_XMLHttpRequest(url_avatar,fn_re_avatar_check);
  390. }
  391. }
  392. function main_02(){
  393. var div_Community_item=document.querySelectorAll('div.Community_Items')[0];
  394. if(div_Community_item.classList.contains('checked_item')&&div_Community_item.classList.contains('checked_avatar')){
  395. window.clearInterval(timeoutID);
  396. if(div_Community_item.classList.contains('link_item'))fn_gm_XMLHttpRequest(url_cardexchange,fn_re_item);
  397. if(div_Community_item.classList.contains('link_avatar'))fn_gm_XMLHttpRequest(url_avatar,fn_re_avatar);//page dont load
  398. }
  399. }
  400. function main_inventory(){
  401. let econ_tag_filter_checkbox=document.querySelectorAll("input[type='checkbox'].econ_tag_filter_checkbox");
  402. for(let i=0; i<econ_tag_filter_checkbox.length; i++){
  403. let tag_name=econ_tag_filter_checkbox[i].getAttribute("tag_name");
  404. if(tag_name.search(/app_/i)==0&&!econ_tag_filter_checkbox[i].classList.contains('done')){
  405. let appid=tag_name.replace("app_","");
  406. create_a("Market","https://steamcommunity.com/market/search?appid=753&category_753_Game[]=tag_app_"+appid+"#p1_name_asc",["btnv6_blue_hoverfade","user_btn_steam"],true,econ_tag_filter_checkbox[i].parentNode);
  407. create_a("steamcardexchange","https://www.steamcardexchange.net/index.php?gamepage-appid-"+appid,["btnv6_blue_hoverfade","user_btn_steam","external"],true,econ_tag_filter_checkbox[i].parentNode);
  408. econ_tag_filter_checkbox[i].classList.add("done");
  409. }
  410. }
  411. }
  412. function fn_steam_url(appid){
  413. url_steam_app="https://store.steampowered.com/app/"+appid;
  414. url_category_753_Game="https://steamcommunity.com/market/search?appid=753&category_753_Game[]=tag_app_"+appid+"#p1_name_asc";
  415. url_avatar="https://steamcommunity.com/ogg/"+appid+"/Avatar/List";
  416. url_points_shop="https://store.steampowered.com/points/shop/app/"+appid;
  417. url_curatorsreviewing="https://store.steampowered.com/curators/curatorsreviewing/?appid="+appid;
  418. url_cardexchange="https://www.steamcardexchange.net/index.php?gamepage-appid-"+appid;
  419. url_steamdb_app="https://steamdb.info/app/"+appid+"/";
  420. url_steamdb_communityitems="https://steamdb.info/app/"+appid+"/communityitems/";
  421. url_steamdb_achievements="https://steamdb.info/app/"+appid+"/stats/";
  422. }
  423. (function(){//main
  424. 'use strict';
  425. let url=fn_url(document.location);
  426. let appid=steam_app_id(document.location);//document.location.host+document.location.pathname+document.location.search+document.location.hash
  427. fn_steam_url(appid);
  428. let lang=document.documentElement.lang;
  429. GM_registerMenuCommand("load json price"+(gm_steamcommunity_item_json?"✔️":"❌"), () => {
  430. GM_setValue('load_steamcommunity_item_json',!gm_steamcommunity_item_json);
  431. });
  432. console.log("steam: "+appid+" "+url[0].host);
  433. if(url[0].host=="store.steampowered.com"){
  434. let game_meta_data=document.querySelectorAll('div.game_meta_data');//steam game page
  435. if(game_meta_data.length>0){
  436. window.setTimeout(( () => main_01(game_meta_data,appid) ), 100);//old script
  437. let div_item=create_div(['block',"user_div_steam_info","user_item"],true,game_meta_data[0]);
  438. timeoutID = window.setInterval(( () => main_02()), 1000);//show item image
  439. let div_curators=create_div(['block',"user_div_steam_info","user_curators"],true,game_meta_data[0]);
  440. create_a("curators",url_curatorsreviewing,"linkbar",true,div_curators);
  441. }
  442. if(url[0].pathname=="/curators/curatorsreviewing/"){//steam curatorsreviewing page
  443. let page_content=document.querySelectorAll('div.light_container>div.page_content');
  444. let div_lang=create_div(["breadcrumbs","user_div_steam_main"],false,page_content[0],page_content[0].firstChild);
  445. for(let i=0; i<ary_lang_steam.length; i++){
  446. let anchor_lang=create_a(ary_lang_steam[i],"#","lang",true,div_lang);
  447. anchor_lang.setAttribute("onclick","ChangeLanguage('"+ary_lang_steam[i]+"'); return false;");
  448. create_span(" / ","breadcrumb_separator",true,div_lang);
  449. }
  450. }
  451. }
  452. else if(url[0].host=="steamcommunity.com"&&document.querySelectorAll('div.error_ctn')[0]==undefined){
  453. let div_1=document.querySelectorAll('div.market_search_results_header>div')[0];//market/search
  454. if(div_1!=undefined){
  455. create_a(appid,url_steam_app,"market_searchedForTerm",true,div_1);
  456. create_a("steamdb",url_steamdb_communityitems,["market_searchedForTerm","external"],true,div_1);
  457. create_a("steamcardexchange",url_cardexchange,["market_searchedForTerm","external"],true,div_1);
  458. create_a("Normal Cards","https://"+url[0].host+url[0].pathname+url[0].search+s_normal_Cards,"market_searchedForTerm",true,div_1);
  459. create_a("Foil Cards","https://"+url[0].host+url[0].pathname+url[0].search+s_foil_cards,"market_searchedForTerm",true,div_1);
  460. create_a("Profile Background","https://"+url[0].host+url[0].pathname+url[0].search+s_p_background,"market_searchedForTerm",true,div_1);
  461. create_a("Emotion","https://"+url[0].host+url[0].pathname+url[0].search+s_emotion,"market_searchedForTerm",true,div_1);
  462. create_a("Sale Items","https://"+url[0].host+url[0].pathname+url[0].search+s_sale_items,"market_searchedForTerm",true,div_1);
  463. }
  464. if(url[0].pathname.search(new RegExp("/market/listings/", "i"))==0){//market/listings
  465. let div_2=document.querySelectorAll('div.market_listing_nav')[0];
  466. let div_3=document.querySelectorAll('div#mainContents')[0];
  467. let app_id=parseInt(url[0].pathname.replace(new RegExp("/market/listings/", "i"), ''));
  468. let market_hash_name=url[0].pathname.replace(new RegExp("/market/listings/"+app_id+"/", "i"), '');
  469. create_a(appid,url_steam_app,["btn_green_white_innerfade","user_btn_steam"],true,div_2);
  470. create_a("steamdb",url_steamdb_communityitems,["btn_green_white_innerfade","user_btn_steam","external"],true,div_2);
  471. create_a("steamcardexchange",url_cardexchange,["btn_green_white_innerfade","user_btn_steam","external"],true,div_2);
  472. create_a("priceoverview",priceoverview+"?appid="+app_id+"&market_hash_name="+market_hash_name+"&currency="+gm_currency,["btn_green_white_innerfade","user_btn_steam"],true,div_2);
  473. let a_render=create_a("render?currency="+gm_currency+"&format=json","https://"+url[0].host+url[0].pathname+"/render?start=0&count=10&currency="+gm_currency+"&language=english&format=json",["btn_green_white_innerfade","user_btn_steam"],true,div_2);
  474. a_render.title="You have made too many requests. Please wait and try your request again later.";
  475. if(gm_steamcommunity_item_json)fn_gm_XMLHttpRequest(priceoverview+"?appid="+app_id+"&market_hash_name="+market_hash_name+"&currency="+gm_currency,fn_re_json_priceoverview);
  476. var anchor=document.querySelectorAll('div.market_listing_nav>a');
  477. for(let i=0; i<anchor.length; i++){
  478. if(anchor[i].href.search(new RegExp("category_753_Game", "i"))!=-1){
  479. anchor[i].href+="#p1_name_asc";
  480. break;
  481. }
  482. }
  483. for(let i=0; i<ary_currency_steam.length; i++){
  484. let btn_tmp=create_btn(ary_currency_steam[i],["btnv6_blue_hoverfade","user_btn_steam"],true,div_3);
  485. btn_tmp.addEventListener('click',() => {
  486. GM_setValue('steam_currency', i+1);
  487. });
  488. }
  489. }
  490. if(url[0].pathname.search(/\/stats\/\d+\/achievements/i)==0){//achievements /stats/\d+/achievements
  491. let div_tab=document.querySelectorAll('div#mainContents>div#tabs')[0];
  492. if(div_tab!=undefined){
  493. let div_achievements=create_div(["tabOff","user_div_steam_info"],true,div_tab);
  494. create_a("steamdb achievements",url_steamdb_achievements,["steamdb","external"],true,div_achievements);
  495. }
  496. }
  497. let div_profile_small_header_text=document.querySelectorAll('div.profile_small_header_text')[0];//profile game badge
  498. if(div_profile_small_header_text!=undefined){
  499. create_span("🛍️","profile_small_header_arrow",true,div_profile_small_header_text);
  500. create_a("Community Market",url_category_753_Game,"anchor",true,div_profile_small_header_text);
  501. }
  502. if(url[0].pathname.search(/\/profiles\/\d+\/gamecards/i)==0){//profiles/\d+/gamecards
  503. let gamecard=document.querySelectorAll('img.gamecard');
  504. if(gamecard.length>0)document.querySelectorAll('div.badge_title')[0].innerText+=" ["+6000/gamecard.length+"]";
  505. }
  506. if(url[0].pathname.search(/\/profiles\/\d+\/inventory/i)==0){//profiles/\d+/inventory
  507. window.setInterval(( () => main_inventory() ), 3000);
  508. }
  509. }
  510. else if(url[0].host=="steamdb.info"){
  511. if(appid!=null){
  512. let app_links=document.querySelectorAll('nav.app-links')[0];
  513. let tab_communityitems=document.querySelectorAll('a#tab-communityitems')[0];
  514. if(app_links!=undefined){
  515. if(tab_communityitems!=undefined)create_a("Community Market",url_category_753_Game,"linkbar",true,app_links);
  516. create_a("curators",url_curatorsreviewing,"linkbar",true,app_links);
  517. }
  518. }
  519. }
  520. else if(url[0].host=="www.steamcardexchange.net"){
  521. let img_card=document.querySelectorAll('div.card>div>a>img');console.log(img_card);
  522. if(img_card.length>0)document.querySelectorAll('div.game-title>h1')[0].innerText+=" ["+6000/(img_card.length/2)+"]";
  523. let div_game_links=document.querySelectorAll('div.game-links')[0];
  524. if(div_game_links!=undefined){
  525. let button_blue=div_game_links.querySelectorAll('div.game-links>a.button-blue');
  526. for(let i=0; i<button_blue.length; i++){
  527. if(button_blue[i].innerText.search(new RegExp("STEAM MARKET", "i"))==0){
  528. button_blue[i].href+="#p1_name_asc";
  529. break;
  530. }
  531. }
  532. create_br(true,div_game_links);
  533. create_a("steamdb",url_steamdb_app,'button-blue',true,div_game_links);
  534. }
  535. let a_booster=document.querySelectorAll('div.booster>div>div>a')[0];
  536. if(a_booster!=undefined){
  537. let market_hash_name=a_booster.href.replace(new RegExp("https://steamcommunity.com/market/listings/753/", "i"), '');
  538. if(gm_steamcommunity_item_json)fn_gm_XMLHttpRequest(priceoverview+"?appid=753&market_hash_name="+market_hash_name+"&currency="+gm_currency,fn_re_json_priceoverview);
  539. }
  540. }
  541. })();