/**
* 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;
}