/** * bleh, an extension for the music site Last.fm * Copyright (c) 2024-2026 katelyn and contributors * SPDX-License-Identifier: GPL-3.0-or-later */ import { html, render } from 'lighterhtml'; import { page } from '@/build/page'; import { markdown } from '@/components/markdown/markdown'; import { patch_avatar, style_name_from_badge, } from '@/components/shared/avatar'; import { correct_artist } from '@/components/music/lotus'; import { log } from '@/build/log.ts'; import { keys } from '../settings/storage'; import { is_sponsor } from '../sponsor'; export function bleh_users() { const users = page.structure.main?.querySelectorAll( '.user-list-item:not(.user-list-item-mobile-ad)', ); const cache = JSON.parse(localStorage.getItem(keys.profile_cache) || '{}'); users.forEach((user, index) => { patch_user_list_item(user, index, cache); }); } export function patch_user_list_item(user, index, cache = {}) { user.style.setProperty('--delay', index * 0.04 + 's'); const avatar = user.querySelector('.user-list-avatar'); const name = user.querySelector('.user-list-link'); const badge = patch_avatar(avatar, name?.textContent.trim(), 'follow'); if (name) style_name_from_badge(name, badge); const artists = user.querySelectorAll('.user-list-shared-artists a'); artists.forEach((artist) => { artist.textContent = correct_artist(artist.textContent); }); const md = user.querySelector( '.user-list-about-me:not(.has-featured-track)', ); log('patching', 'user', 'info', { user, name: name?.textContent, md }); if (name) { name.textContent = name.textContent.trim(); const name_text = name.textContent; const valid = is_sponsor(name_text); if (cache[name_text]?.username && valid) { name.classList.add('username-combo', 'username-combo-vertical'); render( name, html` ${cache[name_text] .username} @${name_text} `, ); } else { name.insertBefore( html.node`@`, name.firstChild, ); } } if (md) { // this removes fancy markdown components md.textContent = md.textContent.replace(/(? `); } img.src = img.src.replace('/avatar70s/', '/avatar170s/'); return user; }