RSortBtn

Redditに独自のソート機能を追加する

  1. // ==UserScript==
  2. // @name RSortBtn
  3. // @namespace r-sort-btn
  4. // @version 0.1.3
  5. // @description Redditに独自のソート機能を追加する
  6. // @include *old.reddit.com*
  7.  
  8. // @exclude /comments/
  9. // @exclude /Dashboard
  10. // @exclude com/toolbar/
  11. // @exclude com/tb/
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15.  
  16. // 強制終了URL
  17. //var url = location.href;
  18. //if (url.match(/\/user\//) || url.match(/\/comments/) || url.match(/\/r\/Dashboard/) || url.match(/com\/toolbar\//) || url.match(/com\/tb\//)) {
  19. // exit();
  20. //}
  21.  
  22. var btnSelectedBgColor = 'red';
  23.  
  24. $(function () {
  25. $('#siteTable').parent().prepend('<div id="rsbtnArea"></div>');
  26. $('#rsbtnArea').append('<button class="rsbtn" id="rsDefaultBtn">デフォルト</button>');
  27. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeSort" id="rsIkioiBtn">勢い順</button>');
  28. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeSort" id="rsCommentBtn">コメント数順</button>');
  29. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeSort" id="rsScoreBtn">スコア順</button>');
  30. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeSort" id="rsNewBtn">新着順</button>');
  31. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs1hBtn">~1時間</button>');
  32. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs3hBtn">~3時間</button>');
  33. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs12hBtn">~12時間</button>');
  34. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs24hBtn">~24時間</button>');
  35. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs72hBtn">~72時間</button>');
  36. $('#rsbtnArea').append('<button class="rsbtn rsbtnTypeTime" id="rs1wBtn">~1週間</button>');
  37. var ccc = 0;
  38. // 各サブミにソート情報付与
  39. $(".linklisting > .thing").each(function(i) {
  40. // 投稿時間
  41. var post_time = new Date($(this).find('time').attr('title'));
  42. // コメント数
  43. var comment_str = $(this).find('.comments').text();
  44. var comment_num = parseInt(comment_str);
  45. if (isNaN(comment_num)) {
  46. comment_num = 0;
  47. }
  48. ccc += comment_num;
  49. // 現在時間
  50. var now_time = new Date();
  51. // 経過時間
  52. var keika_fun = (now_time - post_time) / (1000 * 60);
  53. // 勢い計算
  54. var ikioi = (comment_num / keika_fun) * 60 * 24;
  55. ikioi *= 10;
  56. ikioi = Math.floor(ikioi);
  57. ikioi /= 10;
  58. // デフォルト
  59. var rank = $(this).find('.rank').text();
  60. var rank_num = parseInt(rank);
  61. if (isNaN(rank_num)) {
  62. rank_num = 0;
  63. }
  64. // スコア
  65. var unvoted = $(this).find('.score.unvoted').text();
  66. var unvoted_num = parseInt(unvoted);
  67. if (isNaN(unvoted_num)) {
  68. unvoted_num = 0;
  69. }
  70.  
  71. // 属性挿入
  72. $(this).attr('ikioi', ikioi * 10);
  73. $(this).find('.entry').prepend('<span style="color:red; font-size: 1.2em; float: right; margin-left: 10px;">' + ikioi + '</span>');
  74. $(this).attr('comment_num', comment_num);
  75. $(this).attr('rank_num', rank_num);
  76. $(this).attr('unvoted_num', unvoted_num);
  77. $(this).attr('keika_fun', keika_fun);
  78. if (keika_fun <= 60) {
  79. $(this).attr('rs1hBtn', 'yes');
  80. }
  81. if (keika_fun <= 180) {
  82. $(this).attr('rs3hBtn', 'yes');
  83. }
  84. if (keika_fun <= 720) {
  85. $(this).attr('rs12hBtn', 'yes');
  86. }
  87. if (keika_fun <= 1440) {
  88. $(this).attr('rs24hBtn', 'yes');
  89. }
  90. if (keika_fun <= 4320) {
  91. $(this).attr('rs72hBtn', 'yes');
  92. }
  93. if (keika_fun <= 10080) {
  94. $(this).attr('rs1wBtn', 'yes');
  95. }
  96. });
  97. });
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. $.fn.eachsort = function(cb) {
  105. return this.each(function(){
  106. return $(this).html(
  107. $(this).children('.thing').sort(cb)
  108. );
  109. });
  110. }
  111. $(function() {
  112. $('#rsDefaultBtn').click(function() {
  113. $('.rsbtn').css('background-color', '');
  114. $(".linklisting > .thing").show();
  115. $("#siteTable").eachsort(function(a, b) {
  116. return parseInt($(a).attr('rank_num'), 10) - parseInt($(b).attr('rank_num'), 10);
  117. });
  118. });
  119. $('#rsIkioiBtn').click(function() {
  120. $('.rsbtnTypeSort').css('background-color', '');
  121. $(this).css('background-color', btnSelectedBgColor);
  122. $("#siteTable").eachsort(function(a, b) {
  123. return parseInt($(b).attr('ikioi'), 10) - parseInt($(a).attr('ikioi'), 10);
  124. });
  125. });
  126. $('#rsCommentBtn').click(function() {
  127. $('.rsbtnTypeSort').css('background-color', '');
  128. $(this).css('background-color', btnSelectedBgColor);
  129. $("#siteTable").eachsort(function(a, b) {
  130. return parseInt($(b).attr('comment_num'), 10) - parseInt($(a).attr('comment_num'), 10);
  131. });
  132. });
  133. $('#rsScoreBtn').click(function() {
  134. $('.rsbtnTypeSort').css('background-color', '');
  135. $(this).css('background-color', btnSelectedBgColor);
  136. $("#siteTable").eachsort(function(a, b) {
  137. return parseInt($(b).attr('unvoted_num'), 10) - parseInt($(a).attr('unvoted_num'), 10);
  138. });
  139. });
  140. $('#rsNewBtn').click(function() {
  141. $('.rsbtnTypeSort').css('background-color', '');
  142. $(this).css('background-color', btnSelectedBgColor);
  143. $("#siteTable").eachsort(function(a, b) {
  144. return parseInt($(a).attr('keika_fun'), 10) - parseInt($(b).attr('keika_fun'), 10);
  145. });
  146. });
  147. $('#rs1hBtn').click(function() {
  148. $('.rsbtnTypeTime').css('background-color', '');
  149. $(this).css('background-color', btnSelectedBgColor);
  150. $(".linklisting > .thing").show();
  151. $(".linklisting > .thing:not([rs1hBtn]").hide();
  152. });
  153. $('#rs3hBtn').click(function() {
  154. $('.rsbtnTypeTime').css('background-color', '');
  155. $(this).css('background-color', btnSelectedBgColor);
  156. $(".linklisting > .thing").show();
  157. $(".linklisting > .thing:not([rs3hBtn]").hide();
  158. });
  159. $('#rs12hBtn').click(function() {
  160. $('.rsbtnTypeTime').css('background-color', '');
  161. $(this).css('background-color', btnSelectedBgColor);
  162. $(".linklisting > .thing").show();
  163. $(".linklisting > .thing:not([rs12hBtn]").hide();
  164. });
  165. $('#rs24hBtn').click(function() {
  166. $('.rsbtnTypeTime').css('background-color', '');
  167. $(this).css('background-color', btnSelectedBgColor);
  168. $(".linklisting > .thing").show();
  169. $(".linklisting > .thing:not([rs24hBtn]").hide();
  170. });
  171. $('#rs72hBtn').click(function() {
  172. $('.rsbtnTypeTime').css('background-color', '');
  173. $(this).css('background-color', btnSelectedBgColor);
  174. $(".linklisting > .thing").show();
  175. $(".linklisting > .thing:not([rs72hBtn]").hide();
  176. });
  177. $('#rs1wBtn').click(function() {
  178. $('.rsbtnTypeTime').css('background-color', '');
  179. $(this).css('background-color', btnSelectedBgColor);
  180. $(".linklisting > .thing").show();
  181. $(".linklisting > .thing:not([rs1wBtn]").hide();
  182. });
  183. });
  184.