Image downloader for manga download scripts.
Tính đến
Script này sẽ không được không được cài đặt trực tiếp. Nó là một thư viện cho các script khác để bao gồm các chỉ thị meta
// @require https://updategf.qytechs.cn/scripts/451810/1096733/ImageDownloaderLib.js
function ImageDownloader({
getImagePromises,
isOKToDownload = () => true,
title = `package_${Date.now()}`,
zipOptions = {},
imageSuffix = 'jpg',
cssVerticalDistance = 'top: 80px',
cssHorizontalDistance = 'left: 80px'
}) {
// create download button element
const dlBtn = document.createElement('button');
dlBtn.textContent = 'Download';
dlBtn.style = `
position: fixed;
${cssVerticalDistance};
${cssHorizontalDistance};
z-index: 9999999;
width: 128px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: 'Consolas', 'Monaco', 'Microsoft YaHei';
color: #fff;
background-color: #0984e3;
border: none;
border-radius: 4px;
cursor: pointer;
`;
// setup click event callback
dlBtn.onclick = function () {
if (!isOKToDownload()) return;
dlBtn.disabled = true;
dlBtn.textContent = "Processing";
dlBtn.style.backgroundColor = '#aaa';
dlBtn.style.cursor = 'not-allowed';
download(getImagePromises, title, zipOptions);
}
// add button to body
document.body.appendChild(dlBtn);
// download
async function download(getImagePromises, title, zipOptions) {
const images = await Promise.all(getImagePromises());
// create zip
const zip = new JSZip(); // JSZip library should be imported already
const folder = zip.folder(title);
images.forEach((image, index) => {
const filename = `${index + 1}`.padStart(images.length >= 100 ? 3 : 2, '0') + `.${imageSuffix}`;
folder.file(filename, image, zipOptions);
});
// pop up download window
const content = await zip.generateAsync({ type: "blob" });
saveAs(content, `${title}.zip`); // FileSaver library should be imported already
// change the text of download button
dlBtn.innerText = "Completed";
}
}