ByBit Tooltip Creator

Создание подсказки к заблокированным средствам по ордерам при наведении на сообщение о блокировке

  1. // ==UserScript==
  2. // @name ByBit Tooltip Creator
  3. // @namespace CryptOf
  4. // @license MIT
  5. // @version 1.0
  6. // @description Создание подсказки к заблокированным средствам по ордерам при наведении на сообщение о блокировке
  7. // @author Евгений Мухин
  8. // @match https://www.bybit.com/fiat/trade/otc/orderList/?orderType*
  9. // @grant none
  10. // @icon https://static.tildacdn.com/tild6138-6464-4437-b737-633632613034/ByBit_.svg
  11. // @icon64 https://static.tildacdn.com/tild6138-6464-4437-b737-633632613034/ByBit_.svg
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. 'use strict';
  16.  
  17. // Создание элемента для всплывающей подсказки
  18. const tooltip = document.createElement('div');
  19. tooltip.style.position = 'absolute';
  20. tooltip.style.padding = '10px';
  21. tooltip.style.background = '#333';
  22. tooltip.style.color = '#fff';
  23. tooltip.style.borderRadius = '5px';
  24. tooltip.style.display = 'none';
  25. tooltip.style.transition = 'opacity 0.3s';
  26. tooltip.style.zIndex = '1000';
  27. tooltip.style.lineHeight = '140%';
  28. document.body.appendChild(tooltip);
  29.  
  30. let unlockDate;
  31.  
  32. // Функция для создания всплывающих подсказок
  33. function createTooltip(element, text) {
  34. const splitText = text.split(' до ');
  35. unlockDate = new Date(splitText[1]);
  36. tooltip.style.opacity = '1';
  37. tooltip.style.display = 'block';
  38. const rect = element.getBoundingClientRect();
  39. tooltip.style.left = window.scrollX + rect.left + 'px';
  40. tooltip.style.top = window.scrollY + rect.top - tooltip.offsetHeight - 10 + 'px';
  41. updateTooltip(); // Обновляем подсказку сразу же при создании
  42. }
  43.  
  44. // Функция для обновления всплывающих подсказок
  45. function updateTooltip() {
  46. if (tooltip.style.display !== 'none') {
  47. const now = new Date();
  48. const diffMs = unlockDate - now;
  49. const diffHrs = Math.floor((diffMs % 86400000) / 3600000);
  50. const diffMins = Math.round(((diffMs % 86400000) % 3600000) / 60000);
  51. const diffSecs = Math.round((((diffMs % 86400000) % 3600000) % 60000) / 1000);
  52. const unlockDateString = ('0' + unlockDate.getDate()).slice(-2) + '.' + ('0' + (unlockDate.getMonth() + 1)).slice(-2) + '.' + (unlockDate.getFullYear() % 100) + ' ' + ('0' + unlockDate.getHours()).slice(-2) + ':' + ('0' + unlockDate.getMinutes()).slice(-2) + ':' + ('0' + unlockDate.getSeconds()).slice(-2) + ' (GMT+' + (unlockDate.getTimezoneOffset() / -60) + ')';
  53. tooltip.innerHTML = 'Монеты заблокированы до<br>' + unlockDateString + '<br>Осталось ' + diffHrs.toString().padStart(2, '0') + ':' + diffMins.toString().padStart(2, '0') + ':' + diffSecs.toString().padStart(2, '0');
  54. }
  55. }
  56.  
  57. // Отслеживание наведения мыши на элементы
  58. document.body.addEventListener('mouseover', function (event) {
  59. if (event.target.matches('.withdrawTips, .withdrawTipsText')) {
  60. const withdrawTipsElement = event.target.closest('.withdrawTips');
  61. if (withdrawTipsElement) {
  62. const textElement = withdrawTipsElement.querySelector('.withdrawTipsText');
  63. if (textElement) {
  64. createTooltip(withdrawTipsElement, textElement.textContent);
  65. }
  66. }
  67. }
  68. });
  69.  
  70. // Отслеживание ухода мыши с элемента для скрытия всплывающей подсказки
  71. document.body.addEventListener('mouseout', function (event) {
  72. if (event.target.matches('.withdrawTips, .withdrawTipsText')) {
  73. tooltip.style.opacity = '0';
  74. setTimeout(function () {
  75. tooltip.style.display = 'none';
  76. }, 300);
  77. }
  78. });
  79.  
  80. // Обновление всплывающей подсказки каждую секунду
  81. setInterval(updateTooltip, 1000);
  82. })();