您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
02.11.2022, 00:57:11
// ==UserScript== // @name Minetest ContentDB Image Gallery // @name:RU-ru Просмотр изображений на Minetest ContentDB // @namespace Violentmonkey Scripts // @match https://content.minetest.net/* // @grant none // @version 1.1.0 // @author Xevin // @license MIT // @description 02.11.2022, 00:57:11 // ==/UserScript== const $ = s => document.querySelector(s) const $$ = s => document.querySelectorAll(s) let imageList = [] let imageIndex = null function nextImage(idx) { imageIndex = imageList[idx + 1] ? idx + 1 : 0 return imageList[imageIndex] } function prevImage(idx) { imageIndex = idx - 1 >= 0 ? idx - 1 : imageList.length - 1 return imageList[imageIndex] } function showImage(url) { const $galleryModal = $("body #gallery-modal") let $galleryModalBody if (!$galleryModal) { const $galleryModal = document.createElement("div") $galleryModal.id = "gallery-modal" $galleryModal.classList.add("gallery-modal") const $galleryModalClose = document.createElement("button") $galleryModalClose.innerHTML = "×" $galleryModalClose.classList.add("gallery-modal__close") $galleryModalClose.addEventListener("click", () => { $galleryModal.classList.add("hidden") }) const $galleryModalPrev = document.createElement("button") $galleryModalPrev.innerHTML = "<" $galleryModalPrev.classList.add("gallery-modal__prev") $galleryModalPrev.addEventListener("click", () => { showImage(prevImage(imageIndex)) }) const $galleryModalNext = document.createElement("button") $galleryModalNext.innerHTML = ">" $galleryModalNext.classList.add("gallery-modal__next") $galleryModalNext.addEventListener("click", () => { showImage(nextImage(imageIndex)) }) $galleryModalBody = document.createElement("div") $galleryModalBody.classList.add("gallery-modal__body") $galleryModalImage = document.createElement("img") $galleryModal.appendChild($galleryModalClose) $galleryModal.appendChild($galleryModalBody) $galleryModalBody.appendChild($galleryModalImage) $galleryModalBody.appendChild($galleryModalPrev) $galleryModalBody.appendChild($galleryModalNext) if (imageList.length === 1) { $galleryModalNext.classList.add("hidden") $galleryModalPrev.classList.add("hidden") } document.body.appendChild($galleryModal) } else { $galleryModal.classList.remove("hidden") $galleryModalBody = $galleryModal.querySelector(".gallery-modal__body") } $galleryModalBody.style.backgroundImage = `url(${url})` return $galleryModal } function addCss(styleText) { const $style = document.createElement("style") $style.innerHTML = styleText document.head.appendChild($style) } $$("ul.gallery li a.gallery-image").forEach((el) => { imageList.push(el.href) el.addEventListener("click", (ev) => { ev.preventDefault() imageIndex = imageList.findIndex((i) => el.href == i) showImage(imageList[imageIndex]) }) }) addCss(` .gallery-image { transition: transform .15s ease-in-out; } .gallery-image:hover { transform: scale(1.05); } .gallery-modal { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background-color: rgba(0, 0, 0, .5); z-index: 10; } .gallery-modal.hidden { display: none; } .gallery-modal__body { position: absolute; height: 90%; width: 90%; left: 50%; top: 50%; transform: translate(-50%, -50%); background-size: 100%; background-position: center; background-repeat: no-repeat; } .gallery-modal__next, .gallery-modal__prev, .gallery-modal__close { width: 50px; height: 50px; background-color: rgba(255,255,255,0.5); color: black; display: flex; justify-content: center; align-items: center; position: absolute; font-size: 200%; border: none; transition: all .15s ease-in-out; } .gallery-modal__close { top: 6px; right: 6px; } .gallery-modal__close:hover { background-color: white; transform: scale(1.1); } .gallery-modal__prev { top: 50%; left: -25px; } .gallery-modal__next { top: 50%; right: -25px; } .hidden { display: none; } `)