All checks were successful
		
		
	
	Build Tilde Friends / Build-All (push) Successful in 18m1s
				
			
		
			
				
	
	
		
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import {LitElement, html} from './lit-all.min.js';
 | 
						|
import * as tfrpc from '/static/tfrpc.js';
 | 
						|
import {styles, generate_theme} from './tf-styles.js';
 | 
						|
 | 
						|
class TfUserElement extends LitElement {
 | 
						|
	static get properties() {
 | 
						|
		return {
 | 
						|
			id: {type: String},
 | 
						|
			fallback_name: {type: String},
 | 
						|
			icon_only: {type: Boolean},
 | 
						|
			users: {type: Object},
 | 
						|
			nolink: {type: Boolean},
 | 
						|
		};
 | 
						|
	}
 | 
						|
 | 
						|
	static styles = styles;
 | 
						|
 | 
						|
	constructor() {
 | 
						|
		super();
 | 
						|
		this.id = null;
 | 
						|
		this.fallback_name = null;
 | 
						|
		this.icon_only = false;
 | 
						|
		this.users = {};
 | 
						|
	}
 | 
						|
 | 
						|
	render() {
 | 
						|
		let user = this.users[this.id];
 | 
						|
		let shape =
 | 
						|
			user?.follow_depth === undefined || user.follow_depth >= 2
 | 
						|
				? 'w3-circle'
 | 
						|
				: 'w3-round';
 | 
						|
		let image = html`<span
 | 
						|
			class=${'w3-theme-l4 ' + shape}
 | 
						|
			style="display: inline-block; width: 2em; height: 2em; text-align: center; line-height: 2em"
 | 
						|
			>😎</span
 | 
						|
		>`;
 | 
						|
		let name = this.users?.[this.id]?.name;
 | 
						|
		let name_string = name ?? this.fallback_name ?? this.id;
 | 
						|
		name = this.icon_only
 | 
						|
			? undefined
 | 
						|
			: !this.nolink
 | 
						|
				? html`<a target="_top" href=${'#' + this.id}>${name_string}</a>`
 | 
						|
				: html`<span>${name_string}</span>`;
 | 
						|
 | 
						|
		if (user) {
 | 
						|
			let image_link = user.image;
 | 
						|
			if (typeof image_link == 'string' && !image_link.startsWith('&')) {
 | 
						|
				try {
 | 
						|
					image_link = JSON.parse(image_link)?.link;
 | 
						|
				} catch {}
 | 
						|
			}
 | 
						|
			if (image_link !== undefined) {
 | 
						|
				image = html`<img
 | 
						|
					class=${'w3-theme-l4 ' + shape}
 | 
						|
					style="width: 2em; height: 2em; vertical-align: middle; object-fit: cover"
 | 
						|
					src="/${image_link}/view"
 | 
						|
					title=${name_string + ' (' + this.id + ')'}
 | 
						|
				/>`;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return html` <style>
 | 
						|
				${generate_theme()}
 | 
						|
			</style>
 | 
						|
			<div
 | 
						|
				style=${'display: inline-block; vertical-align: middle; text-wrap: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis' +
 | 
						|
				(this.nolink ? '' : '; font-weight: bold')}
 | 
						|
			>
 | 
						|
				${image} ${name}
 | 
						|
			</div>`;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
customElements.define('tf-user', TfUserElement);
 |