您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Hover torrent link to preview thumbnails
// ==UserScript== // @name Milkie Thumbnails // @namespace dumpsterbaby.lol // @version 0.0.0 // @description Hover torrent link to preview thumbnails // @author egore // @license MIT // @match https://milkie.cc/browse* // @icon https://milkie.cc/assets/icons/logo.svg // @grant none // ==/UserScript== (function () { function newElement(tagName, attributes, content) { var tag = document.createElement(tagName); for (var key in attributes || {}) { if (attributes[key] !== undefined && attributes[key] !== null) { tag.setAttribute(key, attributes[key]); } } tag.innerHTML = content || ""; return tag; } function findLinksByHref(urlFragment) { const links = Array.from(document.querySelectorAll('a')).filter(link => { return link.href.includes(urlFragment); }); return links; } function iterateNodeList(nodeList, callback) { if (!(nodeList instanceof NodeList)) { throw new TypeError("Invalid NodeList provided."); } if (typeof callback !== "function") { throw new TypeError("Callback must be a function."); } for (let i = 0; i < nodeList.length; i++) { if (callback(nodeList[i]) === false) { break; //Stop iteration if callback returns false } } } function init() { const uls = document.querySelectorAll('.adult'); const btns = document.querySelectorAll('.mat-icon.notranslate.download.material-icons.mat-icon-no-color'); btns.forEach(btn => { btn.style.display = 'none' }); if (interval) { clearInterval(interval); interval = undefined; window.setInterval(init, 5000); } iterateNodeList(uls, (node) => { const context = node.__ngContext__[115] const ln = findLinksByHref(`/browse/${context}`); const link = ln[0]; const previewContainer = newElement("div", { style: ` position: absolute; ` }); const previewContainer2 = newElement("div", { style: ` position: absolute; ` }); const previewContainer3 = newElement("div", { style: ` position: absolute; ` }); for (let i = 0; i < 2; i++) { const img = newElement("img", { src: `https://cdn.milkie.cc/t/${context}/o_${i}.jpg`, style: ` display: none; position: absolute; left: ${0 + i * 452}px; top: 22px; max-width: 450px; `, loading: "lazy" }); previewContainer.appendChild(img); link.parentNode.insertBefore(previewContainer, link.nextSibling); link.addEventListener('mouseover', () => { img.style.display = "block"; }); link.addEventListener('mouseout', () => { img.style.display = "none"; }); } for (let i = 2; i < 4; i++) { const img = newElement("img", { src: `https://cdn.milkie.cc/t/${context}/o_${i}.jpg`, style: ` display: none; position: absolute; left: ${0 + (i - 2) * 452}px; top: 277px; max-width: 450px; `, loading: "lazy" }); previewContainer2.appendChild(img); link.parentNode.insertBefore(previewContainer2, link.nextSibling); link.addEventListener('mouseover', () => { img.style.display = "block"; }); link.addEventListener('mouseout', () => { img.style.display = "none"; }); } for (let i = 4; i < 6; i++) { const img = newElement("img", { src: `https://cdn.milkie.cc/t/${context}/o_${i}.jpg`, style: ` display: none; position: absolute; left: ${0 + (i - 4) * 452}px; top: 532px; max-width: 450px; `, loading: "lazy" }); previewContainer3.appendChild(img); link.parentNode.insertBefore(previewContainer3, link.nextSibling); link.addEventListener('mouseover', () => { img.style.display = "block"; }); link.addEventListener('mouseout', () => { img.style.display = "none"; }); } }); } let interval = window.setInterval(init, 500); })();