// ==UserScript==
// @name 动漫花园批量下载_改
// @namespace https://greasyfork.org/zh-CN/scripts/502439
// @version 0.7.02
// @description 为动漫花园(share.dmhy.org)增加批量下载的功能
// @author MD1304
// @match *://share.dmhy.org/*
// @icon data:image/x-icon;base64,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
// @grant GM_setClipboard
// @license LGPLv3
// @downloadURL https://update.greasyfork.icu/scripts/502439/%E5%8A%A8%E6%BC%AB%E8%8A%B1%E5%9B%AD%E6%89%B9%E9%87%8F%E4%B8%8B%E8%BD%BD_%E6%94%B9.user.js
// @updateURL https://update.greasyfork.icu/scripts/502439/%E5%8A%A8%E6%BC%AB%E8%8A%B1%E5%9B%AD%E6%89%B9%E9%87%8F%E4%B8%8B%E8%BD%BD_%E6%94%B9.meta.js
// ==/UserScript==
(function() {
// 调整表格列
var node = document.querySelector("#topic_list > thead > tr");
node.children[2].insertAdjacentHTML('beforebegin', node.children[3].outerHTML);
node.children[2].querySelector('[class="title"]').innerHTML = "";
for (let i = 1; i < $('#topic_list tr').length; i++) {
node = document.querySelector("#topic_list > tbody > tr:nth-child("+String(i)+")");
node.getElementsByClassName("title")[0].insertAdjacentHTML('beforebegin', node.children[3].outerHTML);
node.children[2].children[0].title ="复制链接";
node.children[2].removeChild(node.children[2].querySelector('[class="download-pp"]'));
if (node.children[9].children[0].innerHTML != Cut15Byte(node.children[9].children[0].innerHTML)) {
node.children[9].children[0].title = node.children[9].children[0].innerHTML;
node.children[9].children[0].innerHTML = Cut15Byte(node.children[9].children[0].innerHTML);
}
}
// 裁剪大于15字节字符串
function Cut15Byte(str) {
//判断字符串全是ascii /^[\x00-\x7F]+$/.test(str)
//长度小于16的全ascii字符串或长度小于9的非全ascii不裁剪
if ((/^[\x00-\x7F]+$/.test(str) && str.length < 16) || (!/^[\x00-\x7F]+$/.test(str) && str.length < 9)) {
return str;
} else {
let length = 0;
for (let i = 0; i < str.length; i++) {
let charCode = str.charCodeAt(i);
if ((charCode >= 0x0001 && charCode <= 0x007F) || (charCode >= 0x02B9 && charCode <= 0x036F)) {length += 1;} else {length += 2;}
if (length>=16) {
return str.slice(0, i-1)+"...";
} else {
if (i == str.length) {return str;}
}
}
}
}
// 调整表格列宽度
document.querySelector("#topic_list > thead > tr > th:nth-child(2)").width = "4%";
document.querySelector("#topic_list > thead > tr > th:nth-child(3)").width = "3%";
document.querySelector("#topic_list > thead > tr > th:nth-child(5)").width = "2%";
document.querySelector("#topic_list > thead > tr > th:nth-child(6)").width = "4%";
document.querySelector("#topic_list > thead > tr > th:nth-child(7)").width = "2%";
document.querySelector("#topic_list > thead > tr > th:nth-child(8)").width = "2%";
document.querySelector("#topic_list > thead > tr > th:nth-child(9)").width = "2%";
document.querySelector("#topic_list > thead > tr > th:nth-child(10)").width = "7%";
})();
function dmhy() {
var that = this;
this.init = function () {
// 复选框
var tds = $('#topic_list tr td:nth-child(3)');
tds.append('');
$('.magnet:checkbox').click(function () {
that.strMagnet();
console.log("已选中 "+that.gatherMagnet().length+" 项");
});
// 复制所选
$('.nav_title:eq(1) .fl,.nav_title:eq(2)').append('复制所选链接至剪贴板');
$('#topic_list thead tr th:nth-child(3) span').append(' ');
$('.download-all').click(function (e) {
e.preventDefault();
if (that.gatherMagnet().length == 0) {
toast("未选中任何条目");
return;
}
GM_setClipboard(that.strMagnet()+"\r\n");
console.log("已复制 "+that.gatherMagnet().length+" 项");
toast("已复制 "+that.gatherMagnet().length+" 项 选中条目链接");
});
// 全选
$('#topic_list thead tr th:nth-child(3) span').append('');
$('.select-all').click(function () {
if ($('.magnet:checkbox').length !== $('.magnet:checkbox:checked').length) {
$('.magnet:checkbox').attr('checked', true);
} else {
$('.magnet:checkbox').attr('checked', false);
}
that.strMagnet();
console.log("已选中 "+that.gatherMagnet().length+" 项");
});
// 复制当前
$('td:nth-child(3) > a.download-arrow.arrow-magnet').click(function (f) {
f.preventDefault();
GM_setClipboard(this.getAttribute("href")+"\r\n");
console.log("已复制 当前 项");
toast("已复制当前条目链接");
});
};
// 收集磁力链接
this.gatherMagnet = function () {
var magnets = [];
$('input.magnet:checkbox:checked').each(function () {
var magnetStr = $(this).parents('tr').find('a.download-arrow.arrow-magnet').attr('href');
magnets.push(magnetStr);
});
return magnets;
};
// 格式化磁力链接字符串
this.strMagnet = function () {
var str = this.gatherMagnet().join('\r\n');
$('.download-all').attr('href', str);
return str;
};
// 弹出提示框
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.6)";
toastSpan.style.transform = "translate(-50%, -50%)";
toastSpan.style.transition = "opacity .3s";
toastSpan.style.opacity = "1";
toastSpan.innerText = msg;
document.body.appendChild(toastSpan);
setTimeout(function () {
toastSpan.style.opacity = "0";
setTimeout(function () {
toastSpan.remove(toastSpan);
}, 300);
}, 1500);
}
// 悬浮按钮容器样式
const style = document.createElement('style');
style.textContent = `
#float-btns {
position: fixed;
left: 15px;
top:55%;
transform: translateY(-50%);
z-index: 9999;
display: flex;
flex-direction: column;
gap: 10px;
}
.float-btn {
width: 20px;
height: 20px;
border-radius: 40%;
border: 2px solid #247;
background: #fff;
color: #247;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
box-shadow: 0 2px 10px rgba(0,0,0,0.2);
transition: all 0.3s;
font-size: 20px;
position: relative;
}
.float-btn:hover {
transform: scale(1.1);
box-shadow: 0 5px 15px rgba(0,0,0,0.3);
}
.tooltip {
position: absolute;
left: 40px;
white-space: nowrap;
background: #333;
color: #fff;
padding: 5px 10px;
border-radius: 4px;
opacity: 0;
transition: opacity 0.3s;
pointer-events: none;
font-size: 10px;
}
.float-btn:hover .tooltip {
opacity: 1;
}
`;
// 创建按钮容器
const btnContainer = document.createElement('div');
btnContainer.id = 'float-btns';
// 按钮功能实现
const buttons = [
{
icon: '⇪',
text: '返回顶部',
action: () => window.scrollTo({ top: 0, behavior: 'smooth' })
},
{
icon: '↶',
text: '上一页',
action: () => {
if(document.querySelector("body > div.container > div > div.main > div.table.clear > div.nav_title > div.fl > a:nth-child(1)").innerHTML == "上一頁") {
window.location.href = document.querySelector("body > div.container > div > div.main > div.table.clear > div.nav_title > div.fl > a:nth-child(1)").href
}
}
},
{
icon: '↷',
text: '下一页',
action: () => {
if(document.querySelector("body > div.container > div > div.main > div.table.clear > div.nav_title > div.fl > a:nth-child(2)").innerHTML == "下一頁") {
window.location.href = document.querySelector("body > div.container > div > div.main > div.table.clear > div.nav_title > div.fl > a:nth-child(2)").href
} else {
window.location.href = document.querySelector("body > div.container > div > div.main > div.table.clear > div.nav_title > div.fl > a:nth-child(1)").href
}
}
},
{
icon: '⎘',
text: '复制所选',
action: () => {
const selected = document.querySelectorAll('.magnet:checked');
if(selected.length === 0) {
toast("未选中任何条目");
return;
}
const links = Array.from(selected).map(checkbox =>
checkbox.closest('tr').querySelector('a.download-arrow').href
).join('\n');
navigator.clipboard.writeText(links);
toast("已复制 "+that.gatherMagnet().length+" 项 选中条目链接");
}
},
{
icon: '╳',
text: '清除所选',
action: () => {
document.querySelectorAll('.magnet').forEach(checkbox => {
checkbox.checked = false;
});
document.querySelector('.select-all').checked = false;
toast("已清除所有选择");
}
}
];
// 动态生成按钮
buttons.forEach(btn => {
const button = document.createElement('div');
button.className = 'float-btn';
button.innerHTML = `${btn.icon}${btn.text}`;
button.onclick = btn.action;
btnContainer.appendChild(button);
});
// 添加到页面
document.head.appendChild(style);
document.body.appendChild(btnContainer);
}
new dmhy().init();