// ==UserScript== // @name Nyaa增强 // @namespace http://tampermonkey.net/ // @version 1.0.0 // @description Nyaa去广告,直接复制链接,多选复制链接 // @author Spark // @license MIT // @match https://sukebei.nyaa.si/* // @match https://nyaa.si/* // @icon https://www.google.com/s2/favicons?sz=64&domain=nyaa.si // @grant GM_addStyle // @grant GM_setClipboard // @downloadURL none // ==/UserScript== (function () { GM_addStyle(".detail-copy {color: #337ab7;cursor:pointer;}"); GM_addStyle(".detail-copy:hover {color: #23527c;}") GM_addStyle(".detail-copy:hover span {text-decoration: underline;}") var ids = ["e71bf691-4eb4-453f-8f11-6f40280c18f6", "ec01fd54-016b-41b4-bec9-b9b93f9b3b77", "dd4ce992-766a-4df0-a01d-86f13e43fd61", "e7a3ddb6-efae-4f74-a719-607fdf4fa1a1"]; var querySelector = document.querySelector; function removeAd(e) { for (var id of ids) { removeById(id); } document.querySelector = function () { return {} }; } function hideAd() { for (var id of ids) { GM_addStyle("#" + id + "{display:none;}"); } } hideAd(); var target = document.body; // var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; var observer = new MutationObserver(function (e) { removeAd(e); openInNewTab(); }); var observerConfig = { childList: true, subtree: true } observer.observe(target, observerConfig); function removeById(id) { var dom = querySelector.call(document, "#" + id); dom && dom.remove(); } function openInNewTab() { var links = document.querySelectorAll("tr td:nth-child(2) a:not(.comments)"); for (var link of links) { link.setAttribute("target", "_blank"); } } var added = false; function addCopyButton() { if (added) return; var tds = document.querySelectorAll("tr td:nth-child(3)"); for (var td of tds) { var span = document.createElement("span"); var i = document.createElement("i"); i.setAttribute("class", "fa fa-clipboard"); span.appendChild(i); span.classList.add("detail-copy"); span.addEventListener("click", function (e) { var a = this.parentNode.children[1]; GM_setClipboard(a.href, { type: "text", mimetype: "text/plain" }); console.log(a.href); toast("已复制"); }); td.appendChild(span); } if (tds.size > 0) added = true; } addCopyButton(); var addCoptButtonOnDetailPageFlag = false; function addCopyButtonOnDetailPage() { if (addCoptButtonOnDetailPageFlag) return; var panel = document.querySelector(".panel-footer"); if (!panel) return; panel.appendChild(new Text(" or ")); var span = document.createElement("span"); span.addEventListener("click", function (e) { var a = this.parentNode.querySelector("a:nth-child(2)"); GM_setClipboard(a.href, { type: "text", mimetype: "text/plain" }); console.log(a.href); toast("已复制"); }); span.classList.add("detail-copy"); span.innerHTML = " Copy" panel.appendChild(span); addCoptButtonOnDetailPageFlag = true; } addCopyButtonOnDetailPage(); // 添加多选 var magnets = []; function addCheckbox() { // 添加th var th = document.createElement("th"); th.classList.add("text-center"); var selectAll = document.createElement("input") selectAll.type = "checkbox"; selectAll.id = "selectAll"; // 全选/取消全选 selectAll.addEventListener("change", function (e) { var checkboxs = document.querySelectorAll("input[type='checkbox'][data-magnet]"); magnets = []; checkboxs.forEach(box => { box.checked = this.checked; if (this.checked) { box.setAttribute("checked", "checked"); magnets.push(box.dataset.magnet); } else { box.removeAttribute("checked"); } }) }); th.appendChild(selectAll); var copy = document.createElement("span"); var i = document.createElement("i"); i.setAttribute("class", "fa fa-clipboard"); copy.appendChild(i); copy.classList.add("detail-copy"); copy.style.marginLeft = "5px"; copy.addEventListener("click", function () { if (magnets.length == 0) { toast("未选中任何条目"); return; } var copyStr = magnets.join("\n"); GM_setClipboard(copyStr); toast("已复制选中条目链接"); }) th.appendChild(copy); var after = document.querySelector("th.hdr-size"); after.parentNode.insertBefore(th, after); var tds = document.querySelectorAll("tr td:nth-child(3)"); for (var td of tds) { var checkbox = document.createElement("input"); checkbox.type = "checkbox"; var magnet = td.parentNode.children[2].children[1].href; checkbox.dataset.magnet = magnet; checkbox.addEventListener("change", function (e) { console.log("change"); var magnet = this.dataset.magnet; if (this.checked) { this.setAttribute("checked", "checked") magnets.push(magnet); } else { this.removeAttribute("checked"); var index = magnets.indexOf(magnet); if (index != -1) { magnets.splice(index, 1); } } var allCheckboxSize = document.querySelectorAll("input[type='checkbox'][data-magnet]").length; var checkedCheckboxSize = document.querySelectorAll("input[type='checkbox'][data-magnet][checked='checked']").length; if (allCheckboxSize == checkedCheckboxSize && checkedCheckboxSize != 0) { selectAll.checked = true; } else { selectAll.checked = false; } }); var appendTd = document.createElement("td"); appendTd.classList.add("text-center"); appendTd.appendChild(checkbox); td.parentNode.insertBefore(appendTd, td.parentNode.children[3]); // patch: 将复制按钮移动到当前td var oldCopy = td.children[2] oldCopy.style.marginLeft = "5px"; appendTd.appendChild(oldCopy); } } addCheckbox(); function toast(msg) { var toastSpan = document.createElement("span"); toastSpan.style.top = "45%"; toastSpan.style.left = "50%"; toastSpan.style.color = "#fff"; toastSpan.style.position = "fixed"; toastSpan.style.borderRadius = "4px" toastSpan.style.padding = "8px 16px" toastSpan.style.background = "rgba(0,0,0,0.3)"; toastSpan.style.transform = "translate(-50%, -50%)"; toastSpan.innerText = msg; document.body.appendChild(toastSpan); setTimeout(function () { toastSpan.remove(toastSpan); }, 1500); } })();