新增脚本 tampermonkey/v2ex.com/v2ex-mark-read.js 标记 V2ex 中已读的帖子标题,如果有新回复,帖子标题将会恢复未读状态。
parent
38519fc9dc
commit
b40c59ebe2
|
@ -0,0 +1,103 @@
|
||||||
|
// ==UserScript==
|
||||||
|
// @name V2ex Helper - Mark read
|
||||||
|
// @namespace http://tampermonkey.net/
|
||||||
|
// @version 0.1
|
||||||
|
// @description Mark read posts with background color and save state in json.
|
||||||
|
// @author You
|
||||||
|
// @match https://v2ex.com/*
|
||||||
|
// @icon https://www.google.com/s2/favicons?sz=64&domain=v2ex.com
|
||||||
|
// @require https://static.sunrui.ink:8888/tampermonkey.js?t=23423367
|
||||||
|
// @grant GM_addStyle
|
||||||
|
// @grant GM_getValue
|
||||||
|
// @grant GM_setValue
|
||||||
|
// @run-at document-start
|
||||||
|
// @license MIT
|
||||||
|
// ==/UserScript==
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
// 'use strict';
|
||||||
|
GM_addStyle(`
|
||||||
|
.cell.read {
|
||||||
|
background-color: antiquewhite;
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
|
||||||
|
function getWebsite() {
|
||||||
|
// Get website domain
|
||||||
|
return window.location.hostname;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getJsonDataObject() {
|
||||||
|
return JSON.parse(GM_getValue(getWebsite(), '{}'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUrlRead(url) {
|
||||||
|
// Set url as read
|
||||||
|
var data = getJsonDataObject();
|
||||||
|
data[url] = true;
|
||||||
|
GM_setValue(getWebsite(), JSON.stringify(data));
|
||||||
|
}
|
||||||
|
|
||||||
|
function isUrlRead(url) {
|
||||||
|
// Check if url is read
|
||||||
|
var data = getJsonDataObject();
|
||||||
|
return data[url] === true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMainPageCells() {
|
||||||
|
// Get main page cells
|
||||||
|
return document.querySelectorAll('#Main div.cell.item');
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTopicsPageCells() {
|
||||||
|
// Get topics page cells
|
||||||
|
return document.querySelectorAll('#TopicsNode .cell');
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCells() {
|
||||||
|
const mainCells = getMainPageCells();
|
||||||
|
const topicsCells = getTopicsPageCells();
|
||||||
|
if (mainCells.length > 0) {
|
||||||
|
return mainCells;
|
||||||
|
}
|
||||||
|
if (topicsCells.length > 0) {
|
||||||
|
return topicsCells;
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
function findLinks() {
|
||||||
|
return Array.from(getCells()).map((cell) => { return cell.querySelector('.item_title a').href; });
|
||||||
|
}
|
||||||
|
|
||||||
|
var pm = new PageManager();
|
||||||
|
|
||||||
|
const condition = () => {
|
||||||
|
return findLinks().length > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// record current page as read
|
||||||
|
setUrlRead(window.location.href);
|
||||||
|
|
||||||
|
pm.stage('Add color to viewd topics')
|
||||||
|
.on(condition)
|
||||||
|
.logLevel(1)
|
||||||
|
.act((logger) => {
|
||||||
|
logger('Add color to viewd topics');
|
||||||
|
// find all cells
|
||||||
|
var cells = getCells();
|
||||||
|
// add color to read topics
|
||||||
|
Array.from(cells).forEach((cell) => {
|
||||||
|
const link = cell.querySelector('.item_title a').href;
|
||||||
|
logger(`${link} is ${isUrlRead(link) ? 'read' : 'unread'}`);
|
||||||
|
if (isUrlRead(link)) {
|
||||||
|
cell.classList.add('read');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
logger('Done', 2);
|
||||||
|
return false;
|
||||||
|
})
|
||||||
|
.every(1000)
|
||||||
|
.run();
|
||||||
|
|
||||||
|
})();
|
Loading…
Reference in New Issue