您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reveal all related galleries to video at desktop
当前为
// ==UserScript== // @name Motherless.com Improved // @namespace http://tampermonkey.net/ // @license MIT // @version 0.1.1 // @description Reveal all related galleries to video at desktop // @author smartacephale // @match https://motherless.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=motherless.com // @grant none // ==/UserScript== //==================================================================================================== function $(x, e = document.body) { return e.querySelector(x); } function $$(x, e = document.body) { return e.querySelectorAll(x); } function parseDOM(html) { const parsed = new DOMParser().parseFromString(html, 'text/html').body; return parsed.children.length > 1 ? parsed : parsed.firstElementChild; } const MOBILE_UA = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Mobile Safari/537.36'; function fetchCustomUA(url, ua = MOBILE_UA) { const headers = new Headers({ "User-Agent": ua }); return fetch(url, { headers }); } function fetchHtml(url) { return fetchCustomUA(url).then((r) => r.text()).then((h) => parseDOM(h)); } //==================================================================================================== const GALLERIES_TAG = '.media-related-galleries'; const GALLERY_TAG = '.gallery-container'; const GALLERY_MOB_TAG = '.ml-gallery-thumb'; const GROUP_TAG = '.group-minibio'; function displayAll() { // biome-ignore lint/complexity/noForEach: <explanation> $$(GROUP_TAG).forEach(e => { e.style = 'display: block !important' }); // biome-ignore lint/complexity/noForEach: <explanation> $$(GALLERY_TAG).forEach(e => { e.style = 'display: block !important' }); } function cloneAttributes(target, source) { // biome-ignore lint/complexity/noForEach: <explanation> [...source.attributes].forEach(attr => { target.setAttribute(attr.nodeName === "id" ? 'data-id' : attr.nodeName, attr.nodeValue) }) } function replaceElementTag(e, tagName) { const newTagElement = document.createElement(tagName); newTagElement.className = e.className; newTagElement.href = e.href; newTagElement.style = e.style; cloneAttributes(newTagElement, e); newTagElement.innerHTML = e.innerHTML; e.parentNode.replaceChild(newTagElement, e); } function mobileGalleryToDesktop(e) { e.firstElementChild.nextElementSibling.nextElementSibling.remove(); e.firstElementChild.appendChild(e.firstElementChild.nextElementSibling); e.className = 'thumb-container gallery-container'; e.firstElementChild.className = 'desktop-thumb image medium'; e.firstElementChild.firstElementChild.nextElementSibling.className = 'gallery-captions'; replaceElementTag(e.firstElementChild.firstElementChild, 'a'); } async function desktopAddMobGalleries() { const galleries = $(GALLERIES_TAG); if (galleries != null) { const galleriesContainer = galleries.firstElementChild.nextElementSibling.firstElementChild; const galleriesCount = galleries.querySelectorAll(GALLERY_TAG).length; const mobDom = await fetchHtml(window.location.href); const mobGalleries = $$(GALLERY_MOB_TAG, mobDom); for (const [i, x] of mobGalleries.entries()) { if (i > galleriesCount - 1) { mobileGalleryToDesktop(x); galleriesContainer.appendChild(x); } } displayAll(); } } //==================================================================================================== (async () => { 'use strict'; await desktopAddMobGalleries(); })();