Thingiverse - Multifix

Fixes multiple Thingiverse site bugs, and makes the site a bit easier to use. See source for details

当前为 2022-03-29 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Thingiverse - Multifix
  3. // @namespace https://greasyfork.org/users/77886
  4. // @version 0.1
  5. // @description Fixes multiple Thingiverse site bugs, and makes the site a bit easier to use. See source for details
  6. // Features and Fixes:
  7. // Fix: Removes collections with a NULL description from Thingiverse API requests, which can cause the infamous "Something went wrong" response
  8. // Fix: Returns up to 9,999 collections so that you can assign a thing to any of your collections (instead of the 20 most recent)
  9. // Feature: Sort collections by name (instead of by Popularity or Newest)
  10. // Feature: Return 100 search results (instead of 20)
  11. // @author muchtall
  12. // @license MIT
  13. // @match https://www.thingiverse.com/*
  14. // @require https://cdn.jsdelivr.net/npm/xhook@1.4.9/dist/xhook.min.js
  15. // @grant GM_getValue
  16. // @run-at document-start
  17. // ==/UserScript==
  18.  
  19. // Get user's perferences on what features are enabled. All features are enabled by default.
  20. // To disable any of these features, set a Value in ViolentMoney like so:
  21. // Key: more_search_results
  22. // Value: false
  23. let fix_borked_collections = GM_getValue('fix_borked_collections', true);
  24. let fix_missing_collections = GM_getValue('fix_missing_collections', true);
  25. let more_search_results = GM_getValue('more_search_results', true);
  26. let sort_collections = GM_getValue('sort_collections', true);
  27.  
  28. var userscriptname = 'Thingiverse - Responses Multifix';
  29. console.log(userscriptname + ' - Started');
  30. if ( fix_missing_collections ) {
  31. console.log(userscriptname + ' - Enabled feature: Fix Missing Collections');
  32. } else {
  33. console.log(userscriptname + ' - DISABLED feature: Fix Missing Collections');
  34. }
  35. if ( more_search_results ) {
  36. console.log(userscriptname + ' - Enabled feature: More Search Results');
  37. } else {
  38. console.log(userscriptname + ' - DISABLED feature: More Search Results');
  39. }
  40. if ( fix_borked_collections ) {
  41. console.log(userscriptname + ' - Enabled feature: Fix Borked Collections');
  42. } else {
  43. console.log(userscriptname + ' - DISABLED feature: Fix Borked Collections');
  44. }
  45. if ( sort_collections ) {
  46. console.log(userscriptname + ' - Enabled feature: Sort Collections');
  47. } else {
  48. console.log(userscriptname + ' - DISABLED feature: Sort Collections');
  49. }
  50.  
  51. console.log('Thingiverse - Multifix - Started');
  52.  
  53. xhook.before(function(request) {
  54. if ( more_search_results ) {
  55. if(request.url.match(/https:\/\/api.thingiverse.com\/search\/\?.*/)) {
  56. console.log(userscriptname + ' - More Search Results - Old URL:' + request.url);
  57. request.url = request.url.replace(/per_page=[0-9]+/,"per_page=100");
  58. console.log(userscriptname + ' - More Search Results - New URL:' + request.url);
  59. }
  60. }
  61. if ( fix_missing_collections ) {
  62. if(request.url.match(/https:\/\/api.thingiverse.com\/users\/[^\/]+\/search\/\?.*type=collections.*/)) {
  63. console.log(userscriptname + ' - Fix Missing Collections - Old URL:' + request.url);
  64. request.url = request.url.replace(/per_page=[0-9]+/,"per_page=9999");
  65. console.log(userscriptname + ' - Fix Missing Collections - New URL:' + request.url);
  66. }
  67. }
  68. });
  69.  
  70. xhook.after(function(request, response) {
  71. if(request.url.match(/users\/[^\/]+\/search\/\?.*type=collections.*/)) {
  72. if ( fix_borked_collections ) {
  73. // --- Fix Borked Collections ---
  74. console.log(userscriptname + ' - Fix Borked Collections - Found URL: ' + request.url);
  75. var json = JSON.parse(response.text);
  76. var i=json.hits.length;
  77. while (i--) {
  78. if(json.hits[i].name === null){
  79. console.log(userscriptname + ' - Fix Borked Collections - Removed borked collection: ' + json.hits[i].id);
  80. json.hits.splice(i,1);
  81. } else {
  82. //console.log("Keeping good collection: " + json.hits[i].id);
  83. }
  84. }
  85. }
  86. if ( sort_collections ) {
  87. // --- Sort collections by Name ---
  88. json.hits.sort(function (a, b) {
  89. return a.name.localeCompare(b.name);
  90. });
  91. console.log(userscriptname + ' - Sorted Collections - Collections sorted by name');
  92. }
  93. // Send response to browser
  94. response.text = JSON.stringify(json);
  95. }
  96. });