Greasy Fork is available in English.
Отображение всех трофеев в профиле пользователя
当前为
// ==UserScript==
// @name LZT_Trophy
// @namespace http://greasyfork.icu/ru/users/1142494-llimonix
// @version 0.14
// @description Отображение всех трофеев в профиле пользователя
// @author llimonix
// @match https://zelenka.guru/*
// @match https://lolz.live/*
// @icon https://cdn-icons-png.flaticon.com/512/2830/2830919.png
// @grant none
// @license MIT
// ==/UserScript==
(function() {
let pageCounter = $('.page_counter');
if (pageCounter.length > 0) {
let hrefValue = pageCounter.attr('href');
let parts = hrefValue.replace('members/', '').split("/");
let value = parts[0];
let trophy;
if (~hrefValue.indexOf("members/")) {
value = `members/${value}`;
}
XenForo.ajax(`${value}/trophies`, {}).then(data => {
trophy = data.templateHtml;
let parser = new DOMParser();
trophy = parser.parseFromString(trophy, 'text/html');
let overlayScrollElements = $(trophy).find('.overlayScroll');
let totalCount = overlayScrollElements.length;
if (totalCount > 1) {
overlayScrollElements.first().remove();
}
let trophies = $(trophy).find('.trophy');
let trophiesList = trophies.map((_, trophy) => trophy.id).get();
let trophiesstyle = $(trophy).find('.trophy-icon');
let trophystyleList = trophiesstyle.map((_, trophy) => {
const style = trophy.style.cssText;
const match = style.match(/url\((.*?)\)/);
return match ? match[1].replace(/['"]/g, '') : null;
}).get();
// Функция для форматирования чисел
function formatNumber(num) {
if (num >= 1000) {
// Округляем до одного знака после запятой и добавляем K
return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'K';
}
return num.toString();
}
// Извлекаем счетчики из названий трофеев
let trophyCountersMap = {};
$(trophy).find('.trophy').each(function() {
let trophyId = $(this).attr('id');
let titleText = $(this).find('.title').text().trim();
let counterMatch = titleText.match(/—\s*([\d\s]+)/);
if (counterMatch) {
let numberStr = counterMatch[1].replace(/\s+/g, '');
let number = parseInt(numberStr);
if (!isNaN(number) && number !== 1) {
trophyCountersMap[trophyId] = formatNumber(number);
}
}
});
let titletrophy = $(trophy).find('.title');
let titleTexttrophyList = titletrophy.map((_, trophy) => {
let fullText = trophy.textContent.trim();
let cleanText = fullText.split(' — ')[0].trim();
return cleanText;
}).get();
let trophyLinks = {};
for (let i = 0; i < titleTexttrophyList.length; i++) {
let element = titleTexttrophyList[i];
$(trophy).find('.title:contains(' + element + ')').each(function () {
let href = $(this).closest('.trophy').find('.trophy-icon').attr('href');
if (href) {
trophyLinks[element] = href;
} else {
trophyLinks[element] = "None";
}
});
}
let htmlTrophy = "<ol>";
let titles = [];
for (let index = 0; index < trophystyleList.length; index++) {
let trophyLink = trophyLinks[titleTexttrophyList[index]];
let trophyStyle = `background-image: url('${trophystyleList[index]}'); --mask: url('${trophystyleList[index]}')`
let trophyId = trophiesList[index];
let counterHTML = trophyCountersMap[trophyId] ?
`<div class="trophyCounter">${trophyCountersMap[trophyId]}</div>` : '';
if (trophyLink == "None") {
htmlTrophy += `<li class="trophy DelayedTooltip" id="${trophiesList[index]}" style="position: relative;" tabindex="0"><div class="trophy-icon" style="${trophyStyle}"></div>${counterHTML}</li>`;
} else {
htmlTrophy += `<li class="trophy DelayedTooltip" id="${trophiesList[index]}" style="position: relative;" tabindex="0"><a href="${trophyLink}" class="trophy-icon" style="${trophyStyle}"></a>${counterHTML}</li>`;
}
titles.push(titleTexttrophyList[index]);
}
htmlTrophy += "</ol>";
if (screen.width <= 480) {
$('.memberViewTrophies').html(htmlTrophy);
$('.Responsive .memberViewTrophies').css('display', 'block');
$('.memberViewTrophies').css({
'position': 'relative',
'margin': '20px 0 0',
'overflow-x': 'scroll',
'white-space': 'nowrap'
});
$('.memberViewTrophies .trophy').hover(function() {
$(this).css({
'-webkit-transform': 'none',
'transform': 'none',
'-ms-transform': 'none'
});
});
} else {
$('.memberViewTrophies').html(htmlTrophy);
}
$('.DelayedTooltip').each(function(index, element) {
tippy(element, {
content: titles[index],
arrow: true,
onShow(instance) {
instance.popper.style.border = '10px solid transparent';
}
});
});
});
}
})();