// ==UserScript== // @name yande.re mobile adaptation // @namespace http://tampermonkey.net/ // @version 0.0.2 // @description yande.re 移动端适配,已支持 post 预览 // @author Exisi // @license MIT License // @supportURL https://exi.software // @match *://yande.re/post/show/* // @match *://yande.re/post/similar/* // @downloadURL none // ==/UserScript== (function () { "use strict"; const styles = { postShow: `* { font-size: 100%; } #news-ticker { display: flex; align-items: center; } #news-ticker li { font-size: 35px; word-break: break-all; } #news-ticker .close-link { font-size: 35px; } #title { display: flex; justify-content: center; height: 85px !important; } #main-menu, .sidebar h5 { font-size: 35px; } #main-menu ul, #content { margin: 0; } .status-notice, .js-posts-show-edit-tab, .js-posts-show-comments-tab, h4:has(.js-posts-show-edit-tab), .tag-completion-box .color-tag-types, .sidebar form #tags, .sidebar #tag-sidebar, .sidebar ul, div.footer, form select[name="locale"], form:has(select[name="locale"]) button[type="submit"] { font-size: 34px !important; margin-right: 0 !important; margin-left: 0 !important; } .sidebar form #tags { width: -webkit-fill-available; } #comments { max-width: 100% !important; } .sidebar, #right-col, #comments textarea { width: 100% !important; } #comments input[type="submit"] { margin-top: 15px; font-size: 34px; border: 1px solid #ffffff; border-radius: 5px; padding: 10px 20px; box-sizing: border-box; } form:has(select[name="locale"]) button[type="submit"] { font-size: 34px; border: 1px solid #ffffff; border-radius: 5px; box-sizing: border-box; } #comments input[type="submit"]:hover, form:has(select[name="locale"]) button[type="submit"]:hover { background-color: #ffaaae; border-color: #ffaaae; } form:has(select[name="locale"]) { display: flex; justify-content: center; gap: 5px; margin: 5px 0; }`, }; const url = location.href; const match = { isMobile: window.matchMedia("(max-width: 767px)").matches, isPostShow: url.includes("post/show"), isPostSimilar: url.includes("post/similar"), }; if (match.isPostShow) { const styleElement = document.createElement("style"); styleElement.innerHTML = styles.postShow; document.head.appendChild(styleElement); const content = document.querySelector(".content"); const quickBtnBar = document.createElement("div"); Object.assign(quickBtnBar.style, { display: "flex", flexDirection: "row", justifyContent: "center", gap: "10px", cursor: "default", }); const features = { addToFavorites: { target: [document.querySelector("#add-to-favs a"), document.querySelector("#remove-from-favs a")], icon: [ ``, ``, ], }, viewOrigin: { target: [document.querySelector("ul a.original-file-changed.highres-show")], icon: [ ``, ], }, download: { target: [document.querySelector("ul a.original-file-changed")], icon: [ ``, ], }, FindDupes: { target: [document.querySelector("ul a#find-dupes")], icon: [ ``, ], }, findSimilar: { target: [document.querySelector("ul a#find-similar")], icon: [ ``, ], }, }; Object.keys(features).forEach((feature) => { const quickBtn = document.createElement("div"); Object.assign(quickBtn.style, { padding: "15px", borderRadius: "50%", border: "none", cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", }); let icon = features[feature].icon[0]; let target = features[feature].target[0]; if (feature == "addToFavorites" && features[feature].target[0].parentNode.style.display == "none") { icon = features[feature].icon[1]; target = features[feature].target[1]; } quickBtn.innerHTML = icon; const iconElement = quickBtn.querySelector("svg"); Object.assign(iconElement.style, { width: "50px", height: "50px", color: "#ffaaae", }); quickBtnBar.appendChild(quickBtn); const [addToFavorites, removeFavorite] = features[feature].target; quickBtn.addEventListener("click", () => { if (feature !== "addToFavorites") { features[feature].target.click(); return; } const [dislikeIcon, likeIcon] = features[feature].icon; if (addToFavorites.parentNode.style.display == "none") { removeFavorite.click(); quickBtn.innerHTML = dislikeIcon; const iconElement = quickBtn.querySelector("svg"); Object.assign(iconElement.style, { width: "50px", height: "50px", color: "#ffaaae", }); return; } addToFavorites.click(); quickBtn.innerHTML = likeIcon; const iconElement = quickBtn.querySelector("svg"); Object.assign(iconElement.style, { width: "50px", height: "50px", color: "#ffaaae", }); }); if (feature === "addToFavorites") { addToFavorites.addEventListener("click", () => quickBtn.click()); removeFavorite.addEventListener("click", () => quickBtn.click()); } }); content.appendChild(quickBtnBar); const sidebar = document.querySelector(".sidebar"); content.appendChild(sidebar); } })();