Greasy Fork

Bunkrr DL Button

Add a direct download button below each thumbnails

目前为 2023-11-01 提交的版本。查看 最新版本

// ==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
// ==/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);
    })
  );
})();