您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add links for sorting user messages (excluding sent) in Reddit.
- // ==UserScript==
- // @name Add Reddit Message Sorting Links
- // @namespace AddRedditMessageSortingLinks
- // @description Add links for sorting user messages (excluding sent) in Reddit.
- // @version 1.0.1
- // @author jcunews
- // @include https://www.reddit.com/message/*
- // @grant none
- // ==/UserScript==
- (function(){
- var eleLinkTemplate = document.querySelectorAll(".menuarea li:not(.selected)"), eleMenu;
- function compareTitle(ele1, ele2) {
- var e1 = ele1.querySelector(".title"), e2 = ele2.querySelector(".title");
- if (!e1) e1 = ele1.querySelector(".subject-text");
- e1 = e1.textContent.toLowerCase();
- if (!e2) e2 = ele2.querySelector(".subject-text");
- e2 = e2.textContent.toLowerCase();
- if (e1 < e2) {
- return -1;
- } else if (e1 > e2) {
- return 1;
- } else return 0;
- }
- function compareUser(ele1, ele2) {
- ele1 = ele1.querySelector(".author,.correspondent>a").textContent.toLowerCase();
- ele2 = ele2.querySelector(".author,.correspondent>a").textContent.toLowerCase();
- if (ele1 < ele2) {
- return -1;
- } else if (ele1 > ele2) {
- return 1;
- } else return 0;
- }
- function compareSub(ele1, ele2) {
- var e1 = ele1.querySelector(".subreddit>a");
- e1 = e1 ? e1.href.toLowerCase() : "";
- e2 = ele2.querySelector(".subreddit>a");
- e2 = e2 ? e2.href.toLowerCase() : "";
- if (!e1 && !e2) return compareTime(ele1, ele2);
- if (e1 < e2) {
- return -1;
- } else if (e1 > e2) {
- return 1;
- } else return 0;
- }
- function compareTime(ele1, ele2) {
- ele1 = new Date(ele1.querySelector(".live-timestamp,time").getAttribute("datetime"));
- ele2 = new Date(ele2.querySelector(".live-timestamp,time").getAttribute("datetime"));
- if (ele1 < ele2) {
- return 1;
- } else if (ele1 > ele2) {
- return -1;
- } else return 0;
- }
- function doSort() {
- var eles = Array.prototype.slice.call(document.querySelectorAll("#siteTable>.thing")), i;
- if (!eles.length) return;
- var list = eles[0].parentNode;
- switch (this.getAttribute("by")) {
- case "title": eles.sort(compareTitle); break;
- case "user": eles.sort(compareUser); break;
- case "sub": eles.sort(compareSub); break;
- default: eles.sort(compareTime);
- }
- eles.forEach(function(val, idx) {
- list.insertBefore(val, list.children[idx]);
- });
- }
- if (!eleLinkTemplate.length) return;
- eleLinkTemplate = eleLinkTemplate[eleLinkTemplate.length-1];
- eleMenu = eleLinkTemplate.parentNode;
- [
- { caption: "Sort by title", by: "title" },
- { caption: "Sort by user", by: "user" },
- { caption: "Sort by subreddit", by: "sub" },
- { caption: "Sort by time", by: "time" }
- ].forEach(function(val, idx) {
- var menuitem = eleLinkTemplate.cloneNode(true), link = menuitem.lastElementChild;
- if (!idx) {
- menuitem.style.marginLeft = "3ex";
- menuitem.removeChild(menuitem.firstElementChild);
- }
- link.textContent = val.caption;
- link.setAttribute("by", val.by);
- link.href = "javascript:void(0)";
- link.onclick = doSort;
- eleMenu.appendChild(menuitem);
- });
- })();