Greasy Fork 支持简体中文。

SG Game Tags

Shows some tags of the game in Steamgifts.

目前為 2016-05-31 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name SG Game Tags
  3. // @namespace https://steamcommunity.com/id/Ruphine/
  4. // @version 2.12
  5. // @description Shows some tags of the game in Steamgifts.
  6. // @author Ruphine
  7.  
  8. // @include http://www.steamgifts.com/*
  9. // @include https://www.steamgifts.com/*
  10. // @connect steampowered.com
  11. // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js
  12. // @grant GM_deleteValue
  13. // @grant GM_getValue
  14. // @grant GM_listValues
  15. // @grant GM_setValue
  16. // @grant GM_xmlhttpRequest
  17. // ==/UserScript==
  18.  
  19. /* CSS */
  20. var myCSS;
  21. myCSS = '<style> \
  22. .tags { \
  23. color: #FFFFFF; \
  24. text-decoration: none; \
  25. border-radius: 4px; \
  26. padding-top: 2px; \
  27. padding-bottom: 2px; \
  28. padding-left: 5px; \
  29. padding-right: 5px; \
  30. font-size: 8pt; \
  31. margin-right: 3px; \
  32. margin-bottom: 3px; \
  33. margin-top: 3px; \
  34. text-shadow: none; \
  35. display: none; \
  36. } \
  37. .tags-card { background-color: #3AA435; } \
  38. .tags-bundle { background-color: #E9202A; } \
  39. .tags-achievement { background-color: #305AC9; } \
  40. .tags-wishlist { background-color: #9335F1; } \
  41. .tags-hidden { background-color: #A0522D; } \
  42. .tags-linux { background-color: #E67300; } \
  43. .tags-mac { background-color: #777777; } \
  44. .tags-early { background-color: #9FA027; } \
  45. .tags.tags-minimalist { \
  46. margin-right: 0; \
  47. margin-left: 5px; \
  48. }\
  49. .my__checkbox { \
  50. cursor:pointer; \
  51. padding:7px 0 \
  52. } \
  53. .my__checkbox i { \
  54. margin-right:7px \
  55. } \
  56. .my__checkbox:not(:last-of-type) { \
  57. border-bottom:1px dotted #d2d6e0 \
  58. } \
  59. .my__checkbox:not(:hover) .form__checkbox__hover,.my__checkbox.is-selected .form__checkbox__hover,.my__checkbox:not(.is-selected) .form__checkbox__selected,.my__checkbox:hover .form__checkbox__default,.my__checkbox.is-selected .form__checkbox__default { \
  60. display:none \
  61. } \
  62. </style>';
  63.  
  64. $("head").append(myCSS);
  65.  
  66.  
  67. /* Constant Variables */
  68. const linkCard = "http://www.steamcardexchange.net/index.php?inventorygame-appid-";
  69. const linkAchievement = "http://steamcommunity.com/stats/"; // 424280/achievements/";
  70. const linkBundle = "https://www.steamgifts.com/bundle-games/search?q=";
  71. const linkHidden = "https://www.steamgifts.com/account/settings/giveaways/filters/search?q=";
  72. const linkWishlist = "https://www.steamgifts.com/account/steam/wishlist/search?q=";
  73.  
  74. const linkGameAPI = "http://store.steampowered.com/api/appdetails?filters=categories,platforms,genres&appids=";
  75. const linkPackAPI = "http://store.steampowered.com/api/packagedetails?packageids=";
  76.  
  77. const ClassCard = "tags tags-card";
  78. const TitleCard = "This game has trading cards";
  79. const TextCard = "Trading Cards";
  80.  
  81. const ClassBundle = "tags tags-bundle";
  82. const TitleBundle = "This game is marked as bundled by Steamgifts";
  83. const TextBundle = "Bundled";
  84.  
  85. const ClassAchievement = "tags tags-achievement";
  86. const TitleAchievement = "This game has steam achievements";
  87. const TextAchievement = "Achievements";
  88.  
  89. const ClassHidden = "tags tags-hidden";
  90. const TitleHidden = "This game is in your filter list";
  91. const TextHidden = "Hidden";
  92.  
  93. const ClassWishlist = "tags tags-wishlist";
  94. const TitleWishlist = "This game is in your Steam wishlist";
  95. const TextWishlist = "Wishlist";
  96.  
  97. const ClassLinux = "tags tags-linux";
  98. const TitleLinux = "Linux supported";
  99. const TextLinux = "Linux";
  100.  
  101. const ClassMac = "tags tags-mac";
  102. const TitleMac = "Mac supported";
  103. const TextMac = "Mac";
  104.  
  105. const ClassEarly = "tags tags-early";
  106. const TitleEarly = "This game is in early access state"
  107. const TextEarly = "Early Access";
  108.  
  109. const THIS_URL = window.location.href;
  110. const TIMEOUT = 1000;
  111.  
  112. var cbCards = GM_getValue("cbCards", true);
  113. var cbAchievement = GM_getValue("cbAchievement", true);
  114. var cbBundled = GM_getValue("cbBundled", true);
  115. var cbHidden = GM_getValue("cbHidden", true);
  116. var cbWishlist = GM_getValue("cbWishlist", true);
  117. var cbLinux = GM_getValue("cbLinux", false);
  118. var cbMac = GM_getValue("cbMac", false);
  119. var cbEarly = GM_getValue("cbEarly", false);
  120.  
  121. var cbTagStyle = GM_getValue("cbTagStyle", 1); //1 = full, 2 = minimalist
  122.  
  123. main();
  124.  
  125. function main()
  126. {
  127. if(/www.steamgifts.com\/giveaways\/new/.test(THIS_URL)) // process giveaway creation page
  128. $(".js__autocomplete-data").on("DOMNodeInserted", NewGiveawayDivUpdated);
  129. else if(/www.steamgifts.com\/account\/settings\/giveaways$/.test(THIS_URL)) // process giveaway setting page
  130. initSetting();
  131. else if(/www.steamgifts.com\/($|giveaways$|giveaways\/search)/.test(THIS_URL)) // homepage and all search active giveaway
  132. {
  133. ProcessGiveawayListPage($(".giveaway__row-inner-wrap"));
  134. // handles element added later by endless scroll, add timeout to delay this function because it is triggered when ext SG runs
  135. setTimeout(function()
  136. {
  137. $(document).on("DOMNodeInserted", ".widget-container", function(e)
  138. {
  139. ProcessGiveawayListPage($(e.target).find(".giveaway__row-inner-wrap"));
  140. });
  141. }, TIMEOUT);
  142.  
  143. if($(".featured__inner-wrap .global__image-outer-wrap--missing-image").length == 0 && $(".featured__inner-wrap a img").length > 0)
  144. {
  145. var URL = $(".featured__inner-wrap a img")[0].src;
  146. ProcessFeaturedGiveaway(URL);
  147. }
  148. }
  149. // user profile & group page excluding user trade and feedback and excluding group users, stats, and wishlist
  150. else if(/www.steamgifts.com\/(user|group)\//.test(THIS_URL) && !/user\/\w+\/(feedback|trade)/.test(THIS_URL) && !/group\/\w+\/\w+\/(users|stats|wishlist)/.test(THIS_URL)) // exclude
  151. {
  152. ProcessGiveawayListPage($(".giveaway__row-inner-wrap"));
  153. // handles element added later by endless scroll
  154. setTimeout(function()
  155. {
  156. $(document).on("DOMNodeInserted", ".widget-container", function(e)
  157. {
  158. ProcessGiveawayListPage($(e.target).find(".giveaway__row-inner-wrap"));
  159. });
  160. }, TIMEOUT);
  161. }
  162. else if(/www.steamgifts.com\/giveaway\//.test(THIS_URL)) // giveaway page https://www.steamgifts.com/giveaway/FGbTw/left-4-dead-2
  163. {
  164. var URL = $(".featured__inner-wrap a")[0].href;
  165. ProcessFeaturedGiveaway(URL);
  166. }
  167. // https://www.steamgifts.com/sales*
  168. // https://www.steamgifts.com/sales/account/steam/games
  169. // https://www.steamgifts.com/sales/account/steam/wishlist
  170. // https://www.steamgifts.com/giveaways/created
  171. // https://www.steamgifts.com/giveaways/entered
  172. // https://www.steamgifts.com/giveaways/won
  173. // https://www.steamgifts.com/giveaways/wishlist
  174. // https://www.steamgifts.com/account/settings/giveaways/filters
  175. else if(/www.steamgifts.com\/(sales|account\/steam\/(games|wishlist)|giveaways\/(created|entered|won|wishlist)|account\/settings\/giveaways\/filters|group\/\w+\/\w+\/wishlist)/.test(THIS_URL))
  176. ProcessGameListPage();
  177. // else
  178. // console.log("[SG Game Tags] Not Supported Page");
  179. }
  180.  
  181. function ProcessFeaturedGiveaway(URL)
  182. {
  183. var Name = $(".featured__heading__medium").text().substring(0,30);
  184. Name = Name.replace("+", "%2B").replace("[NEW] ", "").replace("[FREE] ", ""); //remove [NEW] and [FREE] to make it work with ext SG
  185. var Target = $(".featured__heading");
  186.  
  187. ProcessTags(Target, URL, Name);
  188. }
  189.  
  190. function ProcessGiveawayListPage(scope) // giveaways list with creator name
  191. {
  192. $(scope).each(function(index, element)
  193. {
  194. var URL = $(element).find("a.giveaway__icon").attr("href");
  195. if(URL != null)
  196. {
  197. var Name = $(element).find(".giveaway__heading__name").text().substring(0,30);
  198. Name = Name.replace("+", "%2B").replace("[NEW] ", "").replace("[FREE] ", ""); //remove [NEW] and [FREE] to make it work with ext SG
  199. var Target = $(element).find(".giveaway__heading");
  200.  
  201. ProcessTags(Target, URL, Name);
  202. }
  203. });
  204. }
  205.  
  206. function ProcessGameListPage() // giveaways / games list
  207. {
  208. $(".table__row-inner-wrap").each(function(index, element)
  209. {
  210. var URL;
  211. if(/www.steamgifts.com\/account\/settings\/giveaways\/filters/.test(THIS_URL))
  212. URL = $(element).find("a.table__column__secondary-link").text();
  213. else
  214. URL = $($(element).find(".global__image-inner-wrap")[0]).css('background-image');
  215.  
  216. if(URL != null)
  217. {
  218. URL = URL.replace('url(', '').replace(')', '');
  219. var Name = $(element).find(".table__column__heading").text().substring(0,30);
  220. Name = Name.replace("+", "%2B").replace("[NEW] ", "").replace("[FREE] ", ""); //remove [NEW] and [FREE] to make it work with ext SG
  221. var Target = $(element).find(".table__column--width-fill > :first-child");
  222.  
  223. if(/www.steamgifts.com\/sales/.test(THIS_URL)) Target.css("display", "block"); //because sales pages don't use <p> thus tags will appears in line with title
  224.  
  225. ProcessTags(Target, URL, Name);
  226. }
  227. });
  228. }
  229.  
  230. function ProcessTags(Target, URL, Name)
  231. {
  232. var ID = getAppIDfromLink(URL);
  233. var linkStore = "";
  234. if(isApp(URL))
  235. linkStore = "http://store.steampowered.com/app/" + ID;
  236. else if(isPackage(URL))
  237. linkStore = "http://store.steampowered.com/sub/" + ID;
  238. // TODO : add minimalist version as feature
  239. if(cbTagStyle == 1)
  240. {
  241. var tagCard = createTag(ClassCard, TitleCard, TextCard, linkCard+ID, Target);
  242. var tagAchievement = createTag(ClassAchievement, TitleAchievement, TextAchievement, linkAchievement+ID+"/achievements/", tagCard);
  243. var tagBundle = createTag(ClassBundle, TitleBundle, TextBundle, linkBundle+Name, tagAchievement);
  244. var tagLinux = createTag(ClassLinux, TitleLinux, TextLinux, linkStore, tagBundle);
  245. var tagMac = createTag(ClassMac, TitleMac, TextMac, linkStore, tagLinux);
  246. var tagEarly = createTag(ClassEarly, TitleEarly, TextEarly, linkStore, tagMac);
  247. }
  248. else
  249. {
  250. var tagCard = createTag(ClassCard + " tags-minimalist", TitleCard, TextCard.substring(0,1), linkCard+ID, Target);
  251. var tagAchievement = createTag(ClassAchievement + " tags-minimalist", TitleAchievement, TextAchievement.substring(0,1), linkAchievement+ID+"/achievements/", Target);
  252. var tagBundle = createTag(ClassBundle + " tags-minimalist", TitleBundle, TextBundle.substring(0,1), linkBundle+Name, Target);
  253. var tagLinux = createTag(ClassLinux + " tags-minimalist", TitleLinux, TextLinux.substring(0,1), linkStore, Target);
  254. var tagMac = createTag(ClassMac + " tags-minimalist", TitleMac, TextMac.substring(0,1), linkStore, Target);
  255. var tagEarly = createTag(ClassEarly + " tags-minimalist", TitleEarly, TextEarly.substring(0,1), linkStore, Target);
  256. }
  257. if(/www.steamgifts.com\/giveaway\//.test(THIS_URL)) //only trigger inside giveaway page, no need for homepage
  258. {
  259. if(cbTagStyle == 1)
  260. {
  261. var tagHidden = createTag(ClassHidden, TitleHidden, TextHidden, linkHidden+Name, tagEarly);
  262. var tagWishlist = createTag(ClassWishlist, TitleWishlist, TextWishlist, linkWishlist+Name, tagHidden);
  263. }
  264. else if(cbTagStyle == 2)
  265. {
  266. var tagHidden = createTag(ClassHidden + " tags-minimalist", TitleHidden, TextHidden, linkHidden+Name, Target);
  267. var tagWishlist = createTag(ClassWishlist + " tags-minimalist", TitleWishlist, TextWishlist, linkWishlist+Name, Target);
  268. }
  269. getHiddenStatus(ID, Name, tagHidden);
  270. getWishlistStatus(ID, Name, tagWishlist);
  271. }
  272.  
  273. if(isApp(URL))
  274. getSteamCategories(ID, tagCard, tagAchievement, tagLinux, tagMac, tagEarly);
  275. else if(isPackage(URL))
  276. {
  277. tagCard.setAttribute("href", URL);
  278. tagAchievement.setAttribute("href", URL);
  279. getSteamCategoriesFromPackage(ID, tagCard, tagAchievement, tagLinux, tagMac, tagEarly);
  280. }
  281.  
  282. getBundleStatus(ID, Name, tagBundle);
  283. }
  284.  
  285. function createTag(_class, title, text, href, divTarget)
  286. {
  287. var tag = document.createElement("a");
  288. tag.setAttribute("id", "tags");
  289. tag.setAttribute("target", "_blank");
  290. tag.setAttribute("class", _class);
  291. tag.setAttribute("title", title);
  292. tag.setAttribute("href", href);
  293. tag.innerHTML = text;
  294.  
  295. if(cbTagStyle == 1 || /www.steamgifts.com\/giveaways\/new/.test(THIS_URL)) // full text below game title, use after, or bundle tag in giveaway creation page
  296. $(divTarget).after(tag);
  297. else if(cbTagStyle == 2) // minimalist beside game title use append
  298. $(divTarget).append(tag);
  299. return tag;
  300. }
  301.  
  302. function displayElems(elems)
  303. {
  304. $(elems).css("display", "inline-block");
  305. }
  306.  
  307. function getSteamCategories(appID, tagCard, tagAchievement, tagLinux, tagMac, tagEarly)
  308. {
  309. var jsonCards = GM_getValue("cards-" + appID, "");
  310. var jsonAchievement = GM_getValue("achievements-" + appID, "");
  311. var jsonLinux = GM_getValue("linux-" + appID, "");
  312. var jsonMac = GM_getValue("mac-" + appID, "");
  313. var jsonEarly = GM_getValue("early-" + appID, "");
  314.  
  315. var reqCard = needRequest(jsonCards);
  316. var reqAchievement = needRequest(jsonAchievement);
  317. var reqLinux = needRequest(jsonLinux);
  318. var reqMac = needRequest(jsonMac);
  319. var reqEarly = (jsonEarly == "");
  320.  
  321. if(!reqCard && cbCards) // if app card is saved
  322. {
  323. if(JSON.parse(jsonCards).val)
  324. displayElems(tagCard);
  325. }
  326. if(!reqAchievement && cbAchievement) // if app achievement is saved
  327. {
  328. if(JSON.parse(jsonAchievement).val)
  329. displayElems(tagAchievement);
  330. }
  331. if(!reqLinux && cbLinux) // if app linux is saved
  332. {
  333. if(JSON.parse(jsonLinux).val)
  334. displayElems(tagLinux);
  335. }
  336. if(!reqMac && cbMac) // if app mac is saved
  337. {
  338. if(JSON.parse(jsonMac).val)
  339. displayElems(tagMac);
  340. }
  341. if(!reqEarly && cbEarly)
  342. {
  343. var obj = JSON.parse(jsonEarly);
  344. if(obj.val) // if game saved as early access, check saved date
  345. {
  346. if(obj.savedDate < (Date.now() - (3 * 24 * 60 * 60 * 1000)))
  347. reqEarly = true;
  348. else
  349. displayElems(tagEarly);
  350. }
  351. }
  352.  
  353. if((reqCard && cbCards) || (reqAchievement && cbAchievement) || (reqLinux && cbLinux) || (reqMac && cbMac) || (reqEarly && cbEarly))
  354. {
  355. console.log("[SG Game Tags] Request Steam " + appID);
  356. GM_xmlhttpRequest({
  357. method: "GET",
  358. timeout: 10000,
  359. url: linkGameAPI+appID,
  360. onload: function(data)
  361. {
  362. var obj = JSON.parse(data.responseText)[appID].data;
  363. if(obj == null)
  364. {
  365. console.log("[SG Game Tags] apps " + appID + " does not have store page or does not exist");
  366. saveData("cards-" + appID, false);
  367. saveData("achievements-" + appID, false);
  368. saveData("linux-" + appID, false);
  369. saveData("mac-" + appID, false);
  370. saveData("early-" + appID, false);
  371. }
  372. else
  373. {
  374. // get steam apps categories : achievement, trading cards, etc
  375. var categories = obj.categories;
  376. if(categories != null)
  377. {
  378. var catCards = $.grep(categories, function(e){ return e.id == "29"; });
  379. if(catCards.length > 0)
  380. {
  381. if(cbCards) displayElems(tagCard);
  382. saveData("cards-" + appID, true);
  383. }
  384. else
  385. saveData("cards-" + appID, false);
  386.  
  387. var catAchievement = $.grep(categories, function(e){ return e.id == "22"; });
  388. if(catAchievement.length > 0)
  389. {
  390. if(cbAchievement) displayElems(tagAchievement);
  391. saveData("achievements-" + appID, true);
  392. }
  393. else
  394. saveData("achievements-" + appID, false);
  395. }
  396. else
  397. console.log("[SG Game Tags] apps " + appID + " does not have categories");
  398.  
  399. // get steam apps platforms: linux: boolean, mac: boolean
  400. var platforms = obj.platforms;
  401. if(platforms.linux == true && cbLinux) displayElems(tagLinux);
  402. if(platforms.mac == true && cbMac) displayElems(tagMac);
  403. saveData("linux-" + appID, platforms.linux);
  404. saveData("mac-" + appID, platforms.mac);
  405.  
  406. // get steam apps genres
  407. var genres = obj.genres;
  408. var genEarly = $.grep(genres, function(e){ return e.id == "70"; });
  409. if(genEarly.length > 0)
  410. {
  411. if(cbEarly) displayElems(tagEarly);
  412. saveData("early-" + appID, true);
  413. }
  414. else
  415. saveData("early-" + appID, false);
  416. }
  417. }
  418. });
  419. }
  420. }
  421.  
  422. function getBundleStatus(appID, appName, elems)
  423. {
  424. if(cbBundled)
  425. {
  426. var jsonBundle = GM_getValue("bundled-" + appID, "");
  427. if(!needRequest(jsonBundle))
  428. {
  429. if(JSON.parse(jsonBundle).val)
  430. displayElems(elems);
  431. }
  432. else
  433. {
  434. console.log("[SG Game Tags] Request bundle " + appID + " - " + appName);
  435. $.get( linkBundle+appName, function(data)
  436. {
  437. var gamesfound = $(data).find(".table__column__secondary-link");
  438. for(i=0; i<$(gamesfound).length; i++)
  439. {
  440. var url = $(gamesfound)[i].href;
  441. var ID = getAppIDfromLink(url);
  442.  
  443. if(appID == ID)
  444. {
  445. //TODO : Save appID + true ke local cache
  446. displayElems(elems);
  447. saveData("bundled-" + appID, true);
  448. return true; //exit function
  449. }
  450. }
  451. saveData("bundled-" + appID, false);
  452. });
  453. }
  454. }
  455. }
  456.  
  457. function getHiddenStatus(appID, appName, elems)
  458. {
  459. if(cbHidden)
  460. {
  461. console.log("[SG Game Tags] Request hidden " + appID + " - " + appName);
  462. $.get(linkHidden+appName, function(data)
  463. {
  464. var gamesfound = $(data).find("a.table__column__secondary-link");
  465. for(i=0; i<$(gamesfound).length; i++)
  466. {
  467. var url = $(gamesfound)[i].href;
  468. var ID = getAppIDfromLink(url);
  469. if(appID == ID)
  470. {
  471. //TODO : Save appID + true ke local cache
  472. displayElems(elems);
  473. return true; //exit function
  474. }
  475. }
  476. });
  477. }
  478. }
  479.  
  480. function getWishlistStatus(appID, appName, elems)
  481. {
  482. if(cbWishlist)
  483. {
  484. console.log("[SG Game Tags] Request wishlist " + appID + " - " + appName);
  485. $.get(linkWishlist+appName, function(data)
  486. {
  487. var gamesfound = $(data).find("a.table__column__secondary-link");
  488. for(i=0; i<$(gamesfound).length; i++)
  489. {
  490. var url = $(gamesfound)[i].href;
  491. var ID = getAppIDfromLink(url);
  492. if(appID == ID)
  493. {
  494. //TODO : Save appID + true ke local cache
  495. displayElems(elems);
  496. return true; //exit function
  497. }
  498. }
  499. });
  500. }
  501. }
  502.  
  503. function getSteamCategoriesFromPackage(appID, tagCard, tagAchievement, tagLinux, tagMac, tagEarly)
  504. {
  505. if(cbCards || cbAchievement || cbLinux || cbMac || cbEarly)
  506. {
  507. //TODO: Check if the game is saved, if no then request to steam
  508. GM_xmlhttpRequest({
  509. method: "GET",
  510. timeout: 10000,
  511. url: linkPackAPI+appID,
  512. onload: function(data)
  513. {
  514. var IDs = JSON.parse(data.responseText)[appID].data;
  515. if(IDs == null)
  516. {
  517. console.log("[SG Game Tags] Package " + appID + " does not exist");
  518. saveData("cards-" + appID, false);
  519. saveData("achievements-" + appID, false);
  520. saveData("linux-" + appID, false);
  521. saveData("mac-" + appID, false);
  522. saveData("early-" + appID, false);
  523. }
  524. else
  525. {
  526. IDs = IDs.apps;
  527. $.each(IDs, function(index)
  528. {
  529. getSteamCategories(IDs[index].id, tagCard, tagAchievement, tagLinux, tagMac, tagEarly);
  530. });
  531. }
  532. }
  533. });
  534. }
  535. }
  536.  
  537. function getAppIDfromLink(link)
  538. {
  539. var url = link.split("/");
  540. return url[url.length-2];
  541. }
  542.  
  543. function isApp(link)
  544. {
  545. var pattern = /\/app|apps\/0-9\//;
  546. return pattern.test(link);
  547. }
  548.  
  549. function isPackage(link)
  550. {
  551. var pattern = /\/sub|subs\/0-9\//;
  552. return pattern.test(link);
  553. }
  554.  
  555. function saveData(name, val)
  556. {
  557. var data = {val:val, savedDate:Date.now()};
  558. GM_setValue(name, JSON.stringify(data));
  559. }
  560.  
  561. function needRequest(json)
  562. {
  563. if(json == "")
  564. return true;
  565. else
  566. {
  567. var obj = JSON.parse(json);
  568. if(obj.val)
  569. return false;
  570. else
  571. return (obj.savedDate < (Date.now() - (24 * 60 * 60 * 1000))); // need request if savedDate < 3 days ago
  572. }
  573. }
  574.  
  575. function NewGiveawayDivUpdated(event)
  576. {
  577. if(event.type == "DOMNodeInserted") //show bundle tag for shown game
  578. {
  579. var gamesfound = $(".table__row-inner-wrap");
  580. $(".tags").remove();
  581. $(".table__row-inner-wrap").each(function(index, element)
  582. {
  583. var url = $(element).find("a.table__column__secondary-link").text();
  584. var ID = getAppIDfromLink(url);
  585. var Name = $(element).find(".table__column__heading").text();
  586. var Target = $(element).find(".table__column--width-fill");
  587.  
  588. $(".js__autocomplete-data").off("DOMNodeInserted");
  589. var tagBundle = createTag(ClassBundle, TitleBundle, TextBundle, linkBundle+Name, Target);
  590. $(tagBundle).css("float", "right");
  591. getBundleStatus(ID, Name, tagBundle);
  592. });
  593. if(gamesfound.length > 0)
  594. {
  595. $(".js__autocomplete-data").on("DOMNodeRemoved", NewGiveawayDivUpdated);
  596.  
  597. $(".table__row-inner-wrap").on("click", function(event)
  598. {
  599. var url = $(this).find("a.table__column__secondary-link").text();
  600. var ID = getAppIDfromLink(url);
  601. var Name = $(this).find(".table__column__heading").text();
  602. var Target = $(".js__autocomplete-name")[0];
  603. tagBundle = createTag(ClassBundle, TitleBundle, TextBundle, linkBundle+Name, Target);
  604. getBundleStatus(ID, Name, tagBundle);
  605. });
  606. }
  607. }
  608. else if(event.type == "DOMNodeRemoved")//show / remove tag of selected game
  609. {
  610. $(".js__autocomplete-data").off("DOMNodeRemoved");
  611. $(".table__row-inner-wrap").off("click");
  612. $(".js__autocomplete-data").on("DOMNodeInserted", NewGiveawayDivUpdated);
  613. }
  614. }
  615.  
  616. function initSetting()
  617. {
  618. var no = $(".form__heading").length + 1;
  619. initTagOnOffSetting(no);
  620. initTagPositionSetting(no+1);
  621. }
  622.  
  623. function initTagOnOffSetting(no)
  624. {
  625. var CheckIcon = '<i class="form__checkbox__default fa fa-circle-o"></i><i class="form__checkbox__hover fa fa-circle"></i><i class="form__checkbox__selected fa fa-check-circle"></i>';
  626. var form__row = document.createElement("div");
  627. form__row.setAttribute("class", "form__row");
  628.  
  629. var form__heading = document.createElement("div");
  630. form__heading.setAttribute("class", "form__heading");
  631.  
  632. var form__heading__number = document.createElement("div");
  633. form__heading__number.setAttribute("class", "form__heading__number");
  634. form__heading__number.innerHTML = no + ".";
  635.  
  636. var form__heading__text = document.createElement("div");
  637. form__heading__text.setAttribute("class", "form__heading__text");
  638. form__heading__text.setAttribute("title", "If you have performance issues, try disable tags you don't need")
  639. form__heading__text.innerHTML = "[SG Game Tags] Which tags do you want to see?";
  640.  
  641. $(form__heading).append(form__heading__number).append(form__heading__text);
  642.  
  643. var form__row__indent = document.createElement("div");
  644. form__row__indent.setAttribute("class", "form__row__indent");
  645.  
  646. var form__checkbox_1 = createCheckBox("my__checkbox", CheckIcon + "Trading Cards", cbCards);
  647. var form__checkbox_2 = createCheckBox("my__checkbox", CheckIcon + "Achievements", cbAchievement);
  648. var form__checkbox_3 = createCheckBox("my__checkbox", CheckIcon + "Bundled", cbBundled);
  649. var form__checkbox_4 = createCheckBox("my__checkbox", CheckIcon + "Hidden", cbHidden);
  650. var form__checkbox_5 = createCheckBox("my__checkbox", CheckIcon + "Wishlist", cbWishlist);
  651. var form__checkbox_6 = createCheckBox("my__checkbox", CheckIcon + "Linux", cbLinux);
  652. var form__checkbox_7 = createCheckBox("my__checkbox", CheckIcon + "Mac", cbMac);
  653. var form__checkbox_8 = createCheckBox("my__checkbox", CheckIcon + "Early Access", cbEarly);
  654.  
  655. $(form__checkbox_1).click(function(){toggleCBTags(form__checkbox_1, "cbCards");});
  656. $(form__checkbox_2).click(function(){toggleCBTags(form__checkbox_2, "cbAchievement");});
  657. $(form__checkbox_3).click(function(){toggleCBTags(form__checkbox_3, "cbBundled");});
  658. $(form__checkbox_4).click(function(){toggleCBTags(form__checkbox_4, "cbHidden");});
  659. $(form__checkbox_5).click(function(){toggleCBTags(form__checkbox_5, "cbWishlist");});
  660. $(form__checkbox_6).click(function(){toggleCBTags(form__checkbox_6, "cbLinux");});
  661. $(form__checkbox_7).click(function(){toggleCBTags(form__checkbox_7, "cbMac");});
  662. $(form__checkbox_8).click(function(){toggleCBTags(form__checkbox_8, "cbEarly");});
  663.  
  664. $(form__row__indent)
  665. .append(form__checkbox_1)
  666. .append(form__checkbox_2)
  667. .append(form__checkbox_3)
  668. .append(form__checkbox_4)
  669. .append(form__checkbox_5)
  670. .append(form__checkbox_6)
  671. .append(form__checkbox_7)
  672. .append(form__checkbox_8);
  673.  
  674. $(form__row).append(form__heading).append(form__row__indent);
  675.  
  676. $(".js__submit-form").before(form__row);
  677.  
  678. var desc = document.createElement("div");
  679. desc.setAttribute("class", "form__input-description");
  680. desc.innerHTML = "No need to press Save Changes button. It is automatically saved when the value changed.";
  681. $(desc).appendTo([form__row__indent]);
  682.  
  683. changeCBColor();
  684. }
  685.  
  686. function initTagPositionSetting(no)
  687. {
  688. var CheckIcon = '<i class="form__checkbox__default fa fa-circle-o"></i><i class="form__checkbox__hover fa fa-circle"></i><i class="form__checkbox__selected fa fa-check-circle"></i>';
  689. var form__row = document.createElement("div");
  690. form__row.setAttribute("class", "form__row");
  691.  
  692. var form__heading = document.createElement("div");
  693. form__heading.setAttribute("class", "form__heading");
  694.  
  695. var form__heading__number = document.createElement("div");
  696. form__heading__number.setAttribute("class", "form__heading__number");
  697. form__heading__number.innerHTML = no + ".";
  698.  
  699. var form__heading__text = document.createElement("div");
  700. form__heading__text.setAttribute("class", "form__heading__text");
  701. form__heading__text.setAttribute("title", "This setting doesn't affect performance, only visual change.");
  702. form__heading__text.innerHTML = "[SG Game Tags] Tags Style";
  703.  
  704. $(form__heading).append(form__heading__number).append(form__heading__text);
  705.  
  706. var form__row__indent = document.createElement("div");
  707. form__row__indent.setAttribute("class", "form__row__indent");
  708. var form__checkbox_1 = createCheckBox("form__checkbox", CheckIcon + "(Original) Full Text tags below game title", cbTagStyle == 1);
  709. var form__checkbox_2 = createCheckBox("form__checkbox", CheckIcon + "(Minimalist) One letter tags beside game title", cbTagStyle == 2);
  710.  
  711. form__checkbox_1.setAttribute("title", 'The tags will display "Trading Cards", "Bundled", etc. This option will increase page height.');
  712. form__checkbox_2.setAttribute("title", 'The tags will just display first letter. "Trading Cards" becomes "T", "Bundled" becomes "B", etc.');
  713.  
  714. $(form__checkbox_1).click(
  715. function()
  716. {
  717. $(form__checkbox_2).removeClass("is-selected").addClass("is-disabled");
  718. $(form__checkbox_1).removeClass("is-disabled").addClass("is-selected");
  719. GM_setValue("cbTagStyle", 1);
  720. }
  721. );
  722. $(form__checkbox_2).click(
  723. function()
  724. {
  725. $(form__checkbox_1).removeClass("is-selected").addClass("is-disabled");
  726. $(form__checkbox_2).removeClass("is-disabled").addClass("is-selected");
  727. GM_setValue("cbTagStyle", 2);
  728. }
  729. );
  730.  
  731. $(form__row__indent).append(form__checkbox_1).append(form__checkbox_2);
  732.  
  733. $(form__row).append(form__heading).append(form__row__indent);
  734.  
  735. $(".js__submit-form").before(form__row);
  736.  
  737. var desc = document.createElement("div");
  738. desc.setAttribute("class", "form__input-description");
  739. desc.innerHTML = "No need to press Save Changes button. It is automatically saved when the value changed.";
  740. $(desc).appendTo([form__row__indent]);
  741. }
  742.  
  743. function createCheckBox(_class, _html, cbValue)
  744. {
  745. var cb = document.createElement("div");
  746. cb.setAttribute("class", _class);
  747. cb.innerHTML = _html;
  748. if(cbValue)
  749. $(cb).addClass("is-selected");
  750. else
  751. $(cb).addClass("is-disabled");
  752.  
  753. return cb;
  754. }
  755.  
  756. function toggleCBTags(cbElems, cbName)
  757. {
  758. var cbValue;
  759. if(cbName == "cbCards")
  760. {
  761. cbCards = !cbCards;
  762. cbValue = cbCards;
  763. }
  764. else if(cbName == "cbAchievement")
  765. {
  766. cbAchievement = !cbAchievement;
  767. cbValue = cbAchievement;
  768. }
  769. else if(cbName == "cbBundled")
  770. {
  771. cbBundled = !cbBundled;
  772. cbValue = cbBundled;
  773. }
  774. else if(cbName == "cbHidden")
  775. {
  776. cbHidden = !cbHidden;
  777. cbValue = cbHidden;
  778. }
  779. else if(cbName == "cbWishlist")
  780. {
  781. cbWishlist = !cbWishlist;
  782. cbValue = cbWishlist;
  783. }
  784. else if(cbName == "cbLinux")
  785. {
  786. cbLinux = !cbLinux;
  787. cbValue = cbLinux;
  788. }
  789. else if(cbName == "cbMac")
  790. {
  791. cbMac = !cbMac;
  792. cbValue = cbMac;
  793. }
  794. else if(cbName == "cbEarly")
  795. {
  796. cbEarly = !cbEarly;
  797. cbValue = cbEarly;
  798. }
  799.  
  800. GM_setValue(cbName, cbValue);
  801. if(cbValue)
  802. $(cbElems).removeClass("is-disabled").addClass("is-selected");
  803. else
  804. $(cbElems).removeClass("is-selected").addClass("is-disabled");
  805.  
  806. changeCBColor();
  807. }
  808.  
  809. function changeCBColor()
  810. {
  811. var colorCBDisabled = $(".form__checkbox.is-disabled").css("color");
  812. var colorCBSelected = $(".form__checkbox.is-selected").css("color");
  813.  
  814. $(".my__checkbox.is-disabled").css("color", colorCBDisabled);
  815. $(".my__checkbox.is-selected").css("color", colorCBSelected);
  816. }