// ==UserScript==
// @name 动漫花园列表页增强
// @namespace http://tampermonkey.net/
// @version 0.5
// @description 列表页下载种子+批量复制种子/磁链链接
// @author 菜姬
// @match *://dmhy.org/
// @match *://dmhy.org/topics/list*
// @match *://www.dmhy.org/
// @match *://www.dmhy.org/topics/list*
// @match *://share.dmhy.org/
// @match *://share.dmhy.org/topics/list*
// @grant GM_xmlhttpRequest
// @connect dmhy.org
// @downloadURL https://update.greasyfork.icu/scripts/404196/%E5%8A%A8%E6%BC%AB%E8%8A%B1%E5%9B%AD%E5%88%97%E8%A1%A8%E9%A1%B5%E5%A2%9E%E5%BC%BA.user.js
// @updateURL https://update.greasyfork.icu/scripts/404196/%E5%8A%A8%E6%BC%AB%E8%8A%B1%E5%9B%AD%E5%88%97%E8%A1%A8%E9%A1%B5%E5%A2%9E%E5%BC%BA.meta.js
// ==/UserScript==
(function () {
'use strict';
const ensureProtocol = (url) => {
if (url.startsWith('//')) {
const protocol = window.location.protocol;
return protocol + url;
}
return url;
};
const downloadFile = (url, filename) => {
GM_xmlhttpRequest({
method: "get",
url: url,
timeout: 5000,
responseType: "arraybuffer",
onload: function (r) {
const blob = new Blob([r.response], { type: "application/octet-stream" });
const anchor = document.createElement("a");
anchor.href = URL.createObjectURL(blob);
anchor.download = filename;
anchor.style.display = "none";
document.body.append(anchor);
anchor.click();
setTimeout(() => {
document.body.removeChild(anchor);
URL.revokeObjectURL(anchor.href);
}, 0);
}
});
};
const reflush = () => {
if (!changeToTorrentLink) {
document.querySelectorAll('a.arrow-magnet').forEach((item, index, arr) => {
item.title = '磁力下載';
item.onclick = null;
});
}
else {
document.querySelectorAll('a.arrow-magnet').forEach((item, index, arr) => {
item.title = '下載種子';
item.onclick = (e) => {
e.preventDefault();
const link = item.parentElement.previousElementSibling.querySelector("td>a");
GM_xmlhttpRequest({
method: "get",
url: link.href,
responseType: "text",
onload: function (r) {
const html = r.response;
const match = html.match(/(.+?)<\/a>/);
const url = ensureProtocol(match[1]);
const filename = match[2] + ".torrent";
downloadFile(url, filename);
}
});
};
});
}
};
let changeToTorrentLink = localStorage.changeToTorrentLink === "true";
{
const row4 = document.querySelector('#topic_list > thead > tr > th:nth-child(4) > span');
row4.onclick = (e) => {
changeToTorrentLink = !changeToTorrentLink;
localStorage.changeToTorrentLink = changeToTorrentLink;
e.target.textContent = changeToTorrentLink ? "種子" : "磁鏈";
reflush();
};
reflush();
row4.textContent = changeToTorrentLink ? "種子" : "磁鏈";
const row6 = document.querySelector('#topic_list > thead > tr > th:nth-child(6) > span');
row6.textContent = "做種";
}
{
const copyAllButton = document.createElement('a');
copyAllButton.href = "javascript:;";
copyAllButton.textContent = "複製全部";
copyAllButton.onclick = (e) => {
const text = [];
document.querySelectorAll('a.arrow-magnet').forEach((item, index, arr) => {
if (changeToTorrentLink) {
const link = item.parentElement.previousElementSibling.querySelector("td>a");
GM_xmlhttpRequest({
method: "get",
url: link.href,
timeout: 5000,
responseType: "text",
onload: function (r) {
const html = r.response;
const match = html.match(/(.+?)<\/a>/);
const url = ensureProtocol(match[1]);
text.push(url);
}
});
}
else {
text.push(item.href);
}
});
window.navigator.clipboard.writeText(text.join('\n')).then(() => {
alert('複製成功');
}, (e) => {
console.error(e);
})
};
document.querySelector('div.nav_title > div.fr').appendChild(copyAllButton);
};
})();