为nyaa上添加更多过滤条件
// ==UserScript==
// @name Nyaa Filter
// @version 1.0
// @description 为nyaa上添加更多过滤条件
// @icon https://sukebei.nyaa.si/static/favicon.png
// @author Amamiya
// @match https://sukebei.nyaa.si/*
// @match https://nyaa.si/*
// @match https://nyaa.land/*
// @exclude https://sukebei.nyaa.si/*/*
// @exclude https://nyaa.si/*/*
// @exclude https://nyaa.land/*/*
// @grant GM_addStyle
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @license Apache-2.0 license
// @namespace https://greasyfork.org/users/801480
// ==/UserScript==
(function () {
'use strict';
// 条件框
var nodeHtml = '<div id="tool-card" class="centered-style"><div class="card-body"><label for="earliestDate">最早日期 <input type="date" style="width:75%" id="earliestDate"></label><label for="latestDate">最晚日期 <input type="date" id="latestDate" style="width:75%"></label><label for="downloadComplete">下载完成 <input type="number" style="width:75%" id="downloadComplete"></label></div><div class="card-footer"><button id="RESET_BUTTON">重置</button><button id="FILTER_BUTTON">确定</button></div></div>';
var tempNode = document.createElement('div');
tempNode.innerHTML = nodeHtml;
var toolCard = tempNode.firstChild;
document.body.appendChild(toolCard);
// 重置
$("#RESET_BUTTON").on("click", function () {
$("#earliestDate").val("");
$("#latestDate").val("");
$("#downloadComplete").val("");
$("tr:hidden").show();
});
// 确定
$("#FILTER_BUTTON").on("click", function () {
applyFilter();
});
watchNewTr();
dargCard();
// 样式
GM_addStyle(`
#tool-card {
z-index: 998;
position: fixed;
left: 10px;
top: 400px;
background-color: #0f0e17;
color: #a7a9be;
display: flex;
flex-direction: column;
padding: 0.75rem 1rem 0.4rem;
font-size: 1.2rem;
font-weight: 600;
border-radius: 6px;
border: 2px solid #337ab7;
min-width: 160px;
}
.card-body {
display: flex;
flex-direction: column;
}
.card-footer {
display: flex;
justify-content: space-around;
margin-top: 0.3rem;
}
#tool-card button {
margin-bottom: 0.2rem;
background-color: #337ab7;
color: #fffffe;
padding: 0.3rem 0.5rem;
border: none;
border-radius: 3px;
font-size: 1.2rem;
font-weight: 600;
cursor: pointer;
}
#tool-card label {
margin-bottom: 0.5rem;
}
#tool-card input[type="date"],
#tool-card input[type="number"] {
padding: 0.5rem;
border-radius: 4px;
border: 1px solid #ccc;
}
.centered-style {
position: fixed;
top: 50%;
transform: translateY(-50%);
}
`);
})();
function watchNewTr() {
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var filterValue = parseInt($("#downloadComplete").val(), 10);
var earliestDate = $("#earliestDate").val();
var latestDate = $("#latestDate").val();
mutation.addedNodes.forEach(function (node) {
if (node.tagName && node.tagName.toLowerCase() === 'tr') {
//applyFilter();
var timeTd = $(node).find("td:nth-child(5)");
var timeValue = Date.parse(timeTd.text());
var downloadTd = $(node).find("td:last-child");
var downloadValue = parseInt(downloadTd.text(), 10);
if (downloadValue < filterValue) {
$(node).hide();
}
if (earliestDate) {
if (timeValue < Date.parse(earliestDate)) {
$(node).hide();
}
}
if (latestDate) {
if (timeValue > Date.parse(latestDate)) {
$(node).hide();
}
}
}
});
});
});
var config = { childList: true, subtree: true };
observer.observe(document.body, config);
}
function applyFilter() {
$("tr").show();
var filterValue = parseInt($("#downloadComplete").val(), 10);
var earliestDate = $("#earliestDate").val();
var latestDate = $("#latestDate").val();
$("tr").each(function () {
var timeTd = $(this).find("td:nth-child(5)");
var timeValue = Date.parse(timeTd.text());
var downloadTd = $(this).find("td:last-child");
var downloadValue = parseInt(downloadTd.text(), 10);
if (downloadValue < filterValue) {
$(this).hide();
}
if (earliestDate) {
if (timeValue < Date.parse(earliestDate)) {
$(this).hide();
}
}
if (latestDate) {
if (timeValue > Date.parse(latestDate)) {
$(this).hide();
}
}
});
}
function tryCatch(callBack) {
try {
callBack && callBack()
} catch (e) {
console.log(e)
}
}
function dargCard() {
tryCatch(() => {
$("#tool-card").mousedown(function () {
$("#tool-card").on({
mousedown: function (e) {
var el = $(this);
var os = el.offset();
var dx = e.pageX - os.left
var dy = e.pageY - os.top;
$(document).on('mousemove.drag', function (e) {
el.offset({
top: e.pageY - dy,
left: e.pageX - dx
});
});
},
mouseup: function (e) {
$(document).off('mousemove.drag');
}
})
})
})
}