优化 Steam 的评分系统
// ==UserScript== // @name Steam 评分优化脚本 // @namespace https://greasyfork.org/zh-CN/users/113945-mogeko // @version 0.2.6 // @author neilwong; Mogeko (搬运) // @description 优化 Steam 的评分系统 // @license MIT // @icon https://besticon.herokuapp.com/icon?size=80..120..200&url=store.steampowered.com // @homepage https://github.com/mogeko/userscripts/tree/master/packages/better-steam-rating#readme // @homepageURL https://github.com/mogeko/userscripts/tree/master/packages/better-steam-rating#readme // @source https://github.com/mogeko/userscripts.git // @supportURL https://github.com/mogeko/userscripts/issues // @match http://store.steampowered.com/search* // @grant none // ==/UserScript== (function () { 'use strict'; function hideEle(item) { let parentNode = item.parentNode; let maxLoop = 15; while (parentNode.tagName !== "A" && maxLoop > 0) { parentNode = parentNode.parentNode; maxLoop--; } item.dataset.isCheck = "1"; parentNode.style.display = "none"; } function checkFn() { const minRealNum = 100; for (const item2 of document.querySelectorAll( ".responsive_search_name_combined" )) { if (item2.dataset.isCheck) return; let days = 0; const item = item2.querySelector(".search_review_summary"); const dateItem = item2.querySelector(".search_released"); if (dateItem) { const dateText = dateItem.innerText; const dateArr = dateText.replace("年", "/").replace("月", "/").replace("日", "").split("/"); if (dateArr.length > 2) { const gameDate = /* @__PURE__ */ new Date(); gameDate.setFullYear(dateArr[0]); gameDate.setMonth(dateArr[1] - 1); gameDate.setDate(dateArr[2]); days = ((/* @__PURE__ */ new Date()).getTime() - gameDate.getTime()) / 864e5; days = Number.parseInt(days); } } if (!item) { hideEle(item2); return; } const content = item.dataset.tooltipHtml; const contentArr = content.split("<br>"); if (contentArr.length !== 2) { console.log(content); return; } const last = contentArr[1]; const lastArr = last.split(" "); if (lastArr < 2) { console.log(content); return; } const num = lastArr[0].replace(/\,/g, ""); const rate = lastArr[2].replace("%", ""); const realNum = Number.parseInt(num * rate / 100); if (Number.isNaN(realNum)) { console.log(content); return; } let realRate = "-"; if (realNum && days) { realRate = realNum / days; realRate = realRate > 10 ? realRate.toFixed(0) : realRate.toFixed(1); } const innerHtml = `<span style="padding-left: 0.5em;width: 2em;display: inline-block;">${rate}</span><span style="width: 4.5em;display:inline-block;">${Number.parseInt( num * rate / 100 )}</span><span style="width: 3em;display:inline-block;">${days}</span><span style="width:3em;display:inline-block;">${realRate}</span>`; item.innerHTML = innerHtml; item.style.width = "13em"; item.style.marginLeft = "-13em"; item.style.backgroundColor = "#000"; item.style.backgroundImage = "none"; item.style.textAlign = "left"; item.style.color = "#fff"; item2.dataset.isCheck = "1"; if (realNum && realNum < minRealNum && realRate !== "-" && realRate < 0.1) { hideEle(item); } } } setInterval(() => { checkFn(); }, 2e3); })();