Располагает ссылки в заданном порядке на странице animestars.org и заменяет ссылку на "Моя коллекция" на "Ответы на вопросы" с новой иконкой. Добавлены специфические размеры для ПК и телефонов.
当前为
// ==UserScript==
// @name Rearrange Links on animestars.org
// @namespace http://tampermonkey.net/
// @version 2.4
// @description Располагает ссылки в заданном порядке на странице animestars.org и заменяет ссылку на "Моя коллекция" на "Ответы на вопросы" с новой иконкой. Добавлены специфические размеры для ПК и телефонов.
// @author eretly
// @match https://animestars.org/*
// @grant none
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// Функция для поиска элемента по XPath
function getElementByXpath(path) {
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}
// Функция для генерации XPath для ссылки по её номеру
function generateLinkXPath(number) {
return `/html/body/div[2]/ul/li[${number}]/a`;
}
// Массив с номерами ссылок, как они должны располагаться в новом порядке
let linksToSwap = [3, 2, 5, 6, 7, 10, 4, 9, 8, 1, 11];
// Массив для хранения оригинальных элементов ссылок
let originalLinks = [];
// Проходим по всем ссылкам (1-11) и сохраняем их в оригинальном порядке
for (let i = 1; i <= 11; i++) {
let linkXPath = generateLinkXPath(i);
let linkElement = getElementByXpath(linkXPath);
if (linkElement) {
originalLinks.push(linkElement); // Сохраняем оригинальные ссылки
}
}
// Меняем текст ссылки "Моя списки" на "Мои списки"
const myListsLinkXPath = '/html/body/div[2]/ul/li[6]/a'; // XPath для ссылки
const myListsLink = getElementByXpath(myListsLinkXPath);
if (myListsLink) {
// Изменяем текст внутри ссылки, сохраняя иконку
myListsLink.childNodes[1].textContent = "Мои списки"; // Изменяем текст второго дочернего узла
}
// Заменяем ссылку "Моя коллекция" на "Ответы на вопросы" с новой иконкой
const collectionLinkXPath = generateLinkXPath(10); // Предполагается, что "Моя коллекция" — это десятая ссылка
const collectionLink = getElementByXpath(collectionLinkXPath);
if (collectionLink) {
collectionLink.outerHTML = `
<a href="https://animestars.org/faq/" style="display: flex; flex-direction: column; align-items: center; text-align: center; width: 100%; height: 95.8%; box-sizing: border-box;">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" viewBox="0 0 14 14" class="fal" style="opacity: 0.9; margin-bottom: 4px;">
<circle cx="7" cy="7" r="6.5" fill="none" stroke="#b3b3b3" stroke-linecap="round" stroke-linejoin="round"/>
<path fill="none" stroke="#b3b3b3" stroke-linecap="round" stroke-linejoin="round" d="M5.5 5.5A1.5 1.5 0 1 1 7 7v1"/>
<path fill="#b3b3b3" d="M7 9.5a.75.75 0 1 0 .75.75A.76.76 0 0 0 7 9.5Z"/>
</svg>
Ответы на вопросы
</a>`;
}
// Изменяем ширину и высоту существующей ссылки "Новое"
const newLinkXPath = '/html/body/div[2]/ul/li[8]/a'; // XPath для ссылки "Новое"
const newLink = getElementByXpath(newLinkXPath);
if (newLink) {
newLink.style.width = '100%'; // Устанавливаем ширину для ПК
newLink.style.height = '100%'; // Устанавливаем высоту
}
// Переставляем элементы ссылок по новому порядку
linksToSwap.forEach((newPosition, index) => {
// Найдем текущий родительский элемент
let parent = originalLinks[index].parentNode;
// Проверяем, существует ли ссылка для перестановки
if (originalLinks[newPosition - 1] && parent) {
// Заменяем текущий элемент на новый в правильном порядке
parent.replaceChild(originalLinks[newPosition - 1].cloneNode(true), originalLinks[index]);
}
});
// Адаптивность с использованием медиазапросов для телефонов
const style = document.createElement('style');
style.textContent = `
@media (max-width: 768px) {
div ul li a {
width: 100% !important; /* Ширина для телефонов */
height: 100%; /* Высота остается одинаковой */
}
}
`;
document.head.appendChild(style);
})();