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.
90 lines
2.7 KiB
90 lines
2.7 KiB
4 years ago
|
import { findUpClassName } from "../../helpers/dom";
|
||
|
import { MyDocument } from "../../lib/appManagers/appDocsManager";
|
||
|
import appImManager, { CHAT_ANIMATION_GROUP } from "../../lib/appManagers/appImManager";
|
||
|
import appStickersManager from "../../lib/appManagers/appStickersManager";
|
||
|
import { EmoticonsDropdown } from "../emoticonsDropdown";
|
||
|
import { SuperStickerRenderer } from "../emoticonsDropdown/tabs/stickers";
|
||
|
import LazyLoadQueue from "../lazyLoadQueue";
|
||
|
import Scrollable from "../scrollable";
|
||
|
import SetTransition from "../singleTransition";
|
||
|
|
||
|
export default class StickersHelper {
|
||
|
private container: HTMLElement;
|
||
|
private stickersContainer: HTMLElement;
|
||
|
private scrollable: Scrollable;
|
||
|
private superStickerRenderer: SuperStickerRenderer;
|
||
|
private lazyLoadQueue: LazyLoadQueue;
|
||
|
private lastEmoticon = '';
|
||
|
|
||
|
constructor(private appendTo: HTMLElement) {
|
||
|
|
||
|
}
|
||
|
|
||
|
public checkEmoticon(emoticon: string) {
|
||
|
if(this.lastEmoticon == emoticon) return;
|
||
|
|
||
|
if(this.lastEmoticon && !emoticon) {
|
||
|
if(this.container) {
|
||
|
SetTransition(this.container, 'is-visible', false, 200/* , () => {
|
||
|
this.stickersContainer.innerHTML = '';
|
||
|
} */);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
this.lastEmoticon = emoticon;
|
||
|
if(this.lazyLoadQueue) {
|
||
|
this.lazyLoadQueue.clear();
|
||
|
}
|
||
|
|
||
|
if(!emoticon) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
appStickersManager.getStickersByEmoticon(emoticon)
|
||
|
.then(stickers => {
|
||
|
if(this.lastEmoticon != emoticon) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if(this.init) {
|
||
|
this.init();
|
||
|
this.init = null;
|
||
|
}
|
||
|
|
||
|
this.stickersContainer.innerHTML = '';
|
||
|
this.lazyLoadQueue.clear();
|
||
|
if(stickers.length) {
|
||
|
stickers.forEach(sticker => {
|
||
|
this.stickersContainer.append(this.superStickerRenderer.renderSticker(sticker as MyDocument));
|
||
|
});
|
||
|
}
|
||
|
|
||
|
SetTransition(this.container, 'is-visible', true, 200);
|
||
|
this.scrollable.scrollTop = 0;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
private init() {
|
||
|
this.container = document.createElement('div');
|
||
|
this.container.classList.add('stickers-helper', 'z-depth-1');
|
||
|
|
||
|
this.stickersContainer = document.createElement('div');
|
||
|
this.stickersContainer.classList.add('stickers-helper-stickers', 'super-stickers');
|
||
|
this.stickersContainer.addEventListener('click', (e) => {
|
||
|
if(!findUpClassName(e.target, 'super-sticker')) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
appImManager.chat.input.clearInput();
|
||
|
EmoticonsDropdown.onMediaClick(e);
|
||
|
});
|
||
|
|
||
|
this.container.append(this.stickersContainer);
|
||
|
|
||
|
this.scrollable = new Scrollable(this.container);
|
||
|
this.lazyLoadQueue = new LazyLoadQueue();
|
||
|
this.superStickerRenderer = new SuperStickerRenderer(this.lazyLoadQueue, CHAT_ANIMATION_GROUP);
|
||
|
|
||
|
this.appendTo.append(this.container);
|
||
|
}
|
||
|
}
|