Greasy Fork镜像 支持简体中文。

Add Reddit Message Sorting Links

Add links for sorting user messages (excluding sent) in Reddit.

  1. // ==UserScript==
  2. // @name Add Reddit Message Sorting Links
  3. // @namespace AddRedditMessageSortingLinks
  4. // @description Add links for sorting user messages (excluding sent) in Reddit.
  5. // @version 1.0.1
  6. // @author jcunews
  7. // @include https://www.reddit.com/message/*
  8. // @grant none
  9. // ==/UserScript==
  10.  
  11. (function(){
  12. var eleLinkTemplate = document.querySelectorAll(".menuarea li:not(.selected)"), eleMenu;
  13.  
  14. function compareTitle(ele1, ele2) {
  15. var e1 = ele1.querySelector(".title"), e2 = ele2.querySelector(".title");
  16. if (!e1) e1 = ele1.querySelector(".subject-text");
  17. e1 = e1.textContent.toLowerCase();
  18. if (!e2) e2 = ele2.querySelector(".subject-text");
  19. e2 = e2.textContent.toLowerCase();
  20. if (e1 < e2) {
  21. return -1;
  22. } else if (e1 > e2) {
  23. return 1;
  24. } else return 0;
  25. }
  26.  
  27. function compareUser(ele1, ele2) {
  28. ele1 = ele1.querySelector(".author,.correspondent>a").textContent.toLowerCase();
  29. ele2 = ele2.querySelector(".author,.correspondent>a").textContent.toLowerCase();
  30. if (ele1 < ele2) {
  31. return -1;
  32. } else if (ele1 > ele2) {
  33. return 1;
  34. } else return 0;
  35. }
  36.  
  37. function compareSub(ele1, ele2) {
  38. var e1 = ele1.querySelector(".subreddit>a");
  39. e1 = e1 ? e1.href.toLowerCase() : "";
  40. e2 = ele2.querySelector(".subreddit>a");
  41. e2 = e2 ? e2.href.toLowerCase() : "";
  42. if (!e1 && !e2) return compareTime(ele1, ele2);
  43. if (e1 < e2) {
  44. return -1;
  45. } else if (e1 > e2) {
  46. return 1;
  47. } else return 0;
  48. }
  49.  
  50. function compareTime(ele1, ele2) {
  51. ele1 = new Date(ele1.querySelector(".live-timestamp,time").getAttribute("datetime"));
  52. ele2 = new Date(ele2.querySelector(".live-timestamp,time").getAttribute("datetime"));
  53. if (ele1 < ele2) {
  54. return 1;
  55. } else if (ele1 > ele2) {
  56. return -1;
  57. } else return 0;
  58. }
  59.  
  60. function doSort() {
  61. var eles = Array.prototype.slice.call(document.querySelectorAll("#siteTable>.thing")), i;
  62. if (!eles.length) return;
  63. var list = eles[0].parentNode;
  64. switch (this.getAttribute("by")) {
  65. case "title": eles.sort(compareTitle); break;
  66. case "user": eles.sort(compareUser); break;
  67. case "sub": eles.sort(compareSub); break;
  68. default: eles.sort(compareTime);
  69. }
  70. eles.forEach(function(val, idx) {
  71. list.insertBefore(val, list.children[idx]);
  72. });
  73. }
  74.  
  75. if (!eleLinkTemplate.length) return;
  76. eleLinkTemplate = eleLinkTemplate[eleLinkTemplate.length-1];
  77. eleMenu = eleLinkTemplate.parentNode;
  78. [
  79. { caption: "Sort by title", by: "title" },
  80. { caption: "Sort by user", by: "user" },
  81. { caption: "Sort by subreddit", by: "sub" },
  82. { caption: "Sort by time", by: "time" }
  83. ].forEach(function(val, idx) {
  84. var menuitem = eleLinkTemplate.cloneNode(true), link = menuitem.lastElementChild;
  85. if (!idx) {
  86. menuitem.style.marginLeft = "3ex";
  87. menuitem.removeChild(menuitem.firstElementChild);
  88. }
  89. link.textContent = val.caption;
  90. link.setAttribute("by", val.by);
  91. link.href = "javascript:void(0)";
  92. link.onclick = doSort;
  93. eleMenu.appendChild(menuitem);
  94. });
  95. })();

QingJ © 2025

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