Greasy Fork 还支持 简体中文。

Greasy Fork - Change Default Script Sort on User Profiles

Change default script sort on user profiles

目前為 2016-08-11 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Greasy Fork - Change Default Script Sort on User Profiles
  3. // @namespace https://greasyfork.org/users/649
  4. // @version 1.0
  5. // @description Change default script sort on user profiles
  6. // @author Adrien Pyke
  7. // @match *://greasyfork.org/en/users/*
  8. // @grant GM_getValue
  9. // @grant GM_setValue
  10. // @grant GM_registerMenuCommand
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. var Util = {
  17. getQueryParameter: function(name, url) {
  18. if (!url) url = window.location.href;
  19. name = name.replace(/[\[\]]/g, "\\$&");
  20. var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
  21. results = regex.exec(url);
  22. if (!results) return null;
  23. if (!results[2]) return '';
  24. return decodeURIComponent(results[2].replace(/\+/g, " "));
  25. },
  26.  
  27. updateQueryString: function(key, value, url) {
  28. if (!url) url = window.location.href;
  29. var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
  30. hash;
  31.  
  32. if (re.test(url)) {
  33. if (typeof value !== 'undefined' && value !== null)
  34. return url.replace(re, '$1' + key + "=" + value + '$2$3');
  35. else {
  36. hash = url.split('#');
  37. url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
  38. if (typeof hash[1] !== 'undefined' && hash[1] !== null)
  39. url += '#' + hash[1];
  40. return url;
  41. }
  42. }
  43. else {
  44. if (typeof value !== 'undefined' && value !== null) {
  45. var separator = url.indexOf('?') !== -1 ? '&' : '?';
  46. hash = url.split('#');
  47. url = hash[0] + separator + key + '=' + value;
  48. if (typeof hash[1] !== 'undefined' && hash[1] !== null)
  49. url += '#' + hash[1];
  50. return url;
  51. }
  52. else
  53. return url;
  54. }
  55. }
  56. };
  57.  
  58. var Config = {
  59. load: function() {
  60. var defaults = {
  61. sort: 'daily-installs'
  62. };
  63.  
  64. var cfg = GM_getValue('cfg');
  65. if (!cfg) return defaults;
  66.  
  67. return JSON.parse(cfg);
  68. },
  69.  
  70. save: function (cfg) {
  71. GM_setValue('cfg', JSON.stringify(cfg));
  72. },
  73.  
  74. setup: function() {
  75. var createSelect = function(label, options, value) {
  76. var select = document.createElement('select');
  77. select.style.margin = '2px';
  78. var optgroup = document.createElement('optgroup');
  79. if (label) {
  80. optgroup.setAttribute('label', label);
  81. }
  82. select.appendChild(optgroup);
  83. options.forEach(function(opt) {
  84. var option = document.createElement('option');
  85. option.setAttribute('value', opt.value);
  86. option.textContent = opt.text;
  87. optgroup.appendChild(option);
  88. });
  89. select.value = value;
  90. return select;
  91. };
  92.  
  93. var createButton = function(text, onclick) {
  94. var button = document.createElement('button');
  95. button.style.margin = '2px';
  96. button.textContent = text;
  97. button.onclick = onclick;
  98. return button;
  99. };
  100.  
  101. var init = function(cfg) {
  102. var div = document.createElement('div');
  103. div.style.backgroundColor = 'white';
  104. div.style.border = '1px solid black';
  105. div.style.position = 'absolute';
  106. div.style.top = '0';
  107. div.style.right = '0';
  108.  
  109. var sort = createSelect('Default Sort', [
  110. { value: 'daily-installs', text: 'Daily installs' },
  111. { value: 'total_installs', text: 'Total installs' },
  112. { value: 'ratings', text: 'Ratings' },
  113. { value: 'created', text: 'Created' },
  114. { value: 'updated', text: 'Updated' },
  115. { value: 'name', text: 'Name' }
  116. ], cfg.sort);
  117. div.appendChild(sort);
  118.  
  119. div.appendChild(document.createElement('br'));
  120.  
  121. div.appendChild(createButton('Save', function(e) {
  122. var settings = {
  123. sort: sort.value
  124. };
  125. Config.save(settings);
  126. div.remove();
  127. }));
  128.  
  129. div.appendChild(createButton('Cancel', function(e) {
  130. div.remove();
  131. }));
  132.  
  133. document.body.appendChild(div);
  134. };
  135. init(Config.load());
  136. }
  137. };
  138.  
  139. GM_registerMenuCommand('GreasyFork Sort Settings', Config.setup);
  140.  
  141. var dailyInstalls = document.querySelector('#script-list-sort > ul > li:nth-child(1) > a');
  142. if (dailyInstalls) {
  143. dailyInstalls.href = Util.updateQueryString('sort', 'daily-installs', dailyInstalls.href);
  144. }
  145.  
  146. var sort = Util.getQueryParameter('sort');
  147. if (!sort) {
  148. var cfg = Config.load();
  149. window.location.href = Util.updateQueryString('sort', cfg.sort);
  150. }
  151. })();