Greasy Fork

아카 뷰어

i,j,k 키를 눌러보세요

目前为 2022-04-10 提交的版本。查看 最新版本

// ==UserScript==
// @name           아카 뷰어
// @name:ko        아카 뷰어
// @name:en        arca viewer
// @description    i,j,k 키를 눌러보세요
// @description:ko i,j,k 키를 눌러보세요
// @description:en press i to open
// @version        2204100051
// @match          https://arca.live/b/*/*
// @author         nanikit
// @namespace      https://greasyfork.org/ko/users/713014-nanikit
// @connect        namu.la
// @connect        *
// @grant          GM_xmlhttpRequest
// @grant          GM_getResourceText
// @grant          window.close
// @run-at         document-start
// @require        https://cdn.jsdelivr.net/npm/[email protected]/require.js
// @resource       fflate           https://cdn.jsdelivr.net/npm/[email protected]/lib/browser.cjs
// @resource       react            https://cdn.jsdelivr.net/npm/[email protected]/umd/react.production.min.js
// @resource       react-dom        https://cdn.jsdelivr.net/npm/[email protected]/umd/react-dom.production.min.js
// @resource       @stitches/react  https://cdn.jsdelivr.net/npm/@stitches/[email protected]/dist/index.cjs
// @resource       vim_comic_viewer https://greasyfork.org/scripts/417893-vim-comic-viewer/code/vim%20comic%20viewer.js?version=1032900
// ==/UserScript==
"use strict";

if (typeof define !== "function") {
  throw new Error("requirejs not found.");
}

requirejs.config({
  config: {
    vim_comic_viewer: { GM_xmlhttpRequest },
  },
  enforceDefine: true,
});

define("main", (require, exports, module) => {
  "use strict";

  var vim_comic_viewer = require("vim_comic_viewer");

  const searchImages = () => {
    return [
      ...document.querySelectorAll(
        ".article-content img, .article-content video",
      ),
    ];
  };
  const getOriginalLink = (imgOrVideo) => {
    return imgOrVideo.parentElement?.href ?? imgOrVideo.src;
  };
  const getOriginalIfGif = (imgOrVideo) => {
    const link = imgOrVideo.parentElement?.href;
    if (!link || !new URL(link).pathname.endsWith(".gif")) {
      return imgOrVideo.src;
    }
    return link;
  };
  const comicSource = () => {
    return searchImages().map(getOriginalIfGif);
  };
  const registerGlobalKeyHandler = () => {
    let isViewerInitialized = false;
    addEventListener("keydown", async (event) => {
      const { ctrlKey, shiftKey, altKey } = event;
      if (
        ctrlKey || shiftKey || altKey || vim_comic_viewer.utils.isTyping(event)
      ) {
        return;
      }
      switch (event.key) {
        case "m":
          document.querySelector("#comment > *").scrollIntoView({
            block: "center",
          });
          break;
        case ";": {
          event.stopImmediatePropagation();
          const binary = await vim_comic_viewer.download(
            searchImages().map(getOriginalLink),
          );
          await vim_comic_viewer.utils.save(
            new Blob([
              binary,
            ]),
          );
          break;
        }
        case "i": {
          if (isViewerInitialized) {
            break;
          }
          isViewerInitialized = true;
          await vim_comic_viewer.utils.waitDomContent(document);
          const controller = await vim_comic_viewer.initialize({
            source: comicSource,
          });
          controller.toggleFullscreen();
          break;
        }
      }
    }, {
      capture: true,
    });
  };
  const main = () => {
    registerGlobalKeyHandler();
    vim_comic_viewer.utils.insertCss(`.vim_comic_viewer > :first-child {
    background: var(--color-bg-body);
  }`);
  };
  main(); //
});

for (
  const name of [
    "fflate",
    "react",
    "react-dom",
    "@stitches/react",
    "vim_comic_viewer",
  ]
) {
  const body = GM_getResourceText(name);
  define(name, Function("require", "exports", "module", body));
}

unsafeWindow.process = { env: { NODE_ENV: "production" } };
require(["main"], () => {}, console.error);