Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

77 lines
2.4 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
import AvatarElement from './avatar';
import type LazyLoadQueue from './lazyLoadQueue';
const CLASS_NAME = 'stacked-avatars';
const AVATAR_CLASS_NAME = CLASS_NAME + '-avatar';
const AVATAR_CONTAINER_CLASS_NAME = AVATAR_CLASS_NAME + '-container';
export default class StackedAvatars {
public container: HTMLElement;
private lazyLoadQueue: LazyLoadQueue;
private avatarSize: number;
constructor(options: {
lazyLoadQueue?: StackedAvatars['lazyLoadQueue'],
avatarSize: StackedAvatars['avatarSize']
}) {
this.lazyLoadQueue = options.lazyLoadQueue;
this.avatarSize = options.avatarSize;
this.container = document.createElement('div');
this.container.classList.add(CLASS_NAME);
this.container.style.setProperty('--avatar-size', options.avatarSize + 'px');
}
/**
* MACOS, ANDROID - без реверса
* WINDOWS DESKTOP - реверс
* все приложения накладывают аватарку первую на вторую, а в макете зато вторая на первую, ЛОЛ!
*/
public render(peerIds: PeerId[], loadPromises?: Promise<any>[]) {
const children = this.container.children;
peerIds = peerIds.slice().reverse();
if(peerIds.length > 3) {
peerIds = peerIds.slice(-3);
}
peerIds.forEach((peerId, idx) => {
let avatarContainer = children[idx] as HTMLElement;
if(!avatarContainer) {
avatarContainer = document.createElement('div');
avatarContainer.classList.add(AVATAR_CONTAINER_CLASS_NAME);
}
let avatarElem = avatarContainer.firstElementChild as AvatarElement;
if(!avatarElem) {
avatarElem = new AvatarElement();
avatarElem.classList.add('avatar-' + this.avatarSize, AVATAR_CLASS_NAME);
avatarElem.updateOptions({
isDialog: false,
loadPromises
});
}
avatarElem.updateWithOptions({
lazyLoadQueue: this.lazyLoadQueue,
peerId: peerId
});
if(!avatarElem.parentNode) {
avatarContainer.append(avatarElem);
}
if(!avatarContainer.parentNode) {
this.container.append(avatarContainer);
}
});
// if were 3 and became 2
(Array.from(children) as HTMLElement[]).slice(peerIds.length).forEach((el) => el.remove());
}
}