🏠 返回首頁 

Nyaa Filters

Add custom filters for nyaa.si

// ==UserScript==
// @name         Nyaa Filters
// @namespace    npm/vite-plugin-monkey
// @version      0.1.0
// @author       pacexy <[email protected]>
// @description  Add custom filters for nyaa.si
// @license      MIT
// @icon         https://nyaa.si/static/favicon.png
// @homepage     https://github.com/pacexy/userscript-nyaa-filters#readme
// @homepageURL  https://github.com/pacexy/userscript-nyaa-filters#readme
// @source       https://github.com/pacexy/userscript-nyaa-filters.git
// @supportURL   https://github.com/pacexy/userscript-nyaa-filters/issues
// @match        https://nyaa.si/*
// @grant        GM_addStyle
// @grant        GM_deleteValue
// @grant        GM_getValue
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// ==/UserScript==
(t=>{if(typeof GM_addStyle=="function"){GM_addStyle(t);return}const e=document.createElement("style");e.textContent=t,document.head.append(e)})(" #nyaa-filters{margin-bottom:20px}#nyaa-filters input{width:60px;margin-left:10px}#nyaa-filters input::-webkit-inner-spin-button{-webkit-appearance:none} ");
(function () {
'use strict';
var _GM_deleteValue = /* @__PURE__ */ (() => typeof GM_deleteValue != "undefined" ? GM_deleteValue : void 0)();
var _GM_getValue = /* @__PURE__ */ (() => typeof GM_getValue != "undefined" ? GM_getValue : void 0)();
var _GM_registerMenuCommand = /* @__PURE__ */ (() => typeof GM_registerMenuCommand != "undefined" ? GM_registerMenuCommand : void 0)();
var _GM_setValue = /* @__PURE__ */ (() => typeof GM_setValue != "undefined" ? GM_setValue : void 0)();
function filterFileSize(tr, options) {
var _a;
const td = tr.querySelector("td:nth-child(4)");
if (!td) return;
const filesize = (_a = td.textContent) == null ? void 0 : _a.trim();
if (!filesize) return;
const parsedFileSize = parseFileSize(filesize);
return (options.min === void 0 || parsedFileSize >= options.min) && (options.max === void 0 || parsedFileSize <= options.max);
}
function parseFileSize(str) {
const [value, unit] = str.split(" ");
return parseFloat(value) * (unit === "GiB" ? #### : 1);
}
const trs = document.querySelectorAll(
"table.torrent-list tr"
);
const container = document.querySelector("body > div.container");
if (container) {
const root = document.createElement("div");
root.id = "nyaa-filters";
container.prepend(root);
const label = document.createElement("label");
label.textContent = "File Size (MB):";
root.appendChild(label);
const minInput = createFileSizeInput("min");
root.appendChild(minInput);
const maxInput = createFileSizeInput("max");
root.appendChild(maxInput);
update();
}
_GM_registerMenuCommand("Clear Data", clear);
function update() {
const min = _GM_getValue("filesize.min");
const max = _GM_getValue("filesize.max");
Array.from(trs).forEach((tr) => {
if (filterFileSize(tr, { min, max })) {
tr.style.opacity = "";
} else {
tr.style.opacity = "0.5";
}
});
}
function createFileSizeInput(key) {
const input = document.createElement("input");
input.type = "number";
input.placeholder = key;
input.value = _GM_getValue(`filesize.${key}`);
input.addEventListener("input", () => {
const value = input.value ? parseFloat(input.value) : void 0;
_GM_setValue(`filesize.${key}`, value);
update();
});
return input;
}
function clear() {
_GM_deleteValue("filesize.min");
_GM_deleteValue("filesize.max");
update();
}
})();