// ==UserScript== // @name Bunkrr DL Button // @version 1.1 // @description Add a direct download button below each thumbnails // @match https://bunkrr.su/a/* // @namespace bunkrr // @license MIT // @downloadURL none // ==/UserScript== (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("a[href$='.mp4']").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("button"); dlBox.textContent = "Download"; const dlBoxStyle = { border: "solid #ffd369 2px", borderRadius: "0px 0px 20px 20px", width: "100%", }; Object.assign(dlBox.style, dlBoxStyle); dlBox.addEventListener("click", (e) => { e.stopPropagation(); window.open(ddlLink); }); media.append(newMediaBox, dlBox); }) ); })();