SG Game Tags

Shows some tags of the game in Steamgifts.

目前为 2016-05-15 提交的版本,查看 最新版本

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