您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows unread comments on eRepublik articles
当前为
- // ==UserScript==
- // @name Unread eComments
- // @namespace http://www.erepublik.com
- // @description Shows unread comments on eRepublik articles
- // @include http://www.erepublik.com/*/article/*
- // @include https://www.erepublik.com/*/article/*
- // @version 0.0.6
- // @require https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_listValues
- // @grant GM_deleteValue
- // ==/UserScript==
- init();
- function init() {
- start(true);
- observeNewComments();
- deleteOldValues();
- }
- function deleteOldValues() {
- var maxArticles = 200;
- var storedValues = GM_listValues();
- console.log('Unread eComments: currently tracking ' + storedValues.length + ' article(s)');
- if(storedValues.length > maxArticles ){
- storedValues.sort(
- function sortFunction(a, b) {
- return getStoredData(a).registeredAt - getStoredData(b).registeredAt;
- }
- );
- var valuesToDelete = storedValues.length - maxArticles;
- console.log('Deleting comment info for ' + valuesToDelete + ' old article(s)');
- for(var i = 0; i < valuesToDelete; i++) {
- GM_deleteValue(storedValues[i]);
- }
- }
- }
- function start(isCountUnread) {
- var articleId = findArticleId();
- var commentsRead = getStoredData(articleId);
- if(commentsRead.registeredAt <= 0) {
- commentsRead.registeredAt = Math.round(new Date().getTime() / 1000); // timestamp in seconds
- }
- if(isCountUnread) {
- countUnread(commentsRead);
- }
- scanComments(commentsRead);
- setStoredData(articleId, commentsRead);
- }
- function observeNewComments() {
- var target = document.querySelector('#loadMoreComments');
- var observer = new MutationObserver(function(mutations) {
- start(false);
- });
- var config = { childList: true };
- observer.observe(target, config);
- }
- function scanComments(commentsRead) {
- var unreadComments = $('.comment-holder')
- .filter( function(index) {
- var commentId = $(this).attr('id').replace(/comment/, '');
- if(commentId in commentsRead.ids) {
- return false;
- } else {
- commentsRead.ids[commentId] = true;
- return true;
- }
- });
- unreadComments.css('background-color', '#e6f3f9');
- unreadComments.children('.comments-right')
- .children().andSelf()
- .css('background-color', '#e6f3f9');
- }
- function countUnread(commentsRead) {
- var nbrOfComments = parseInt($('#comments_button_on>span').text().match(/\d+/), 10);
- var unreadCount = nbrOfComments - commentsRead.commentsLastVisit;
- commentsRead.commentsLastVisit = nbrOfComments;
- if(unreadCount > 0){
- $('#comments_button_on>span').append(' *** ' + unreadCount + ' ***');
- }
- }
- function getStoredData(articleId) {
- var commentsRead = JSON.parse( GM_getValue(articleId, '{"registeredAt": 0, "commentsLastVisit": 0, "ids": {}}') );
- if(!commentsRead) {
- console.log('The stored data is likely to be corrupted.');
- }
- return commentsRead;
- }
- function setStoredData(articleId, commentsRead) {
- GM_setValue(articleId, JSON.stringify(commentsRead));
- }
- function findArticleId() {
- var id = $('.post_content > h2 > a').attr('href').replace(/\/1\/20/, '');
- id = id.substring(id.lastIndexOf('-')+1);
- return id;
- }