Bunkrr DL Button

Add a direct download button below each thumbnails

目前为 2024-01-20 提交的版本。查看 最新版本

// ==UserScript==
// @name         Bunkrr DL Button
// @version      1.3
// @description  Add a direct download button below each thumbnails
// @match        https://bunkrr.ru/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),
    });
  });
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址