Add a direct download button below each thumbnails
当前为
// ==UserScript==
// @name Bunkrr DL Button
// @version 1.4
// @description Add a direct download button below each thumbnails
// @match https://bunkr.sk/a/*
// @namespace bunkrr
// @license MIT
// @grant GM_download
// ==/UserScript==
const extensions = [
"mp4",
"jpg",
"png",
"jpeg",
"zip",
"rar",
"webp",
"gif",
"mp3",
"mkv",
"avi",
"mov",
"wmv",
"flv",
];
const extensionsSelector = extensions
.map((ext) => `a[href$='.${ext}']`)
.join(", ");
(async () => {
"use strict";
const mediaLinks = [...document.querySelectorAll(".grid-images_box-link")];
const links = mediaLinks.map((mediaLink) => {
const relativeLink = mediaLink.getAttribute("href");
return window.location.origin + relativeLink;
});
const medias = document.querySelectorAll(".grid-images > *");
await Promise.all(
links.map(async (link, i) => {
const response = await fetch(link);
const html = await response.text();
const parser = new DOMParser();
const doc = parser.parseFromString(html, "text/html");
const ddlLink = doc
.querySelector(extensionsSelector)
.getAttribute("href");
const media = medias[i];
const mediaStyle = {
display: "flex",
flexDirection: "column",
border: "none",
padding: "0",
};
Object.assign(media.style, mediaStyle);
const mediaChildren = media.querySelectorAll(":scope > *");
mediaChildren[mediaChildren.length - 1].style.bottom = "0";
const newMediaBox = document.createElement("div");
const newMediaBoxStyle = {
position: "relative",
padding: "0.625rem",
paddingBottom: "0",
border: "solid #ffd369 2px",
borderBottom: "none",
};
Object.assign(newMediaBox.style, newMediaBoxStyle);
newMediaBox.append(...mediaChildren);
const dlBox = document.createElement("a");
dlBox.setAttribute("href", ddlLink);
dlBox.textContent = "Download";
dlBoxEventListener(dlBox);
const dlBoxStyle = {
border: "solid #ffd369 2px",
borderRadius: "0px 0px 20px 20px",
width: "100%",
};
Object.assign(dlBox.style, dlBoxStyle);
media.append(newMediaBox, dlBox);
})
);
})();
function dlBoxEventListener(dlBox) {
dlBox.addEventListener("click", async (e) => {
e.preventDefault();
const url = dlBox.getAttribute("href");
const name = url.split("/").pop();
GM_download({
url,
name,
saveAs: true,
onerror: (e) => console.error(e),
});
});
}