Добавляет плавающие кнопки в виде SVG для поиска игры на online-fix.me, rustorka.com и rutracker.org на странице игры SteamDB.
目前為
// ==UserScript==
// @name SteamDB Floating Search Buttons as SVG
// @namespace http://tampermonkey.net/
// @version 1.8
// @description Добавляет плавающие кнопки в виде SVG для поиска игры на online-fix.me, rustorka.com и rutracker.org на странице игры SteamDB.
// @author GodinRaider
// @license MIT
// @match https://steamdb.info/app/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Функция для создания SVG кнопки
function createSVGButton(label, url, tooltip) {
let button = document.createElement('a');
button.href = url;
button.target = '_blank'; // открывать в новой вкладке
button.title = tooltip;
button.className = 'floating-svg-button'; // Добавляем класс для стилей
// Создаем SVG элемент
let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute('width', '140'); // Увеличен размер кнопки по ширине
svg.setAttribute('height', '40'); // Увеличен размер кнопки по высоте
svg.setAttribute('viewBox', '0 0 140 40');
svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
// Создаем прямоугольник (фон)
let rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
rect.setAttribute('width', '140');
rect.setAttribute('height', '40');
rect.setAttribute('rx', '5'); // Радиус скругления углов как у оригинальных кнопок
rect.setAttribute('fill', '#4C6EF5'); // Цвет фона кнопки
rect.setAttribute('stroke', '#000');
rect.setAttribute('stroke-width', '1');
// Создаем текст для кнопки
let text = document.createElementNS("http://www.w3.org/2000/svg", "text");
text.setAttribute('x', '70'); // Центровка по оси X
text.setAttribute('y', '25'); // Центровка по оси Y
text.setAttribute('fill', 'white');
text.setAttribute('font-size', '14'); // Размер текста как у оригинальных кнопок
text.setAttribute('font-family', 'Arial, sans-serif');
text.setAttribute('text-anchor', 'middle'); // Центровка текста
text.textContent = label;
// Добавляем элементы в SVG
svg.appendChild(rect);
svg.appendChild(text);
// Добавляем SVG в кнопку
button.appendChild(svg);
return button;
}
// Получаем название игры из элемента <h1 itemprop="name">
let gameNameElement = document.querySelector('h1[itemprop="name"]');
if (!gameNameElement) return; // Если не удалось найти название игры, прекращаем выполнение
let gameName = encodeURIComponent(gameNameElement.textContent.trim());
// Создаем три кнопки для поиска на разных сайтах
let onlineFixButton = createSVGButton('Online-Fix', `https://online-fix.me/?do=search&subaction=search&story=${gameName}`, 'Поиск на online-fix.me');
let rustorkaButton = createSVGButton('Rustorka', `http://rustorka.com/forum/tracker.php?nm=${gameName}&o=10&s=2`, 'Поиск на rustorka.com');
let rutrackerButton = createSVGButton('RuTracker', `https://rutracker.org/forum/tracker.php?nm=${gameName}&o=10&s=2`, 'Поиск на rutracker.org');
// Создаем контейнер для плавающих кнопок
let buttonContainer = document.createElement('div');
buttonContainer.className = 'floating-container';
// Добавляем кнопки в контейнер
buttonContainer.appendChild(onlineFixButton);
buttonContainer.appendChild(rustorkaButton);
buttonContainer.appendChild(rutrackerButton);
// Добавляем контейнер на страницу
document.body.appendChild(buttonContainer);
// Применяем стили для плавающих кнопок
const style = document.createElement('style');
style.innerHTML = `
.floating-container {
position: fixed;
top: 100px;
left: 10px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 1000;
}
.floating-svg-button {
display: block;
width: 140px; /* Ширина кнопки */
height: 40px; /* Высота кнопки */
text-decoration: none;
transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.floating-svg-button:hover {
transform: scale(1.05); /* Легкое увеличение при наведении */
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* Тень при наведении */
}
`;
document.head.appendChild(style);
})();