iNNOKENTIY21

Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Код: [font=monospace] // ==UserScript== // @name RuBoard — OnLine // @namespace iNNOKENTIY21.RuBoard // @version 2025-06-09 // @description Раскраска ника в зависимости от онлайн он или нет // @author iNNOKENTIY21 // @match *://forum.ru-board.com/* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // @icon http://forum.ru-board.com/favicon.ico // @grant none // ==/UserScript== (function() { 'use strict'; // Функция для получения статуса онлайн пользователей function fetchOnlineUsers(callback) { var Protocol = window.location.protocol; $.ajax({ type: 'GET', url: Protocol + '//forum.ru-board.com/whosonline.cgi', dataType: 'html', cache: false, success: function (html) { var onlineUsers = {}; $('tr.dats td:first-child > b > a', html).each(function () { var name = $('font', this); if (name.length > 0) { onlineUsers[$(name).html()] = 'mod'; } else { onlineUsers[$(this).html()] = 'mem'; } }); callback(onlineUsers); } }); } // Функция для изменения цвета элемента function changeElementColor(element, color) { if (element) { element.style.color = color; // Изменяем цвет текста } else { console.warn(`Элемент не найден.`); } } // Функция для подсветки ника пользователя function highlightUserName(userName, color) { const regex = new RegExp(`\\b(${userName})\\b`, 'g'); // Регулярное выражение для поиска ника $('body *').contents().filter(function() { return this.nodeType === Node.TEXT_NODE && this.nodeValue.trim() !== ''; }).each(function() { const newHtml = this.nodeValue.replace(regex, `<span style="color: ${color};">$1</span>`); // Изменяем цвет текста if (newHtml !== this.nodeValue) { // Проверяем, изменился ли текст $(this).replaceWith(newHtml); } }); } // Функция для обновления цвета в зависимости от статуса пользователя function updateUserStatusColor(userName, status) { const colorMap = { 'mod': '#f66', // Красный для модераторов 'mem': '#33cc80' // Зеленый для пользователей }; // Определяем цвет в зависимости от статуса const color = colorMap[status] || '#ccc'; // Серый для оффлайн // Подсвечиваем ник в ссылках $('a.m > b').filter(function() { return $(this).text().trim() === userName; // Фильтруем элементы по тексту }).each(function() { changeElementColor(this.parentNode, color); // Изменяем цвет для родительского элемента <a> }); // Подсвечиваем ник в других текстах на странице highlightUserName(userName, color); } // Основная функция, которая запускает процесс function main() { if (document.cookie.indexOf('amembernamecookie') >= 0 && document.cookie.indexOf('apasswordcookie') >= 0) { fetchOnlineUsers(function (onlineUsers) { $(document).ajaxComplete(function () { $('a.m > b, tr[bgcolor="#FFFFFF"] td:last-child.dats > a', 'table').each(function () { var userName = $(this).text().trim(); // Получаем ник пользователя var status = onlineUsers[userName]; // Получаем статус пользователя updateUserStatusColor(userName, status); }); }); }); } } // Запускаем основную функцию main(); })(); [/font=monospace] |
|