// ==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 // @downloadURL none // ==/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), }); }); }