SteamDB Floating Search Buttons as SVG

Добавляет плавающие кнопки в виде SVG для поиска игры на online-fix.me, rustorka.com и rutracker.org на странице игры SteamDB.

目前為 2024-09-26 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name SteamDB Floating Search Buttons as SVG
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.8
  5. // @description Добавляет плавающие кнопки в виде SVG для поиска игры на online-fix.me, rustorka.com и rutracker.org на странице игры SteamDB.
  6. // @author GodinRaider
  7. // @license MIT
  8. // @match https://steamdb.info/app/*
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. // Функция для создания SVG кнопки
  16. function createSVGButton(label, url, tooltip) {
  17. let button = document.createElement('a');
  18. button.href = url;
  19. button.target = '_blank'; // открывать в новой вкладке
  20. button.title = tooltip;
  21. button.className = 'floating-svg-button'; // Добавляем класс для стилей
  22.  
  23. // Создаем SVG элемент
  24. let svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
  25. svg.setAttribute('width', '140'); // Увеличен размер кнопки по ширине
  26. svg.setAttribute('height', '40'); // Увеличен размер кнопки по высоте
  27. svg.setAttribute('viewBox', '0 0 140 40');
  28. svg.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
  29.  
  30. // Создаем прямоугольник (фон)
  31. let rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
  32. rect.setAttribute('width', '140');
  33. rect.setAttribute('height', '40');
  34. rect.setAttribute('rx', '5'); // Радиус скругления углов как у оригинальных кнопок
  35. rect.setAttribute('fill', '#4C6EF5'); // Цвет фона кнопки
  36. rect.setAttribute('stroke', '#000');
  37. rect.setAttribute('stroke-width', '1');
  38.  
  39. // Создаем текст для кнопки
  40. let text = document.createElementNS("http://www.w3.org/2000/svg", "text");
  41. text.setAttribute('x', '70'); // Центровка по оси X
  42. text.setAttribute('y', '25'); // Центровка по оси Y
  43. text.setAttribute('fill', 'white');
  44. text.setAttribute('font-size', '14'); // Размер текста как у оригинальных кнопок
  45. text.setAttribute('font-family', 'Arial, sans-serif');
  46. text.setAttribute('text-anchor', 'middle'); // Центровка текста
  47. text.textContent = label;
  48.  
  49. // Добавляем элементы в SVG
  50. svg.appendChild(rect);
  51. svg.appendChild(text);
  52.  
  53. // Добавляем SVG в кнопку
  54. button.appendChild(svg);
  55.  
  56. return button;
  57. }
  58.  
  59. // Получаем название игры из элемента <h1 itemprop="name">
  60. let gameNameElement = document.querySelector('h1[itemprop="name"]');
  61. if (!gameNameElement) return; // Если не удалось найти название игры, прекращаем выполнение
  62. let gameName = encodeURIComponent(gameNameElement.textContent.trim());
  63.  
  64. // Создаем три кнопки для поиска на разных сайтах
  65. let onlineFixButton = createSVGButton('Online-Fix', `https://online-fix.me/?do=search&subaction=search&story=${gameName}`, 'Поиск на online-fix.me');
  66. let rustorkaButton = createSVGButton('Rustorka', `http://rustorka.com/forum/tracker.php?nm=${gameName}&o=10&s=2`, 'Поиск на rustorka.com');
  67. let rutrackerButton = createSVGButton('RuTracker', `https://rutracker.org/forum/tracker.php?nm=${gameName}&o=10&s=2`, 'Поиск на rutracker.org');
  68.  
  69. // Создаем контейнер для плавающих кнопок
  70. let buttonContainer = document.createElement('div');
  71. buttonContainer.className = 'floating-container';
  72.  
  73. // Добавляем кнопки в контейнер
  74. buttonContainer.appendChild(onlineFixButton);
  75. buttonContainer.appendChild(rustorkaButton);
  76. buttonContainer.appendChild(rutrackerButton);
  77.  
  78. // Добавляем контейнер на страницу
  79. document.body.appendChild(buttonContainer);
  80.  
  81. // Применяем стили для плавающих кнопок
  82. const style = document.createElement('style');
  83. style.innerHTML = `
  84. .floating-container {
  85. position: fixed;
  86. top: 100px;
  87. left: 10px;
  88. display: flex;
  89. flex-direction: column;
  90. gap: 10px;
  91. z-index: 1000;
  92. }
  93.  
  94. .floating-svg-button {
  95. display: block;
  96. width: 140px; /* Ширина кнопки */
  97. height: 40px; /* Высота кнопки */
  98. text-decoration: none;
  99. transition: transform 0.3s ease, box-shadow 0.3s ease;
  100. }
  101.  
  102. .floating-svg-button:hover {
  103. transform: scale(1.05); /* Легкое увеличение при наведении */
  104. box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2); /* Тень при наведении */
  105. }
  106. `;
  107. document.head.appendChild(style);
  108. })();