SteamWishListTool - Steam Wishlist Organizer

Oranize Steam Wishlist Collection via categories and tags

  1. // ==UserScript==
  2. // @author Hate, Rexedead
  3. // @name SteamWishListTool - Steam Wishlist Organizer
  4. // @version 1.3.2
  5. // @description Oranize Steam Wishlist Collection via categories and tags
  6. // @grant GM_getValue
  7. // @grant GM_setValue
  8. // @grant GM_listValues
  9. // @grant GM_deleteValue
  10. // @grant GM_addStyle
  11. // @namespace https://github.com/Rexedead/SteamWishlistTool
  12. // @run-at document-end
  13. // @include *steamcommunity.com/id/*/wishlist*
  14. // @include *steamcommunity.com/profiles/*/wishlist*
  15. // ==/UserScript==
  16.  
  17.  
  18. (function () {
  19. 'use strict';
  20. // Your code here...
  21. //ИТА ЩЕДЕВРЕЛЬНЭ! ©Hate
  22. // GM_deleteValue("");
  23.  
  24. window.addEventListener("load", Greasemonkey_main, false);
  25.  
  26. function Greasemonkey_main() {
  27.  
  28. var DivBar = document.createElement('div');
  29. var addTextField = document.createElement('input');
  30. var addButton = document.createElement('button');
  31. var child = document.getElementById('wishlist_items');
  32. var span = document.createElement('span');
  33. var categoryList = document.createElement('div');
  34. var donBut = document.createElement('button');
  35. var donSpan = document.createElement('span');
  36. var userid = window.location.href.split('/')[4];
  37.  
  38. console.log("ID for this page is: " + userid);
  39.  
  40. var observer;
  41.  
  42. span.appendChild(document.createTextNode("Add new category"));
  43.  
  44. addButton.appendChild(span);
  45. addButton.className = "btnv6_blue_hoverfade btn_small ";
  46. addButton.type = "button";
  47. addButton.onclick = formcheck;
  48. addButton.style = "outline: none;";
  49.  
  50. addTextField.type = "text";
  51. addTextField.name = "TextField";
  52. addTextField.onkeydown = enterf;
  53.  
  54. DivBar.style = "margin-bottom: 13px;";
  55. DivBar.className = "Add_Button_Bar";
  56. DivBar.id = "barName";
  57.  
  58. donSpan.appendChild(document.createTextNode("DONATE"));
  59. donSpan.style = "color: rgb(255, 249, 0);";
  60.  
  61. donBut.className = "btnv6_blue_hoverfade btn_small ";
  62. donBut.type = "button";
  63. donBut.appendChild(donSpan);
  64. donBut.style = "outline: none;";
  65. donBut.id = "donate";
  66. donBut.onclick = donate;
  67.  
  68. categoryList.className = "categoryList";
  69. categoryList.classList.add("droptarget");
  70.  
  71. DivBar.appendChild(addTextField);
  72. DivBar.appendChild(addButton);
  73. DivBar.appendChild(donBut);
  74. child.parentNode.insertBefore(DivBar, child);
  75. child.insertBefore(categoryList, child.firstChild);
  76. child.classList.add("droptarget");
  77. restore();
  78.  
  79.  
  80. //Functions
  81. function enterf(e) {
  82. if (e.keyCode == 13) {
  83. formcheck();
  84. }
  85. }
  86.  
  87.  
  88. function save() {
  89.  
  90. var stringOfSave = "";
  91. var arrOfDetails;
  92.  
  93. arrOfDetails = categoryList.childNodes;
  94. for (var inD = 0; inD < arrOfDetails.length; inD++) {
  95. stringOfSave += (categoryList.childNodes[inD].className);
  96. var cat_items = arrOfDetails[inD].querySelectorAll('.wishlistRow');
  97. for (var j = 0; j < cat_items.length; j++) {
  98. var item_id = cat_items[j].id; //В переменной item_id хранится id j элемента категории
  99. stringOfSave += "," + item_id;
  100. }
  101. stringOfSave += "^";
  102. }
  103. stringOfSave = stringOfSave.replace(/\^$/, "");
  104.  
  105. //console.log(stringOfSave.valueOf());
  106.  
  107. GM_setValue(userid, stringOfSave);
  108.  
  109. }
  110.  
  111. function restore() {
  112.  
  113. //DEBUG START
  114. var arry = [];
  115. arry = GM_listValues();
  116. var p = arry.length;
  117. console.log('##=## GM_listValues ' + p);
  118. for (p = arry.length - 1; p > -1; p--) {
  119. console.log('##=## ' + p + ' ' + arry[p] + ' = ' + GM_getValue(arry[p]));
  120. }
  121. //DEBUG END
  122.  
  123. try {
  124. var restoreWishlistSave = GM_getValue(userid);
  125.  
  126. if (restoreWishlistSave.length > 0) {
  127. var wlitemsUns = restoreWishlistSave.valueOf().split("^");
  128. var wlItemsByCat;
  129. for (var cat = 0; cat < wlitemsUns.length; cat++) {
  130. wlItemsByCat = wlitemsUns[cat].valueOf().split(",");
  131. addTag(wlItemsByCat[0]);
  132. var category = child.getElementsByClassName(wlItemsByCat[0]);
  133. for (var item = 1; item < wlItemsByCat.length; item++) {
  134. try {
  135. var game = document.getElementById(wlItemsByCat[item]);
  136. category[0].appendChild(game);
  137. }
  138. catch (npe) {
  139. console.log("list modified");
  140. }
  141. }
  142. }
  143. //console.log(wlItemsByCat[0]);
  144. // console.log(wlitems);
  145. }
  146. }
  147. catch (newpage) {
  148.  
  149. }
  150. }
  151.  
  152. function addGameInCategory(addInCategoryButton) {
  153. var activeButtons = document.querySelectorAll('.push');
  154. var addSpan = addInCategoryButton.firstElementChild;
  155.  
  156. addInCategoryButton.parentNode.lastChild.onclick = cancel;
  157. addInCategoryButton.parentNode.lastChild.firstElementChild.textContent = "Cancel";
  158.  
  159. for (var i = 0; i < activeButtons.length; i++) {
  160. activeButtons[i].firstElementChild.textContent = "Add games";
  161. activeButtons[i].classList.remove("push");
  162. var button = activeButtons[i];
  163. activeButtons[i].onclick = function () { addGameInCategory(button); };
  164. }
  165.  
  166. function cancel() {
  167. addInCategoryButton.firstElementChild.textContent = "Add games";
  168. addInCategoryButton.onclick = again;
  169. addInCategoryButton.parentNode.lastChild.onclick = function () { remGames(addInCategoryButton.parentNode.lastChild); };
  170. addInCategoryButton.parentNode.lastChild.firstElementChild.textContent = "Remove games";
  171. var game = document.querySelectorAll('.selection');
  172. for (var i = 0; i < game.length; i++) {
  173. game[i].parentNode.remove();
  174. }
  175. }
  176.  
  177. addSpan.textContent = "Add selected games";
  178.  
  179. addInCategoryButton.onclick = addInCurrentCategory;
  180. addInCategoryButton.classList.add("push");
  181.  
  182. addCheckBox();
  183.  
  184. function again() {
  185. addGameInCategory(addInCategoryButton);
  186. }
  187.  
  188. function addInCurrentCategory() {
  189. addList(addInCategoryButton);
  190. }
  191.  
  192.  
  193. }
  194.  
  195. function addList(addInCategoryButton) {
  196. var game = document.querySelectorAll('.selection');
  197. addInCategoryButton.lastChild.textContent = "Add games";
  198. addInCategoryButton.onclick = again;
  199. var games = addInCategoryButton.parentNode.parentNode.querySelectorAll('.wishlistRow');
  200. var col = addInCategoryButton.parentNode.parentNode.firstChild.getElementsByClassName('num')[0].firstChild;
  201.  
  202. for (var i = 0; i < game.length; i++) {
  203. if (game[i].checked) {
  204. observer.observe(game[i].parentNode.parentNode, {
  205. attributes: true,
  206. });
  207. game[i].parentNode.parentNode.classList.add("inCategory");
  208. addInCategoryButton.parentNode.parentNode.appendChild(game[i].parentNode.parentNode);
  209. col.nodeValue = Number(col.nodeValue) + 1;
  210. }
  211. game[i].parentNode.remove();
  212. //addInCategoryButton.parentNode.lastChild.onclick = function () { remGames(addInCategoryButton.parentNode.lastChild); };
  213. addInCategoryButton.parentNode.lastChild.firstElementChild.textContent = "Remove games";
  214. }
  215.  
  216. function again() {
  217. addGameInCategory(addInCategoryButton);
  218. }
  219. save();
  220.  
  221. }
  222.  
  223. function remGames(Button) {
  224. Button.parentNode.firstElementChild.onclick = cancel;
  225. Button.parentNode.firstElementChild.firstElementChild.textContent = "Cancel";
  226. delCheckBox(Button);
  227. Button.lastChild.textContent = "Remove Selected Games";
  228. Button.onclick = remFromList;
  229.  
  230. function delGame() {
  231. remGames(Button);
  232. }
  233.  
  234. function cancel() {
  235. Button.firstElementChild.textContent = "Remove Games";
  236. Button.onclick = delGame;
  237. Button.parentNode.firstElementChild.onclick = function () { addGameInCategory(Button.parentNode.firstElementChild); };
  238. Button.parentNode.firstElementChild.firstElementChild.textContent = "Add games";
  239. var sfrgame = Button.parentNode.parentNode.querySelectorAll('.selection');
  240. for (var i = 0; i < sfrgame.length; i++) {
  241. sfrgame[i].parentNode.remove();
  242. }
  243. }
  244.  
  245. function remFromList() {
  246. var game = Button.parentNode.parentNode.querySelectorAll('.inCategory');
  247. var sfrgame = Button.parentNode.parentNode.querySelectorAll('.selection');
  248. var col = Button.parentNode.parentNode.firstChild.getElementsByClassName('num')[0].firstChild;
  249. for (var i = 0; i < sfrgame.length; i++) {
  250. if (sfrgame[i].checked) {
  251. game[i].parentNode.parentNode.parentNode.appendChild(game[i]);
  252. col.nodeValue = Number(col.nodeValue) - 1;
  253. game[i].classList.remove("inCategory");
  254. }
  255. sfrgame[i].parentNode.remove();
  256. }
  257. Button.firstElementChild.textContent = "Remove Games";
  258. Button.onclick = delGame;
  259. Button.parentNode.firstElementChild.onclick = function () { addGameInCategory(Button.parentNode.firstElementChild); };
  260. Button.parentNode.firstElementChild.firstElementChild.textContent = "Add games";
  261. save();
  262. }
  263. }
  264.  
  265. function formcheck() {
  266. if (addTextField.value === "") {
  267. alert("Error: empty field!");
  268. } else {
  269. if (categoryList.getElementsByClassName(addTextField.value).length > 0) {
  270. alert("This category already exists");
  271. } else {
  272. addTag(addTextField.value);
  273. }
  274. }
  275. }
  276.  
  277. function addTag(cat_name) {
  278. var category = document.createElement('details');
  279. var categoryName = document.createElement('summary');
  280. var addInCategoryButton = document.createElement('button');
  281. var remInCategoryButton = document.createElement('button');
  282. var remGamesButton = document.createElement('button');
  283. var addSpan = document.createElement('span');
  284. var remCatSpan = document.createElement('span');
  285. var remGamesSpan = document.createElement('span');
  286. var addRemoveDiv = document.createElement('div');
  287. var itemsNum = document.createElement('span');
  288. var sortOptionBar = document.createElement('div');
  289. var sortByPriceButton = document.createElement('button');
  290. var sortByNameButton = document.createElement('button');
  291. var sortByRankButton = document.createElement('button');
  292. observer = new MutationObserver(function (mutations) {
  293.  
  294. mutations.forEach(function (mutation) {
  295. if (mutation.attributeName === "class") {
  296. category.addEventListener("mouseout", handl);
  297. }
  298. });
  299. });
  300.  
  301. itemsNum.classList.add("num");
  302. itemsNum.appendChild(document.createTextNode("0"));
  303.  
  304. sortOptionBar.appendChild(document.createTextNode("Sort by: "));
  305. sortOptionBar.appendChild(sortByRankButton);
  306. sortOptionBar.appendChild(sortByNameButton);
  307. sortOptionBar.appendChild(sortByPriceButton);
  308. sortOptionBar.style = "float: right; outline: none; font-size: 11px; color: #56707f; padding: 0 15px;";
  309.  
  310. sortByRankButton.className = "btnv6_blue_hoverfade btn_small ";
  311. sortByRankButton.appendChild(document.createTextNode("by rank"));
  312. sortByRankButton.type = "button";
  313. sortByRankButton.onclick = sortByRankIncreas;
  314. sortByRankButton.style = "line-height: 22px; padding: 0 15px;";
  315.  
  316.  
  317. sortByPriceButton.className = "btnv6_blue_hoverfade btn_small ";
  318. sortByPriceButton.appendChild(document.createTextNode("by price"));
  319. sortByPriceButton.type = "button";
  320. sortByPriceButton.onclick = sortByPriceIncreas;
  321. sortByPriceButton.style = "line-height: 22px; padding: 0 15px;";
  322.  
  323. sortByNameButton.className = "btnv6_blue_hoverfade btn_small ";
  324. sortByNameButton.appendChild(document.createTextNode("by name"));
  325. sortByNameButton.type = "button";
  326. sortByNameButton.onclick = sortByNameIncreas;
  327. sortByNameButton.style = "line-height: 22px; padding: 0 15px;";
  328.  
  329. function handl(event) {
  330. var col = this.firstChild.getElementsByClassName('num')[0].firstChild;
  331. var drag = categoryList.querySelectorAll('.inDrag');
  332. if (drag.length > 0) {
  333. //alert("asd");
  334. drag[0].classList.remove("inCategory");
  335. col.nodeValue = Number(col.nodeValue) - 1;
  336. child.appendChild(drag[0]);
  337. save();
  338. }
  339. category.removeEventListener("mouseout", handl);
  340. }
  341.  
  342. addSpan.appendChild(document.createTextNode("Add games"));
  343. remCatSpan.appendChild(document.createTextNode("Remove Category"));
  344. remGamesSpan.appendChild(document.createTextNode("Remove Games"));
  345.  
  346. addInCategoryButton.appendChild(addSpan);
  347. addInCategoryButton.className = "btnv6_blue_hoverfade btn_small ";
  348. addInCategoryButton.type = "button";
  349. addInCategoryButton.onclick = add;
  350. addInCategoryButton.style = "outline: none;";
  351.  
  352. remInCategoryButton.appendChild(remCatSpan);
  353. remInCategoryButton.className = "btnv6_blue_hoverfade btn_small ";
  354. remInCategoryButton.style = "float: right; outline: none;";
  355. remInCategoryButton.type = "button";
  356. remInCategoryButton.onclick = del;
  357.  
  358. remGamesButton.appendChild(remGamesSpan);
  359. remGamesButton.className = "btnv6_blue_hoverfade btn_small ";
  360. remGamesButton.type = "button";
  361. remGamesButton.onclick = delGame;
  362. remGamesButton.style = "outline: none;";
  363.  
  364. addRemoveDiv.appendChild(addInCategoryButton);
  365. addRemoveDiv.appendChild(remGamesButton);
  366. addRemoveDiv.style = "margin-bottom: 2%";
  367.  
  368. categoryName.appendChild(document.createTextNode(cat_name)); //get user text input
  369. categoryName.appendChild(document.createTextNode(" ("));
  370. categoryName.appendChild(itemsNum);
  371. categoryName.appendChild(document.createTextNode(")"));
  372. categoryName.appendChild(sortOptionBar);
  373. categoryName.style = "font-size: 16px; font-weight: 300; color: #ffffff; padding: 5px; cursor: default; cursor: default; cursor: -moz-default; outline: none;";
  374. categoryName.appendChild(remInCategoryButton);
  375. category.appendChild(categoryName);
  376. category.appendChild(addRemoveDiv);
  377. category.className = cat_name;
  378.  
  379. category.style = "min-height: inherit; background-color: rgba( 84, 133, 183, 0.2); color: #56707f; padding: 8px 1%; margin-bottom: 15px; position: relative;";
  380. category.addEventListener("DOMNodeInserted", function (event) {
  381. var games = category.querySelectorAll('.wishlistRow');
  382. var col = category.firstChild.getElementsByClassName('num')[0].firstChild;
  383. for (var i = 0; i < games.length; i++) {
  384. if (!games[i].classList.contains('inCategory')) {
  385. observer.observe(games[i], {
  386. attributes: true
  387. });
  388. games[i].classList.add("inCategory");
  389. col.nodeValue = Number(col.nodeValue) + 1;
  390. save();
  391. }
  392. }
  393. });
  394.  
  395. addTextField.value = null;
  396.  
  397. categoryList.appendChild(category);
  398. save();
  399.  
  400. function add() {
  401. addGameInCategory(addInCategoryButton);
  402. }
  403.  
  404. function del() {
  405. var gamesMas = category.querySelectorAll('.inCategory');
  406. var cat = category.parentNode.parentNode;
  407. for (var i = 0; i <= gamesMas.length - 1; i++) {
  408. gamesMas[i].classList.remove("inCategory");
  409. cat.appendChild(gamesMas[i]);
  410. }
  411. if (category.querySelectorAll('.push').length > 0) {
  412. var game = document.querySelectorAll('.selection');
  413. for (var j = 0; j < game.length; j++) {
  414. game[j].parentNode.remove();
  415. }
  416. }
  417. category.remove();
  418. save();
  419. }
  420.  
  421. function delGame() {
  422. remGames(remGamesButton);
  423. }
  424.  
  425. function sortByRankIncreas() {
  426.  
  427. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  428. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  429. for (var item = 0; item < AllItems; item++) {
  430. if (Number(items[item].getElementsByClassName('wishlist_rank')[0].value) > Number(items[item + 1].getElementsByClassName('wishlist_rank')[0].value)) {
  431. var temp = items[item];
  432. items[item] = items[item + 1];
  433. items[item + 1] = temp;
  434. }
  435. }
  436. }
  437.  
  438. for (var i = 0; i < items.length; i++) {
  439. category.appendChild(items[i]);
  440. }
  441. sortByRankButton.onclick = sortByRankDecreas;
  442. }
  443.  
  444. function sortByRankDecreas() {
  445.  
  446. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  447. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  448. for (var item = 0; item < AllItems; item++) {
  449. if (Number(items[item].getElementsByClassName('wishlist_rank')[0].value) < Number(items[item + 1].getElementsByClassName('wishlist_rank')[0].value)) {
  450. var temp = items[item];
  451. items[item] = items[item + 1];
  452. items[item + 1] = temp;
  453. }
  454. }
  455. }
  456.  
  457. for (var i = 0; i < items.length; i++) {
  458. category.appendChild(items[i]);
  459. }
  460. sortByRankButton.onclick = sortByRankIncreas;
  461. }
  462.  
  463. function sortByNameIncreas() {
  464.  
  465. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  466. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  467. for (var item = 0; item < AllItems; item++) {
  468. if (items[item].getElementsByTagName('h4')[0].firstChild.nodeValue.charAt(0) > items[item + 1].getElementsByTagName('h4')[0].firstChild.nodeValue.charAt(0)) {
  469. var temp = items[item];
  470. items[item] = items[item + 1];
  471. items[item + 1] = temp;
  472. }
  473. }
  474. }
  475.  
  476. for (var i = 0; i < items.length; i++) {
  477. category.appendChild(items[i]);
  478. }
  479. sortByNameButton.onclick = sortByNameDecreas;
  480. }
  481.  
  482. function sortByNameDecreas() {
  483.  
  484. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  485. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  486. for (var item = 0; item < AllItems; item++) {
  487. if (items[item].getElementsByTagName('h4')[0].firstChild.nodeValue.charAt(0) < items[item + 1].getElementsByTagName('h4')[0].firstChild.nodeValue.charAt(0)) {
  488. var temp = items[item];
  489. items[item] = items[item + 1];
  490. items[item + 1] = temp;
  491. }
  492. }
  493. }
  494.  
  495. for (var i = 0; i < items.length; i++) {
  496. category.appendChild(items[i]);
  497. }
  498. sortByNameButton.onclick = sortByNameIncreas;
  499. }
  500.  
  501. function sortByPriceIncreas() {
  502.  
  503. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  504. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  505. for (var item = 0; item < AllItems; item++) {
  506. var first = select(items[item]);
  507. var second = select(items[item + 1]);
  508. //alert(items[item].getElementsByClassName('price').length);
  509. if (first > second) {
  510. var temp = items[item];
  511. items[item] = items[item + 1];
  512. items[item + 1] = temp;
  513. }
  514. }
  515. }
  516.  
  517. function select(check) {
  518. try {
  519. return Number(check.getElementsByClassName('discount_final_price')[0].firstChild.nodeValue.substring(0, check.getElementsByClassName('discount_final_price')[0].firstChild.nodeValue.indexOf(" ")));
  520. } catch (ErrEvent) {
  521. return Number(check.getElementsByClassName('price')[0].firstChild.nodeValue.trim().substring(0, check.getElementsByClassName('price')[0].firstChild.nodeValue.trim().indexOf(" ")));
  522. }
  523. }
  524.  
  525. for (var i = 0; i < items.length; i++) {
  526. category.appendChild(items[i]);
  527. }
  528. sortByPriceButton.onclick = sortByPriceDecreas;
  529. }
  530.  
  531. function sortByPriceDecreas() {
  532.  
  533. var items = Array.prototype.slice.call(category.querySelectorAll('.wishlistRow'));
  534. for (var AllItems = items.length - 1; AllItems >= 0; AllItems--) {
  535. for (var item = 0; item < AllItems; item++) {
  536. var first = select(items[item]);
  537. var second = select(items[item + 1]);
  538. //alert(items[item].getElementsByClassName('price').length);
  539. if (first < second) {
  540. var temp = items[item];
  541. items[item] = items[item + 1];
  542. items[item + 1] = temp;
  543. }
  544. }
  545. }
  546.  
  547. function select(check) {
  548. try {
  549. return Number(check.getElementsByClassName('discount_final_price')[0].firstChild.nodeValue.substring(0, check.getElementsByClassName('discount_final_price')[0].firstChild.nodeValue.indexOf(" ")));
  550. } catch (ErrEvent) {
  551. return Number(check.getElementsByClassName('price')[0].firstChild.nodeValue.trim().substring(0, check.getElementsByClassName('price')[0].firstChild.nodeValue.trim().indexOf(" ")));
  552. }
  553. }
  554.  
  555. for (var i = 0; i < items.length; i++) {
  556. category.appendChild(items[i]);
  557. }
  558. sortByPriceButton.onclick = sortByPriceIncreas;
  559. }
  560.  
  561.  
  562. }
  563.  
  564. function delCheckBox(Button) {
  565. var game = Button.parentNode.parentNode.querySelectorAll('.inCategory');
  566. function check() {
  567. if (this.firstElementChild.checked === false) {
  568. this.firstElementChild.checked = true;
  569. } else {
  570. this.firstElementChild.checked = false;
  571. }
  572. }
  573.  
  574. for (var i = 0; i <= game.length - 1; i++) {
  575. if (game[i].classList.contains('inCategory')) {
  576. var checkBox = document.createElement('input');
  577. var text = document.createElement('button');
  578. text.appendChild(checkBox);
  579. text.appendChild(document.createTextNode("Select for remove"));
  580. text.className = "btnv6_blue_hoverfade btn_small ";
  581. text.style = "cursor: default; cursor: pointer; cursor: -moz-default; outline: none;position: relative; display: block; padding-right: 1%; margin-top: 1%;";
  582. text.type = "button";
  583. text.onclick = check;
  584. checkBox.type = "checkbox";
  585. checkBox.className = "selection";
  586. game[i].appendChild(text);
  587. }
  588. }
  589.  
  590. }
  591.  
  592. function addCheckBox() {
  593. var game = document.querySelectorAll('.wishlistRow');
  594. function check() {
  595. if (this.firstElementChild.checked === false) {
  596. this.firstElementChild.checked = true;
  597. } else {
  598. this.firstElementChild.checked = false;
  599. }
  600. }
  601.  
  602. for (var i = 0; i <= game.length - 1; i++) { //PROBLEM PLACE
  603. if (!game[i].classList.contains('inCategory') && game[i].querySelectorAll('.selection').length <= 0) {
  604. var checkBox = document.createElement('input');
  605. var text = document.createElement('button');
  606. text.appendChild(checkBox);
  607. text.appendChild(document.createTextNode("Add game to category"));
  608. text.className = "btnv6_blue_hoverfade btn_small ";
  609. text.style = "cursor: default; cursor: pointer; cursor: -moz-default; outline: none; position: relative; display: block; padding-right: 1%; margin-top: 1%;";
  610. text.type = "button";
  611. text.onclick = check;
  612. checkBox.type = "checkbox";
  613. checkBox.className = "selection";
  614. game[i].appendChild(text);
  615. }
  616. }
  617. }
  618.  
  619. function donate() {
  620. GM_addStyle(" .donatip { position: relative; display: inline-block;} .donatip .donatiptext { visibility: hidden; width: 120px; background-color: #2B475E; color: #67C1F5; text-align: center; border-radius: 6px; padding: 5px 0; /* Position the donatip */ position: absolute; z-index: 1; bottom: 100%; left: 50%; margin-left: -60px;} .donatip:hover .donatiptext {visibility: visible;}");
  621. donBut.firstChild.textContent = "Cancel";
  622. donBut.onclick = cancel;
  623. var help = document.createElement('span');
  624. help.className = 'help';
  625. help.innerHTML = '<a target="_blank" class="donatip" href="https://steamcommunity.com/tradeoffer/new/?partner=22861895&token=GtBPPaCq">' +
  626. '<img src="/public/shared/images/header/globalheader_logo.png" height="20">' +
  627. ' <span class="donatiptext">Help us via items</span>' +
  628. '</a>' +
  629. '<a target="_blank" class="donatip" href="https://www.paypal.me/rexedead">' +
  630. '<img src="https://www.paypalobjects.com/webstatic/i/logo/rebrand/ppcom-white.svg" height="18">' +
  631. '<span class="donatiptext">Help us via cent</span>' +
  632. '</a>';
  633. help.style = "position:absolute; margin-left:5px;";
  634.  
  635. var donParent = document.getElementById("barName");
  636. donParent.appendChild(help);
  637.  
  638. function cancel() {
  639. donParent.removeChild(help);
  640. donBut.firstChild.textContent = "DONATE";
  641. donBut.onclick = donate;
  642. }
  643. }
  644. }
  645.  
  646. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址