ByBit Tooltip Creator

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

目前为 2024-04-29 提交的版本。查看 最新版本

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