您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Advanced customization tool for BlackRussia logs with theme engine and Rasul's modifications
// ==UserScript== // @name Rasul's BRP Logs Customizer // @namespace https://logs.blackrussia.online/ // @version 1.1.0 // @description Advanced customization tool for BlackRussia logs with theme engine and Rasul's modifications // @author Rasul // @match https://logs.blackrussia.online/gslogs/* // @icon https://i.postimg.cc/YCbhXXMH/562-E0-EDD-181-B-494-D-B689-6-A25-A1-D1-C641.png // @license MIT // @grant GM_addStyle // @supportURL https://t.me/therasuI // ==/UserScript== (function () { 'use strict'; scriptInit(); function createStyleButton(element) { const styleToggle = document.createElement('button'); styleToggle.className = 'style-button'; styleToggle.id = 'style-modal-toggle'; styleToggle.href = '#!'; styleToggle.tabIndex = '0'; styleToggle.dataset.bsToggle = 'modal'; styleToggle.dataset.bsTarget = '#container-background'; styleToggle.innerHTML = ` <div style=" display: flex; justify-content: center; align-items: center; width: 100%; height: 100%; "> <span>STYLE</span> <span style=" font-size: 0.8em; margin-left: 5px; color: #ff8800; text-shadow: 0 0 3px #ff8800; ">Rasul</span> </div> `; const replaceElement = document.querySelector(element); if (replaceElement) { replaceElement.replaceWith(styleToggle); } } function createStyleContainerBg(element) { const containerBg = document.createElement('div'); containerBg.className = 'modal fade'; containerBg.id = 'container-background'; containerBg.tabIndex = '-1'; containerBg.style.display = 'none'; containerBg.ariaHidden = 'true'; const parentElement = document.querySelector(element); if (parentElement) { parentElement.parentNode.insertBefore(containerBg, parentElement); const containerContent = document.createElement('div'); containerContent.className = 'modal-dialog modal-dialog-centered'; containerContent.id = 'style-container-content'; containerBg.appendChild(containerContent); const styleContainer = document.createElement('div'); styleContainer.className = 'modal-content'; containerContent.appendChild(styleContainer); const styleContHead = document.createElement('div'); const styleContBody = document.createElement('div'); styleContHead.className = 'modal-header'; styleContBody.className = 'modal-body'; styleContBody.style.display = 'flex'; styleContBody.style.flexDirection = 'column'; styleContainer.appendChild(styleContHead); styleContainer.appendChild(styleContBody); const styleTitleBadge = document.createElement('span'); styleTitleBadge.className = 'badge bg-success'; styleTitleBadge.textContent = 'STYLE'; styleTitleBadge.style.fontSize = '16px'; styleContHead.appendChild(styleTitleBadge); const styleTitleText = document.createElement('span'); styleTitleText.className = 'style-title-text'; styleTitleText.textContent = 'Переключатель Тем | by Rasul'; styleContHead.appendChild(styleTitleText); const styleClose = document.createElement('button'); styleClose.type = 'button'; styleClose.className = 'btn-close'; styleClose.dataset.bsDismiss = 'modal'; styleClose.ariaLabel = 'Close'; styleContHead.appendChild(styleClose); const switchStyleBlock = document.createElement('label'); switchStyleBlock.className = 'switch'; switchStyleBlock.innerHTML = ` <input type="checkbox" id="styleToggleCheck"> <span class="slider round" style="padding-right: 20px;"></span> <div class="addingText tooltip-style" style="display: block; width: max-content; margin: 5px; margin-left: 50px">Включить Переливание Текста <span class="tooltip-style-text">Добавляет анимированный градиент на некоторые элементы (повышается нагрузка)</span></div> `; styleContBody.appendChild(switchStyleBlock); const styleToggleCheck = document.getElementById('styleToggleCheck'); if (localStorage.getItem('styleThemeEnabled') === 'true') { styleToggleCheck.checked = true; applyTextGradient(); } styleToggleCheck.addEventListener('change', function () { if (styleToggleCheck.checked) { applyTextGradient(); localStorage.setItem('styleThemeEnabled', 'true'); } else { removeTextGradient(); localStorage.setItem('styleThemeEnabled', 'false'); } }); const switchNumsBlock = document.createElement('label'); switchNumsBlock.className = 'switch'; switchNumsBlock.innerHTML = ` <input type="checkbox" id="switchNumsCheck"> <span class="slider round" style="padding-right: 20px;"></span> <div class="addingText tooltip-style" style="display: block; width: max-content; margin: 5px; margin-left: 50px">Включить Разряды Чисел <span class="tooltip-style-text">Переключает способ отображения чисел (1000 => 1 000)<br>Требуется Перезагрузка</span><img src='https://cdn-icons-png.flaticon.com/512/25/25429.png' style='width: 15px; height: 15px; filter: invert(1)'></img></div> `; switchNumsBlock.style.marginTop = '20px'; styleContBody.appendChild(switchNumsBlock); const switchNumsCheck = document.getElementById('switchNumsCheck'); if (localStorage.getItem('numsSeparateEnabled') === 'true') { switchNumsCheck.checked = true; applyNumsSeparate(); } switchNumsCheck.addEventListener('change', function () { if (switchNumsCheck.checked) { applyNumsSeparate(); localStorage.setItem('numsSeparateEnabled', 'true'); location.reload(); } else { localStorage.setItem('numsSeparateEnabled', 'false'); location.reload(); } }); const switchCopyBankBlock = document.createElement('label'); switchCopyBankBlock.className = 'switch'; switchCopyBankBlock.innerHTML = ` <input type="checkbox" id="switchBankCopyCheck"> <span class="slider round" style="padding-right: 20px;"></span> <div class="addingText tooltip-style" style="display: block; width: max-content; margin: 5px; margin-left: 50px">Включить Режим Доказательств <span class="tooltip-style-text">Копирование описания транзакций всех категорий (кроме Бизнесы/Фракции) в без системной информации<br>Требуется перезагрузка</span><img src='https://cdn-icons-png.flaticon.com/512/25/25429.png' style='width: 15px; height: 15px; filter: invert(1)'></img></div> `; switchCopyBankBlock.style.marginTop = '20px'; styleContBody.appendChild(switchCopyBankBlock); const switchCopyBank = document.getElementById('switchBankCopyCheck'); if (localStorage.getItem('bankCheckEnabled') === 'true') { switchCopyBank.checked = true; applyCopyDocs(); } switchCopyBank.addEventListener('change', function () { if (switchCopyBank.checked) { applyCopyDocs(); localStorage.setItem('bankCheckEnabled', 'true'); location.reload(); } else { localStorage.setItem('bankCheckEnabled', 'false'); location.reload(); } }); const fontSelectorBlock = document.createElement('label'); fontSelectorBlock.className = 'font-selector-block'; styleContBody.appendChild(fontSelectorBlock); const fontSelector = document.createElement('select'); fontSelector.className = 'selector'; fontSelector.id = 'font-selector'; const storedFont = localStorage.getItem('selectedFont') || 'Roboto'; const fonts = ['Bad Script', 'Comfortaa', 'Fira Sans', 'Marmelad', 'Montserrat', 'Neucha', 'Play', 'Roboto', 'Sofia Sans', 'Ubuntu']; fonts.forEach(font => { const option = document.createElement('option'); option.value = font; option.textContent = font; if (font === storedFont) { option.selected = true; document.body.style.fontFamily = font; } fontSelector.appendChild(option); }); fontSelector.addEventListener('change', function () { const selectedFont = this.value; document.body.style.fontFamily = selectedFont; localStorage.setItem('selectedFont', selectedFont); }); fontSelectorBlock.appendChild(fontSelector); const fontSelectorText = document.createElement('span'); fontSelectorText.className = 'addingText'; fontSelectorText.textContent = 'Выбор Шрифта'; fontSelectorBlock.appendChild(fontSelectorText); const colorSelectorBlock = document.createElement('label'); colorSelectorBlock.className = 'color-selector-block'; styleContBody.appendChild(colorSelectorBlock); const colorSelector = document.createElement('select'); colorSelector.className = 'selector'; colorSelector.id = 'color-selector'; const storedColor = localStorage.getItem('selectedColor') || 'WHITE'; const colors = ['-------МЯГКИЕ-------', 'PINK', 'KHAKI', 'SKYBLUE', 'PALEGREEN', '', '-------ЯРКИЕ-------', 'RED', 'LIME', 'CYAN', 'WHITE', 'YELLOW', 'MAGENTA', 'DEEPPINK']; const colorCodes = { 'PINK': '#FFC0CB', 'KHAKI': '#F0E68C', 'SKYBLUE': '#87CEEB', 'PALEGREEN': '#98FB98', 'RED': '#FF0000', 'LIME': '#00FF00', 'CYAN': '#00FFFF', 'WHITE': '#FFFFFF', 'YELLOW': '#FFFF00', 'MAGENTA': '#FF00FF', 'DEEPPINK': '#FF1493' }; colors.forEach(color => { const option = document.createElement('option'); option.value = color; option.textContent = color; if (color === storedColor) { option.selected = true; applySelectedStyle(colorCodes[color]); } colorSelector.appendChild(option); }); colorSelector.addEventListener('change', function () { if (this.value !== '-------МЯГКИЕ-------' && this.value !== '' && this.value !== '-------ЯРКИЕ-------') { const selectedColor = this.value; localStorage.setItem('selectedColor', selectedColor); applySelectedStyle(colorCodes[selectedColor]); } }); colorSelectorBlock.appendChild(colorSelector); const colorSelectorText = document.createElement('span'); colorSelectorText.className = 'addingText'; colorSelectorText.textContent = 'Выбор Цвета'; colorSelectorBlock.appendChild(colorSelectorText); const brightnessSliderBlock = document.createElement('label'); brightnessSliderBlock.className = 'brightness-slider-block'; styleContBody.appendChild(brightnessSliderBlock); const storedBright = localStorage.getItem('savedBrightness') || '100'; const htmlContent = document.querySelector('html'); const brightnessSlider = document.createElement('input'); htmlContent.style.filter = `brightness(${storedBright}%)`; brightnessSlider.id = 'brightness-slider'; brightnessSlider.type = 'range'; brightnessSlider.min = '30'; brightnessSlider.max = '100'; brightnessSlider.style.marginTop = '30px'; brightnessSlider.style.marginRight = '10px'; brightnessSlider.value = storedBright; brightnessSlider.addEventListener('input', function () { const brightnessValue = this.value; localStorage.setItem('savedBrightness', brightnessValue); htmlContent.style.filter = `brightness(${brightnessValue}%)`; }); brightnessSliderBlock.appendChild(brightnessSlider); const brightnessSliderText = document.createElement('span'); brightnessSliderText.className = 'addingText'; brightnessSliderText.textContent = 'Выбор Яркости'; brightnessSliderBlock.appendChild(brightnessSliderText); const nickColorBlock = document.createElement('label'); nickColorBlock.className = 'color-picker-nickname'; styleContBody.appendChild(nickColorBlock); const colorNickElement = document.createElement('input'); const nickColor = localStorage.getItem('playerNameColor') || '#ff8800'; colorNickElement.className = 'color-picker'; colorNickElement.type = 'color'; colorNickElement.value = nickColor; colorNickElement.addEventListener('input', function () { const selectedColor = colorNickElement.value; const tdElements = document.querySelectorAll('td.td-player-name[data-v-2d76ca92=""]'); localStorage.setItem('playerNameColor', selectedColor); tdElements.forEach(function (td) { const playerNick = td.querySelector('a'); if (playerNick) { playerNick.style.color = selectedColor; playerNick.style.textShadow = '0px 0px 1px' + selectedColor; } }); }); nickColorBlock.appendChild(colorNickElement); const colorNickText = document.createElement('span'); colorNickText.className = 'addingText'; colorNickText.textContent = 'Цвет Никнеймов'; nickColorBlock.appendChild(colorNickText); const categoryColorBlock = document.createElement('label'); categoryColorBlock.className = 'color-picker-category'; styleContBody.appendChild(categoryColorBlock); const colorCategoryElement = document.createElement('input'); const categoryColor = localStorage.getItem('categoryColor') || '#0088ff'; colorCategoryElement.className = 'color-picker'; colorCategoryElement.type = 'color'; colorCategoryElement.value = categoryColor; colorCategoryElement.addEventListener('input', function () { const selectedColor = colorCategoryElement.value; const tdElements = document.querySelectorAll('td.td-category[data-v-2d76ca92=""]'); localStorage.setItem('categoryColor', selectedColor); tdElements.forEach(function (td) { const category = td.querySelector('a'); if (category) { category.style.color = selectedColor; category.style.textShadow = '0px 0px 1px' + selectedColor; } }); }); categoryColorBlock.appendChild(colorCategoryElement); const colorCategoryText = document.createElement('span'); colorCategoryText.className = 'addingText'; colorCategoryText.textContent = 'Цвет Категорий'; categoryColorBlock.appendChild(colorCategoryText); const bugReportBlock = document.createElement('label'); bugReportBlock.className = 'bug-report-block'; styleContBody.appendChild(bugReportBlock); const bugReportTG = document.createElement('a'); bugReportTG.href = 'https://t.me/therasuI'; bugReportTG.target = '_blank'; bugReportTG.innerHTML = `<img class="bug-report-button" src="https://upload.wikimedia.org/wikipedia/commons/thumb/8/82/Telegram_logo.svg/512px-Telegram_logo.svg.png" alt="Telegram">`; bugReportBlock.appendChild(bugReportTG); const bugReportVK = document.createElement('a'); bugReportVK.href = 'https://vk.com/id838357478'; bugReportVK.target = '_blank'; bugReportVK.innerHTML = `<img class="bug-report-button" src="https://cdn-icons-png.flaticon.com/512/145/145813.png" alt="VK">`; bugReportBlock.appendChild(bugReportVK); const bugReportGF = document.createElement('a'); bugReportGF.href = ''; bugReportGF.target = '_blank'; bugReportGF.innerHTML = `<img class="bug-report-button" src="https://raw.githubusercontent.com/JasonBarnabe/greasyfork/master/public/images/blacklogo512.png" alt="Greasy Fork">`; bugReportBlock.appendChild(bugReportGF); const bugReportText = document.createElement('span'); bugReportText.className = 'addingText'; bugReportText.textContent = 'Баг / Предложение'; bugReportBlock.appendChild(bugReportText); } } function applyNumsSeparate() { function formatNumbersInTable() { const tableCells = document.querySelectorAll('td.td-transaction-amount, td.td-balance-after'); tableCells.forEach(cell => { const text = cell.textContent.trim(); if (!isNaN(text.replace(/,/g, ''))) { const originalValue = parseInt(text.replace(/,/g, '')); const formattedValue = originalValue.toLocaleString('ru'); cell.textContent = formattedValue.toString(); cell.addEventListener('copy', function (event) { event.clipboardData.setData('text/plain', formattedValue.replace(/\s/g, '')); event.preventDefault(); }); } }); } formatNumbersInTable(); const observer = new MutationObserver(function (mutationsList) { formatNumbersInTable(); }); observer.observe(document.body, { childList: true, subtree: true }); } function applyCopyDocs() { function formatTransactionsInTable() { const tableRows = document.querySelectorAll('tr.second-row'); tableRows.forEach(row => { const transactionCell = row.querySelector('.td-transaction-desc'); if (!transactionCell) return; const playerName = row.previousSibling?.querySelector('.td-player-name a')?.textContent || 'Неизвестно'; const categoryName = row.previousSibling?.querySelector('.td-category a')?.textContent || 'Неизвестно'; const transactionAmount = row.previousSibling?.querySelector('.td-transaction-amount')?.textContent || '0'; const transactionDate = row.previousSibling?.querySelector('.td-time')?.textContent?.replace(/\s/g, ' | ') || 'Дата неизвестна'; const originalText = transactionCell.textContent; transactionCell.addEventListener('copy', function (event) { const selection = window.getSelection().toString(); if (selection.length >= transactionCell.textContent.length) { function replaceData(expected = '', regex = '') { if (regex !== '') { var final = originalText.replace(new RegExp(regex), expected); } else { var final = expected; } event.clipboardData.setData('text/plain', final); event.preventDefault(); } function notSupported() { alert('Данная строка не поддерживается скриптом, отправьте эту строку автору скрипта'); event.clipboardData.setData('text/plain', originalText); event.preventDefault(); } if (categoryName === 'BlackPass') { if (originalText.includes('Получил')) { replaceData(`[BlackPass | ${transactionDate}] ${playerName} - $1`, /(Получил .+)/); } else if (originalText.includes('+ Выдача')) { replaceData(`[BlackPass | ${transactionDate}] ${playerName} - Получил ${transactionAmount} рублей`); } } else { event.clipboardData.setData('text/plain', originalText); event.preventDefault(); } } }); }); } formatTransactionsInTable(); const observer = new MutationObserver(function (mutationsList) { formatTransactionsInTable(); }); observer.observe(document.body, { childList: true, subtree: true }); } function applySelectedStyle(color) { function darkenColor(hexCode, percent) { percent = Math.max(0, Math.min(100, percent)); var r = parseInt(hexCode.substring(1, 3), 16); var g = parseInt(hexCode.substring(3, 5), 16); var b = parseInt(hexCode.substring(5, 7), 16); r = Math.round(r * (100 - percent) / 100); g = Math.round(g * (100 - percent) / 100); b = Math.round(b * (100 - percent) / 100); var result = '#' + (r < 16 ? '0' : '') + r.toString(16) + (g < 16 ? '0' : '') + g.toString(16) + (b < 16 ? '0' : '') + b.toString(16); return result; } const darkColor80 = darkenColor(color, 80); const darkColor50 = darkenColor(color, 50); const darkColor20 = darkenColor(color, 20); const currentStyleElement = document.getElementById('customStyle'); if (currentStyleElement) { currentStyleElement.remove(); } const styleElement = document.createElement('style'); styleElement.id = 'customStyle'; styleElement.textContent = ` h1, h2, h3, h4, h5, h6 { color: ${color} !important; text-shadow: 0px 0px 10px ${color} !important; } #log-filter[data-v-2d76ca92] .form-label[data-v-2d76ca92] { color: ${color} !important; text-shadow: 0px 0px 2px ${color} !important; } #log-filter-section[data-v-2d76ca92] { border: 1px solid ${color} !important; } .navbar-dark .navbar-nav .nav-link { color: ${color} !important; text-shadow: 0px 0px 2px ${color} !important; } #log-table[data-v-2d76ca92]>:not(:last-child)>:last-child>*, .table>:not(:last-child)>:last-child>* { color: ${color} !important; border-bottom: 1px solid ${color} !important; } #log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] { color: ${color} !important; text-shadow: 0px 0px 2px ${color} !important; } #log-table[data-v-2d76ca92]>:not(caption)>*>*, .table-borderless>:not(caption)>*>* { border-bottom: 1px solid ${color} !important; } #log-table[data-v-2d76ca92] .second-row[data-v-2d76ca92] td[data-v-2d76ca92] { color: ${color} !important; text-shadow: 0px 0px 2px ${color} !important; } .form-control { color: ${color} !important; border: 1px solid ${color} !important; } .form-control:focus { box-shadow: 0px 0px 10px ${color} !important; } .multiselect.is-open.is-active { box-shadow: 0px 0px 10px ${color} !important; } .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4), .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) { color: ${color} !important; border: 1px solid ${color} !important; background: ${darkColor80} !important; } .autoComplete_wrapper>input { border: 1px solid ${color} !important; } .dp__input { border: 1px solid ${color} !important; color: ${color} !important; } .dp__calendar_header_item { color: ${color} !important; } .dp__month_year_row { color: ${color} !important; } .dp__overlay_cell_pad { color: ${color} !important; } body::-webkit-scrollbar-track { background: ${darkColor80} !important; } body::-webkit-scrollbar-thumb { background: linear-gradient(${darkColor80}, ${color}, ${darkColor80}) !important; } .style-button { box-shadow: 0px 0px 10px ${darkColor20} !important; border-color: ${darkColor20} !important; color: ${darkColor20} !important; } .style-button:hover { background: ${darkColor80} !important; box-shadow: 0px 0px 10px ${color} !important; border-color: ${color} !important; color: ${color} !important; } .modal-content { box-shadow: 0 0 10px ${color} !important; } .modal-header { border: 1px solid ${color} !important; } .modal-body { border: 1px solid ${color} !important; color: ${color} !important; } .style-title-text { color: ${color} !important; } .bg-success { border: 1px solid ${color} !important; box-shadow: 0px 0px 10px ${color} !important; color: ${color} !important; } .bug-report-block { border: 2px solid ${color} !important; box-shadow: 0 0 5px ${color} !important; } .bug-report-button { border: 2px solid ${color} !important; box-shadow: 0 0 5px ${color} !important; } .bi-funnel { color: ${color} !important; } .selector { border: 1px solid ${color} !important; box-shadow: 0 0 5px ${color} !important; color: ${color} !important; background: ${darkColor80} !important; } .selector:hover { background: ${darkColor50} !important; } .selector option { background: ${darkColor80} !important; } input[type=range] { box-shadow: 0px 0px 5px ${color} !important; } input[type=range]::-webkit-slider-runnable-track { border: 2px solid ${color} !important; background-color: ${darkColor80} !important; } input[type=range]::-webkit-slider-runnable-track:hover { background-color: ${darkColor50} !important; } input[type=range]::-webkit-slider-thumb { background: ${darkColor80} !important; } input[type=range]::-webkit-slider-thumb:hover { background: ${darkColor50} !important; } input[type="color"] { border: 2px solid ${color} !important; box-shadow: 0px 0px 5px ${color} !important; } input[type="color"]:hover { box-shadow: 0px 0px 10px 2px ${color} !important; } .show-filter-btn[data-v-2d76ca92] { background: ${darkColor80} !important; } .navbar-brand { color: ${darkColor20} !important; } .navbar-brand:hover { color: ${color} !important; } .bi-arrow-bar-right { color: ${color} !important; } #next-page-btn[data-v-2d76ca92], .btn-secondary, .close-btn, .icon-btn, .show-filter-btn { border-color: ${color} !important; color: ${color} !important; } #prev-page-btn[data-v-2d76ca92], .btn-outline-secondary { border-color: ${color} !important; color: ${color} !important; } .bi-sort-down::before { color: ${color} !important; text-shadow: 0px 0px 2px ${color} !important; } .slider { background-color: ${darkColor20} !important; box-shadow: 0 0 5px ${darkColor20} !important; transition: all .4s ease; } .slider:hover { background-color: ${darkColor50} !important; } .slider:before { background-color: ${color} !important; } input:checked + .slider { background-color: ${darkColor80} !important; } input:checked + .slider:hover { background-color: ${darkColor50} !important; } `; document.head.appendChild(styleElement); } function applyTextGradient() { const textGradient = document.createElement('style'); textGradient.id = 'text-gradient'; textGradient.textContent = ` @keyframes gradientCategory { 0% { background-position: 0% 100%; } 100% { background-position: 1200% 100%; } } .td-category[data-v-2d76ca92] a[data-v-2d76ca92] { background: linear-gradient(45deg, #00ffff, #0045ff, #00ffff); background-size: 150% 150%; animation: gradientCategory 5s linear infinite; color: transparent !important; -webkit-background-clip: text; font-style: italic; font-weight: 700; text-decoration: none; text-shadow: 0px 0px 10px #08f; padding-right: 3px; } .td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] { background: linear-gradient(45deg, #ffff00, #ff4400, #ffff00); background-size: 150% 150%; animation: gradientCategory 5s linear infinite; color: transparent !important; -webkit-background-clip: text; font-style: italic; font-weight: 700; text-decoration: none; text-shadow: 0px 0px 10px #f80; padding-right: 3px; } .navbar-brand { background: linear-gradient(45deg, #00ccff, #ff4400, #00ccff); background-size: 150% 150%; animation: gradientCategory 5s linear infinite; color: transparent !important; -webkit-background-clip: text; font-style: italic; font-weight: 700; text-decoration: none; text-shadow: 0px 0px 10px #888; padding-right: 3px; } `; document.head.appendChild(textGradient); } function removeTextGradient() { const textGradient = document.getElementById('text-gradient'); if (textGradient) { document.head.removeChild(textGradient); } } function applyMenuStyles() { const pseudoClasses = document.createElement('style'); pseudoClasses.id = 'elements-pseudo-classes'; pseudoClasses.textContent = ` .style-button { color: #ffffff; background: transparent; border: 3px solid #ffffff; border-radius: 10px; box-shadow: 0px 0px 10px #ffffff; width: 10%; transition-duration: 0.5s; } .style-button:hover { background: #222; box-shadow: 0px 0px 10px #aaaaff; border-color: #aaaaff; color: #aaaaff; } .style-title-text { font-size: 24px; color: #fff; font-weight: 600; } .switch { position: relative; display: inline-block; width: 60px; height: 34px; padding-left: 20px; } .switch input { display: none; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #aaaaaa; box-shadow: 0 0 5px #aaaaaa; transition: all .4s ease; } .slider:hover { background-color: #666666; } .slider:before { position: absolute; content: ""; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: #cccccc; box-shadow: 0 0 5px #000000; transition: all .4s ease; } input:checked + .slider { background-color: #222222; } input:checked + .slider:hover { background-color: #666666; } input:focus + .slider { box-shadow: 0 0 5px #222222; background-color: #444444; } input:checked + .slider:before { transform: translateX(26px); } .slider.round { border-radius: 34px; } .slider.round:before { border-radius: 50%; } .tooltip-style { position: relative; display: inline-block; border-bottom: 1px dotted; } .tooltip-style .tooltip-style-text { visibility: hidden; background-color: #222222; color: #fff; text-align: center; border-radius: 6px; padding: 5px; position: absolute; z-index: 1; width: 300px; bottom: 100%; left: 50%; margin-left: -150px; margin-bottom: 10px; transition: opacity 0.3s; opacity: 0; font-size: 16px; } .tooltip-style:hover .tooltip-style-text { visibility: visible; opacity: 0.95; } .selector { background: #222222; border: 1px solid #cccccc; border-radius: 20px; box-shadow: 0 0 5px #cccccc; color: #cccccc; cursor: pointer; font-size: 18px; margin-right: 10px; margin-top: 25px; padding: 4px; text-align: center; width: 40%; transition-duration: 0.5s; } .selector:hover { background: #444444; color: #ffffff; box-shadow: 0 0 5px #ffffff; } .selector option { background: #222222; } input[type=range] { width: 40%; border-radius: 10px; -webkit-appearance: none; -moz-appearance: none; appearance: none; box-shadow: 0px 0px 5px #cccccc; } input[type=range]::-webkit-slider-runnable-track { border-radius: 10px; height: 10px; border: 2px solid #cccccc; background-color: #222222; transition-duration: 0.5s; } input[type=range]::-webkit-slider-runnable-track:hover { border-radius: 10px; height: 10px; border: 2px solid #cccccc; background-color: #444444; } input[type=range]::-webkit-slider-thumb { background: #222222; border: 1px solid #cccccc; box-shadow: 0px 0px 2px #cccccc; border-radius: 25px; cursor: pointer; width: 15px; height: 30px; -webkit-appearance: none; margin-top: -10px; transition-duration: 0.5s; } input[type=range]::-webkit-slider-thumb:hover { background: #444444; border: 1px solid #ffffff; box-shadow: 0px 0px 2px #000000; border-radius: 25px; cursor: pointer; width: 20px; height: 40px; -webkit-appearance: none; margin-top: -15px; } input[type=range]::-moz-range-track { border-radius: 10px/100%; height: 5px; border: 1px solid cyan; background-color: #fff; } input[type=range]::-moz-range-thumb { background: #ecf0f1; border: 1px solid cyan; border-radius: 10px/100%; cursor: pointer; } .color-picker { margin-top: 25px; margin-right: 10px; width: 40%; vertical-align: bottom; } input[type="color"]::-webkit-color-swatch-wrapper { padding: 2px; } input[type="color"]::-webkit-color-swatch { border: none; border-radius: 20px; } input[type="color"] { -webkit-appearance: none; border: 2px solid #ffffff; background: #000; border-radius: 20px; overflow: hidden; outline: none; cursor: pointer; box-shadow: 0px 0px 5px #ffffff; transition-duration: 0.5s; } input[type="color"]:hover { -webkit-appearance: none; border: 2px solid #ffffff; background: #444444; border-radius: 20px; overflow: hidden; outline: none; cursor: pointer; box-shadow: 0px 0px 10px 2px #ffffff; } .addingText { font-size: 20px; font-style: italic; font-weight: 800; vertical-align: middle; } .bug-report-block { margin-top: 25px; margin-bottom: 5px; padding: 10px; border: 2px solid #fff; border-radius: 20px; box-shadow: 0 0 5px #fff; } .bug-report-button { width: 7%; margin-right: 5%; transition-duration: 0.5s; border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 5px #fff; } .bug-report-button:hover { filter: brightness(0.5); } `; document.head.appendChild(pseudoClasses); } function applySavedColors() { const savedNick = localStorage.getItem('playerNameColor') || '#ff8800'; const savedCategory = localStorage.getItem('categoryColor') || '#0088ff'; const savedColors = document.createElement('style'); savedColors.id = 'stored-NickCategory-Colors'; savedColors.textContent = ` .td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] { color: ${savedNick}; text-shadow: 0px 0px 1px ${savedNick}; } .td-category[data-v-2d76ca92] a[data-v-2d76ca92] { color: ${savedCategory}; text-shadow: 0px 0px 1px ${savedCategory}; } `; document.head.appendChild(savedColors); } function applyBodyStyle() { const bodyStyle = document.createElement('style'); bodyStyle.id = 'main-body-theme'; bodyStyle.textContent = ` h1, h2, h3, h4, h5, h6 { color: #fff; text-shadow: 0px 0px 10px #fff; } .navbar-dark .navbar-brand, .navbar-dark .navbar-brand:focus, .navbar-dark .navbar-brand:hover { color: #fff; font-weight: 900; transition-duration: 0.5s; } .bg-success { background: #000 !important; border: 1px solid #fff; box-shadow: 0px 0px 10px #fff; } .badge { border-radius: 7px; color: #fff; font-weight: 500; } .navbar-dark .navbar-nav .nav-link { color: #fff; text-shadow: 0px 0px 10px #fff; } .bi-arrow-left::before { color: #fff; } .show-filter-btn[data-v-2d76ca92] { background: #333; border-bottom-left-radius: 10px; } .alert[data-v-0c0e47d2] { border-radius: 20px; box-shadow: 0 0 10px 2px #f00; } .bg-dark { bs-bg-opacity: 0; background: #000 !important; } #game-logs-app { background: #000; } body { background-color: #000; background-size: 100%; } body::-webkit-scrollbar { width: 16px; } body::-webkit-scrollbar-track { background: #222; } body::-webkit-scrollbar-thumb { background: #fff; } .accessible-servers .page-intro { color: #0ff; text-align: center; text-shadow: 0px 0px 10px #fff; } .accessible-servers .game-logs-link { font-size: 1.5rem; text-shadow: 0px 0px 10px #f0f; transition-duration: 0.5s; } a { color: #faf; text-decoration: none; } a:hover { color: #f0f; } #next-page-btn[data-v-2d76ca92], .btn-secondary, .close-btn, .icon-btn, .show-filter-btn { background-color: #222; border-color: #fff; color: #fff; } #next-page-btn[data-v-2d76ca92]:hover, .btn-secondary:hover, .close-btn:hover, .icon-btn:hover, .show-filter-btn:hover { background-color: #444; border-color: #aaa; color: #fff; } #prev-page-btn[data-v-2d76ca92], .btn-outline-secondary { border-color: #fff; color: #fff; } #prev-page-btn[data-v-2d76ca92]:hover, .btn-outline-secondary:hover { background-color: #444; border-color: #aaa; color: #fff; } #log-table[data-v-2d76ca92]>:not(:last-child)>:last-child>*, .table>:not(:last-child)>:last-child>* { border: 1px solid #111; border-bottom: 1px solid #fff; background: #111; color: #fff; } #log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] { text-align: center; background: #111; color: #fff; text-shadow: 0px 0px 2px #fff; } #log-table[data-v-2d76ca92] .second-row[data-v-2d76ca92] td[data-v-2d76ca92] { padding: 0.5rem 0.5rem 0.5rem 1.5rem; background: #000; color: #fff; text-shadow: 0px 0px 2px #fff; } #log-table[data-v-2d76ca92]>:not(caption)>*>*, .table-borderless>:not(caption)>*>* { border: 1px solid rgba(0, 0, 0, 0); border-bottom: 1px solid #fff; } #log-table[data-v-2d76ca92] .first-row[data-v-2d76ca92] td[data-v-2d76ca92] { border: 1px solid rgba(0, 0, 0, 0); text-align: center; } .td-category[data-v-2d76ca92] a[data-v-2d76ca92] { color: #08f; -webkit-background-clip: text; font-style: italic; font-weight: 700; text-decoration: none; text-shadow: 0px 0px 1px #08f; padding-right: 3px; } .td-player-name[data-v-2d76ca92] a[data-v-2d76ca92] { color: #f80; -webkit-background-clip: text; font-style: italic; font-weight: 700; text-decoration: none; text-shadow: 0px 0px 1px #f80; padding-right: 3px; } .td-index[data-v-2d76ca92] { background: linear-gradient(90deg, rgba(51, 51, 51, 1) 0%, rgba(17, 17, 17, 1) 100%) !important; color: #fff; } .bi-sort-down::before { color: #f90; text-shadow: 0px 0px 2px #f90; } .bi-sort-up::before { color: #f90; text-shadow: 0px 0px 2px #f90; } #log-filter-section[data-v-2d76ca92] { background: #000; border: 1px solid #fff; border-radius: 25px; height: 1000px; } #log-filter[data-v-2d76ca92] .form-label[data-v-2d76ca92] { color: #fff; font-weight: 500; } #log-filter[data-v-2d76ca92] .close-btn[data-v-2d76ca92] { height: 41px; background: #000; border-bottom-left-radius: 10px; border: 1px solid #000; } .btn-primary, .submit-btn { background-color: #000; border: 3px solid #0af; border-radius: 10px; color: #0ff; } .btn-primary:hover, .submit-btn:hover { background-color: #033; border-color: #fff; color: #fff; transition: all .2s ease-in-out; } .btn-outline-danger { border: 3px solid #f00; color: #f00; border-radius: 10px; } .btn-outline-danger:hover { background-color: #900; border-color: #fff; color: #fff; transition: all .2s ease-in-out; } .bi-question-circle-fill::before { color: #666; text-shadow: 0px 0px 10px #000; } strong { color: #0ff; } .input-group.has-validation>.dropdown-toggle:nth-last-child(n+4), .input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3), .input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu) { border-bottom-right-radius: 0; border-top-right-radius: 0; background: #111; color: #fff; border: 1px solid #fff; } .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback):not(.field-error) { border-bottom-left-radius: 0; border-top-left-radius: 0; margin-left: -1px; background: #000; color: #fff; } .multiselect-search { background: #000; border: 0; bottom: 0; box-sizing: border-box; color: #fff; left: 0; outline: none; width: 100%; } .multiselect-option { align-items: center; box-sizing: border-box; cursor: pointer; background: #000; text-decoration: none; } .multiselect .multiselect-option.is-pointed { background-color: #222; color: #fff; } .multiselect .multiselect-option.is-pointed.is-selected { background-color: #666; color: #fff; } .multiselect .multiselect-option.is-selected { background-color: #444; color: #fff; } .multiselect-dropdown::-webkit-scrollbar { width: 12px; } .multiselect-dropdown::-webkit-scrollbar-track { background: #222; border-left: 1px solid #fff; } .multiselect-dropdown::-webkit-scrollbar-thumb { background-color: #fff; border-radius: 20px; border: 1px solid #222; } .multiselect.is-open.is-active { box-shadow: 0px 0px 10px #fff; } .dropdown-menu { background-color: #222; } .dropdown-menu show { position: absolute; inset: 0px auto auto 0px; margin: 0px; transform: translate(-1px, 40px); background: #333; } .dropdown-item:focus, .dropdown-item:hover { background-color: #444; color: #1e2125; } .autoComplete_wrapper>input { background-color: #000; background-origin: border-box; background-position: left 1.05rem top 0.8rem; background-repeat: no-repeat; background-size: 1.4rem; border: 1px solid #fff; border-radius: 4px; box-sizing: border-box; color: #f90; outline: none; transition: all .4s ease; width: 100%; } .autoComplete_wrapper>input:focus { border: 1px solid #f90; color: #f90; } .autoComplete_wrapper>input:hover { color: #a60; transition: all .3s ease; } .autoComplete_wrapper>ul>li { background-color: #000; color: #fff; transition: all .2s ease; } .autoComplete_wrapper>ul>li:hover, .autoComplete_wrapper>ul>li[aria-selected=true] { background-color: #222; } .autoComplete_wrapper>ul>li mark { background-color: transparent; color: #f90; font-weight: 700; } .autoComplete_wrapper>ul::-webkit-scrollbar { width: 12px; } .autoComplete_wrapper>ul::-webkit-scrollbar-track { background: #222; border-left: 1px solid #fff; } .autoComplete_wrapper>ul::-webkit-scrollbar-thumb { background-color: #fff; border-radius: 20px; border: 1px solid #222; } .form-control { background-color: #000; border: 1px solid #fff; color: #fff; font-weight: 400; transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out; width: 100%; } .form-control:focus { background-color: #000; border-color: #fff; box-shadow: 0px 0px 10px #fff; color: #fff; } textarea.form-control { min-height: 100px; resize: none; } .lookup-symbol[data-v-2d76ca92] { color: #fff; font-weight: 500; text-shadow: 0px 0px 10px #fff; } .lookup-comment[data-v-2d76ca92] { color: #fff; font-weight: 400; text-shadow: 0px 0px 10px #fff; } .dp__input { background-color: #111; border: 1px solid #fff; border-radius: 5px; color: #fff; transition: border-color .2s cubic-bezier(.645, .045, .355, 1); width: 100%; } .dp__input_icons { color: #0ff; } .dp__month_year_row { background: #111; color: #fff; } .dp__inner_nav svg { color: #0ff; } .dp__calendar_header, .dp__calendar_wrap { background: #111; } .dp__calendar_header_item { color: #fff; } .dp__cell_inner { color: #fff; } .dp__active_date, .dp__range_end, .dp__range_start { background: #666; color: #fff; } .dp__date_hover:hover, .dp__date_hover_end:hover, .dp__date_hover_start:hover { background: #444; color: #fff; transition: all .5s ease-in-out; } .dp__cell_disabled, .dp__cell_offset { color: #444; } .dp__button { background: #222; } .dp__button_bottom { background: #222; color: #0ff; } .dp__button:hover { background: #333; color: #077; transition: all .5s ease-in-out; } .dp__month_year_select:hover { background: #222; color: #fff; transition: all .5s ease-in-out; } .dp__overlay_cell, .dp__overlay_cell_active { background: #444; } .dp__overlay_container { background: #000; } .dp__overlay_cell_disabled, .dp__overlay_cell_disabled:hover { background: #111; color: #444; } .dp__time_display { color: #aaa; } .dp__time_display:hover { background: #111; color: #fff; transition: all .3s ease-in-out; } .dp__inc_dec_button:hover { background: #222; color: #0ff; transition: all .3s ease-in-out; } .dp__cell_in_between, .dp__overlay_cell:hover { background: #666; color: #fff; transition: all .3s ease-in-out; } .dp__overlay_cell_pad { padding: 10px 0; color: #999; } .dp__inner_nav:hover { background: #333; color: #fff; transition: all .3s ease-in-out; } .dp__today { border: 1px solid #fff; } #playerNameInput::placeholder { color: #a60; } /* Loading Overlay */ #loading-overlay[data-v-173ec149] { height: 100%; width: 100%; } #loading-overlay-heading[data-v-173ec149] { font-weight: 500; letter-spacing: 1px; text-align: center; text-transform: uppercase; background: linear-gradient(90deg, #ffffff, #444444, #ffffff); background-size: 150% 150%; background-clip: text; -webkit-background-clip: text; color: transparent !important; filter: saturate(0); animation: textGradient 5s linear infinite; text-shadow: none !important; } #loading-overlay[data-v-173ec149] .spinner[data-v-173ec149] { border-width: 0.375rem; color: #fff; height: 4rem; width: 4rem; } #loading-overlay-container[data-v-173ec149] { background-color: #000; height: 100%; justify-content: center; width: 100%; } /* Modal Dialog */ .modal [type=button], .modal [type=submit] { margin-left: 0.5rem; filter: invert(1); } .modal-header { background: #000; border: 1px solid #fff; align-items: center; border-bottom: 1px solid #dee2e6; border-top-left-radius: 25px; border-top-right-radius: 25px; } .modal-body { background: #000; border: 1px solid #fff; color: #fff; position: relative; border-bottom-left-radius: 25px; border-bottom-right-radius: 25px; } .modal-content { border-radius: 25px; box-shadow: 0 0 10px #fff; } .modal-open { padding-right: 0px !important; } .modal-backdrop { height: 100%; width: 100%; } .modal.fade.show { padding-right: 80px !important; padding-left: 80px !important; } .alert-danger, .alert-modal.failure .modal-content, .default-error-page .exception { background-color: #000; border: 5px solid #f11; border-radius: 50px; color: #fff; } .fade { transition: opacity .15s linear; backdrop-filter: blur(5px); } @keyframes textGradient { 0% { background-position: 0% 50%; } 100% { background-position: 1200% 50%; } } #placeholder-pic[data-v-9c1e68e2] { display: block; opacity: 0; margin: auto; } #placeholder-msg[data-v-9c1e68e2] { color: #0aa; text-align: center; } #content-placeholder[data-v-9c1e68e2] { background-image: url(https://snipboard.io/8kBudo.jpg); background-repeat: no-repeat; background-size: contain; background-position: center; } `; document.head.appendChild(bodyStyle); } function applyNewFonts() { const fontStyles = document.createElement('style'); fontStyles.id = 'import-fonts'; fontStyles.textContent = ` /* Import Fonts Stylesheet */ /* Imported Fonts: --- Bad Script --- --- Comfortaa --- --- Fira Sans --- --- Marmelad --- --- Montserrat --- --- Neucha --- --- Play --- --- Roboto --- --- Sofia Sans --- --- Ububntu --- */ /* Powered by Google Fonts API */ @import url('https://fonts.googleapis.com/css2?family=Bad+Script&family=Comfortaa&family=Fira+Sans&family=Marmelad&family=Montserrat&family=Neucha&family=Play&family=Roboto:ital@1&family=Sofia+Sans&family=Ubuntu&display=swap'); `; document.head.appendChild(fontStyles); } function replaceTableHeading() { const titleElement = document.querySelector('div.container-fluid span.badge.bg-success'); const tableHeading = document.querySelector('#log-table-heading'); if (titleElement && tableHeading) { tableHeading.textContent += ' - ' + titleElement.textContent; } } function replaceSpinnerImage() { const spinnerElement = document.querySelector('div.spinner.spinner-border[data-v-173ec149=""]'); if (spinnerElement) { const gifImageUrl = 'https://rb.ru/media/upload_tmp/2018/d1.gif'; const gifImage = document.createElement('img'); gifImage.id = 'replaced-loading-image'; gifImage.src = gifImageUrl; gifImage.style.width = '160px'; gifImage.style.height = '120px'; gifImage.style.filter = 'saturate(0)'; spinnerElement.replaceWith(gifImage); } } function addListenersAttributes() { const inputNameElement = document.querySelector('#playerNameInput'); const transactionData = document.querySelector('#log-filter-form__transaction-desc'); const playerIdElement = document.querySelector('#log-filter-form__player-id'); const playerIpElement = document.querySelector('#log-filter-form__player-ip'); const transactionAmountElement = document.querySelector('#log-filter-form__transaction-amount'); const transactionAfterElement = document.querySelector('#log-filter-form__balance-after'); const otherElement = document.querySelector('.btn.btn-primary'); if (inputNameElement) { inputNameElement.addEventListener('keydown', function (event) { if (event.key === 'Enter' || event.key === 'Tab') { if (otherElement) otherElement.click(); } }); } if (transactionData) { transactionData.addEventListener('keydown', function (event) { if (event.key === 'Enter' || event.key === 'Tab') { event.preventDefault(); if (otherElement) otherElement.click(); } }); } if (playerIdElement) playerIdElement.setAttribute('autocomplete', 'off'); if (playerIpElement) playerIpElement.setAttribute('autocomplete', 'off'); if (transactionAmountElement) transactionAmountElement.setAttribute('autocomplete', 'off'); if (transactionAfterElement) transactionAfterElement.setAttribute('autocomplete', 'off'); } function setPageTitle() { const titleElement = document.querySelector('div.container-fluid span.badge.bg-success'); if (titleElement) { document.title += ' - ' + titleElement.textContent; } } function scriptInit() { setPageTitle(); replaceTableHeading(); applyNewFonts(); applyBodyStyle(); replaceSpinnerImage(); applySavedColors(); createStyleButton('div.container-fluid span.badge.bg-success'); createStyleContainerBg('main'); applyMenuStyles(); addListenersAttributes(); const savedColor = localStorage.getItem('selectedColor'); const colorCodes = { 'PINK': '#FFC0CB', 'KHAKI': '#F0E68C', 'SKYBLUE': '#87CEEB', 'PALEGREEN': '#98FB98', 'RED': '#FA8072', 'LIME': '#00FF00', 'CYAN': '#00FFFF', 'WHITE': '#FFFFFF', 'YELLOW': '#FFFF00', 'MAGENTA': '#FF00FF', 'DEEPPINK': '#FF1493' }; if (savedColor && colorCodes[savedColor]) { applySelectedStyle(colorCodes[savedColor]); } const savedFont = localStorage.getItem('selectedFont'); if (savedFont) { document.body.style.fontFamily = savedFont; } const savedBrightness = localStorage.getItem('savedBrightness'); if (savedBrightness) { document.querySelector('html').style.filter = `brightness(${savedBrightness}%)`; } } })();