您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hides activity from certain boards in the recent topics list
当前为
// ==UserScript== // @name WaniKani Recent Topics Filter // @namespace ajpazder // @description Hides activity from certain boards in the recent topics list // @version 1.0.0 // @author Johnathon Pazder // @copyright 2015+, Johnathon Pazder // @license MIT; http://opensource.org/licenses/MIT // @include http://www.wanikani.com/ // @include https://www.wanikani.com/ // @include http://www.wanikani.com/dashboard // @include https://www.wanikani.com/dashboard // @run-at document-end // @grant none // ==/UserScript== $(function () { // To exlcude topics from a specific board, set "shouldBeIgnored" to true // for the desired board(s) below. Recent posts from these boards will no // longer be shown in the "Recent Community Chat Topics" list. var boards = [ { title: "API And Third-Party Apps", homepageUrl: "/chat/api-and-third-party-apps", shouldBeIgnored: false }, { title: "Kanji And Japanese", homepageUrl: "/chat/kanji-and-japanese", shouldBeIgnored: false }, { title: "WaniKani", homepageUrl: "/chat/wanikani", shouldBeIgnored: false }, { title: "Campfire", homepageUrl: "/chat/campfire", shouldBeIgnored: false } ]; // Leave the rest of this alone, unless you know what you're doing. //-----------------------------------------------------------------// indicateFilteringStarted(); var mostRecentTopicsFromAllBoards = []; var getBoardRequests = []; boards.forEach(function (board) { if (board.shouldBeIgnored) return; getBoardRequests.push($.get(board.homepageUrl, function (html) { var mostRecentTopics = getTopFiveMostRecentTopicsFromBoard(html); mostRecentTopics.forEach(function (topic) { topic.board = board; }); mostRecentTopicsFromAllBoards = mostRecentTopicsFromAllBoards.concat(mostRecentTopics); })); }); $.when.apply($, getBoardRequests).done(function () { var numberOfTopicsShownInRecentTopicsList = 5; var topicsToShowOnDashboard = mostRecentTopicsFromAllBoards .sort(sortByLastPostNewestFirst) .slice(0, numberOfTopicsShownInRecentTopicsList); updateMostRecentTopicsList(topicsToShowOnDashboard); indicateFilteringStopped(); }); }); function indicateFilteringStarted() { $(".forum-topics-list h3").append('<span id="waitingForFilterLabel">(filtering...)</span>'); } function indicateFilteringStopped() { $("#waitingForFilterLabel").remove(); } function getTopFiveMostRecentTopicsFromBoard(boardIndexHtml) { var topicTableRows = $(boardIndexHtml).find(".forum-topics-list tr"); var numberOfUnpinnedTopicsSeen = 0; var desiredNumberOfUnpinnedTopics = 5; var topics = []; topicTableRows.each(function () { if (numberOfUnpinnedTopicsSeen === desiredNumberOfUnpinnedTopics) return false; // Stop iterating. var currentRow = $(this); if (isHeaderRow(currentRow)) return; // Skip this row. var topic = createTopicObjectFromTableRow(currentRow); topics.push(topic); if (!topic.isPinned) numberOfUnpinnedTopicsSeen++; }); return takeMostRecentTopics(topics, 5); } function isHeaderRow(row) { return row.find("th").length > 1; } function createTopicObjectFromTableRow(topicRow) { var isPinned = topicRow.find(".icon-pushpin").length > 0; var topicTitle = topicRow.find(".topic-title").first().text(); var lastPostAuthor = topicRow.children("td:last-child").find('a[href*="community/people"]').first().text(); var linkToTopic = topicRow.find("a").first().attr("href"); var timeElement = topicRow.find("time").first(); var lastPostTime = new Date(timeElement.attr("datetime")); return { isPinned: isPinned, title: topicTitle, url: linkToTopic, lastPost: { author: lastPostAuthor, time: lastPostTime } }; } function takeMostRecentTopics(topics, amount) { var topicsByPostDate = topics.sort(sortByLastPostNewestFirst); var mostRecentTopics = topics.slice(0, amount); return mostRecentTopics; } function sortByLastPostNewestFirst(a, b) { return ((a.lastPost.time > b.lastPost.time) ? -1 : ((a.lastPost.time < b.lastPost.time) ? 1 : 0)); } function updateMostRecentTopicsList(topics) { var topicIndex = 0; $(".forum-topics-list tr").each(function() { if (isSeparator(this)) return; var topic = topics[topicIndex]; $(this).replaceWith(createTopicInfoRow(topic)); topicIndex++; }); // Get fuzzy dates on our updated topic list. DateTime.activateFuzzyDate(); } function isSeparator(tableRow) { return $(tableRow).find("td").length === 1; } function createTopicInfoRow(topic) { var lastPostDateTime = topic.lastPost.time.toISOString(); return '<tr>' + '<td class="description">' + '<a href="' + topic.url + '" class="topic-title">' + topic.title + '</a><br>@ <a href="' + topic.board.homepageUrl + '">' + topic.board.title + '</a>' + '</td>' + '<td>' + '<a href="' + topic.url + '"><time class="timeago" datetime="' + lastPostDateTime + '" title="' + topic.lastPost.time.toString() + '">' + lastPostDateTime + '</time></a>' + '<br>by <a href="/community/people/' + topic.lastPost.author + '" target="_blank">' + topic.lastPost.author + '</a>' + '</td>' + '</tr>'; }