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