マイリストのページで既読漫画の背景色を変えます
< Feedback on Web漫画アンテナ 既読対応
24時間経過後の日時表記がYYYY/MM/DDだったのが月日表記に変わったことによる不具合対応 新年になった時に昨年部分がおかしくなるかもしれんけど、年一のことなんで未対応
// ==UserScript== // @name Web漫画アンテナ 既読対応 // @namespace // @description マイリストのページで既読漫画の背景色を変えます // @version 0.17 // @author kiyo // @match https://webcomics.jp/mylist // @match https://webcomics.jp/mylist* // @grant none // @namespace // ==/UserScript== (function() { const myStorage = JSON.parse(localStorage._supportRead || "{}"); const readColor= "#c5c5c6"; const nowDate = new Date(); const timeToMsec = (num, unit) => { // サイト内の時間表示が切り上げなので-1しておく(24時に更新した作品が時間により日付が前後してしまうのを回避) num = num - 1; switch (unit) { case "時間前": return num * 60 * 60 * 1000; case "分前": return num * 60 * 1000; case "秒前": return num * 1000; default: console.error(`timeToMsec Error: ${num}${unit}`); } } const dateToStr = (year, month, day) => `${year}${("0"+month).slice(-2)}${("0"+day).slice(-2)}`; const calcAgoDate = (nowDate, num, unit) => { let ago = timeToMsec(parseInt(num), unit); //console.log(ago, num, unit); const agoDate = new Date(nowDate - ago); const year = agoDate.getFullYear(); const month = agoDate.getMonth() + 1; const day = agoDate.getDate(); return dateToStr(year, month, day); } const calcTukihiDate = (tukihi) => { const year = nowDate.getFullYear(); const month = tukihi.replace(/月.*/g, ""); const day = tukihi.replace(/.*月/g, "").replace(/日.*/g, ""); return dateToStr(year, month, day); } const e = { entry: document.querySelectorAll(".entry"), thumb: document.querySelectorAll(".entry > .entry-thumb > a > img"), date: document.querySelectorAll(".entry > .entry-date"), title: document.querySelectorAll(".entry > .entry-title > [href]") }; //function test(){console.log(this.i +","+ this.mangaId +","+ this.date);}; function handleEvent(){ const {i, mangaId, date} = this; e.entry[i].style.background = readColor; // 重複チェック&追加 if (!(mangaId in myStorage)) { myStorage[mangaId] = [date]; } else if (!(myStorage[mangaId].some(val => val === date))) { myStorage[mangaId].push(date); } // 10MB(10485760文字)以上になったら先頭から削除 if (JSON.stringify(myStorage).length > 10485760) myStorage[mangaId].shift(); // localStorageに入れる localStorage._supportRead = JSON.stringify(myStorage); } for (let i = 0, len = e.entry.length; i < len; i++) { const mangaId = e.thumb[i].src.split("/").slice(-1)[0].replace(".jpg", ""); // 24時間以内の更新だと表記が変わる ※以前は24時間以降はYYYY/MM/DDだったが月日表記に変わった //console.log(e.date[i].textContent) const dateText = e.date[i].textContent.replace(/\n|\t| /g, ''); console.log("dateText="+dateText) const date = /^\d+時間前|^\d+分前|^\d+秒前/.test(dateText) ? calcAgoDate(nowDate, dateText.match(/^\d+/)[0], dateText.match(/時間前|分前|秒前/)[0]) :calcTukihiDate(dateText); console.log("date="+date) if (mangaId in myStorage && myStorage[mangaId].some(val => val === date)) e.entry[i].style.background = readColor; e.title[i].addEventListener("click", {i, mangaId, date, handleEvent}); e.title[i].addEventListener("auxclick", {i, mangaId, date, handleEvent}); if (e.entry[i].querySelector(".entry-text > [href]")) { e.entry[i].querySelector(".entry-text > [href]").addEventListener("click", {i, mangaId, date, handleEvent}); e.entry[i].querySelector(".entry-text > [href]").addEventListener("auxclick", {i, mangaId, date, handleEvent}); } } })();
Sign in to post a reply.
24時間経過後の日時表記がYYYY/MM/DDだったのが月日表記に変わったことによる不具合対応
新年になった時に昨年部分がおかしくなるかもしれんけど、年一のことなんで未対応