Warning: fopen(/www/sites/update.greasyfork.icu/index/store/temp/342d9424e433f5e54aac643a38cc2850.js): failed to open stream: No space left on device in /www/sites/update.greasyfork.icu/index/scriptControl.php on line 65
// ==UserScript== // @name m-team 馒头 列表缩略图 // @namespace https://github.com/xianSheng-yo/m-team-image-thumbnail/edit/main/image-thumbnail.user.js // @author xianSheng-yo // @version 1.0.04-2025-05-19 // @description 馒头站列表显示缩略图,鼠标移入放大预览。 // @copyright 2025, xianSheng-yo (https://github.com/xianSheng-yo) // @match https://*.m-team.cc/browse/* // @icon https://static.m-team.cc/static/media/logo.80b63235eaf702e44a8d.png // @grant unsafeWindow // @run-at document-start // @license GPL-2.0 // @downloadURL https://update.greasyfork.icu/scripts/536506/m-team%20%E9%A6%92%E5%A4%B4%20%E5%88%97%E8%A1%A8%E7%BC%A9%E7%95%A5%E5%9B%BE.user.js // @updateURL https://update.greasyfork.icu/scripts/536506/m-team%20%E9%A6%92%E5%A4%B4%20%E5%88%97%E8%A1%A8%E7%BC%A9%E7%95%A5%E5%9B%BE.meta.js // ==/UserScript== (function () { "use strict"; const targetKeyword = "api/torrent/search"; const thumbnailImgClassName = "m-team-img-thumbnail"; const previewImgId = "m-team-img-preview"; const appendImageElement = (data) => { const timer = setTimeout(() => { const tbody = document.querySelector("tbody"); const trs = tbody.childNodes; document .querySelectorAll(`.${thumbnailImgClassName}`) .forEach((el) => el.remove()); trs.forEach((tr, i) => { const td = tr.childNodes[1]; td.childNodes[0].style.flex = "1"; const div = document.createElement("div"); div.style.display = "flex"; const img = document.createElement("img"); img.setAttribute("src", data[i].imageList[0]); img.setAttribute("alt", data[i].name); img.setAttribute("class", thumbnailImgClassName); img.style.height = "46px"; img.style.marginRight = "8px"; img.onerror = function () { if (!this.dataset.errorHandled) { this.dataset.errorHandled = "true"; this.src = "https://static.m-team.cc/static/media/logo.80b63235eaf702e44a8d.png"; img.style.width = "46px"; this.style.objectFit = "cover"; this.style.objectPosition = "left"; } }; div.appendChild(img); div.appendChild(td.childNodes[0]); td.insertBefore(div, td.firstElementChild); }); clearTimeout(timer); }, 600); }; const originalOpen = XMLHttpRequest.prototype.open; XMLHttpRequest.prototype.open = function (method, url, ...rest) { this._url = url; return originalOpen.call(this, method, url, ...rest); }; const originalSend = XMLHttpRequest.prototype.send; XMLHttpRequest.prototype.send = function (...args) { this.addEventListener("load", function () { if (this._url && this._url.includes(targetKeyword)) { const responseText = this.responseText; try { const json = JSON.parse(responseText); appendImageElement(json.data.data || []); } catch (e) { console.error(e); } } }); return originalSend.apply(this, args); }; const appendPreviewImgElement = () => { if (!document.getElementById(previewImgId)) { const img = document.createElement("img"); img.setAttribute("id", previewImgId); document.body.append(img); } }; const mouseoverHandler = (e) => { const target = e.target; if ( target.tagName === "IMG" && target.src && target.className === "m-team-img-thumbnail" ) { const previewImg = document.getElementById(previewImgId); const display = window.getComputedStyle(previewImg).display; if (display === "block") { return; } const imgNaturalWidth = target.naturalWidth; const imgNaturalHeight = target.naturalHeight; const ratio = imgNaturalWidth / imgNaturalHeight; const imgMaxHeight = 220; previewImg.src = target.src; previewImg.style.display = "block"; previewImg.style.position = "absolute"; previewImg.style.height = `${imgMaxHeight}px`; previewImg.style.width = `${imgMaxHeight * ratio}px`; previewImg.style.left = `${e.pageX + 8}px`; previewImg.style.top = `${e.pageY + 8}px`; } }; const mouseoutHandler = () => { const previewImg = document.getElementById(previewImgId); if (previewImg) { previewImg.style.display = "none"; } }; window.addEventListener("load", appendPreviewImgElement); window.addEventListener("mouseover", mouseoverHandler); window.addEventListener("mouseout", mouseoutHandler); })();