tweb-i2p/src/components/chat/replyContainer.ts

118 lines
3.6 KiB
TypeScript
Raw Normal View History

import { limitSymbols } from "../../helpers/string";
2020-10-21 22:17:49 +03:00
import appImManager, { CHAT_ANIMATION_GROUP } from "../../lib/appManagers/appImManager";
import appPhotosManager from "../../lib/appManagers/appPhotosManager";
import { RichTextProcessor } from "../../lib/richtextprocessor";
import DivAndCaption from "../divAndCaption";
import { renderImageFromUrl } from "../misc";
2020-10-21 22:17:49 +03:00
import { wrapSticker } from "../wrappers";
export function wrapReplyDivAndCaption(options: {
title: string,
titleEl: HTMLElement,
subtitle: string,
subtitleEl: HTMLElement,
message: any,
mediaEl: HTMLElement
}) {
let {title, titleEl, subtitle, subtitleEl, mediaEl, message} = options;
if(title !== undefined) {
limitSymbols(title, 140);
title = title ? RichTextProcessor.wrapEmojiText(title) : '';
titleEl.innerHTML = title;
}
subtitle = limitSymbols(subtitle, 140);
const media = message && message.media;
let setMedia = false;
if(media && mediaEl) {
subtitle = message.rReply;
//console.log('wrap reply', media);
if(media.photo || (media.document && ['video', 'sticker', 'gif'].indexOf(media.document.type) !== -1)) {
/* const middlewareOriginal = appImManager.chat.bubbles.getMiddleware();
const middleware = () => {
}; */
const boxSize = 32;
2021-02-04 02:30:23 +02:00
if(media.document?.type === 'sticker') {
if(mediaEl.style.backgroundImage) {
mediaEl.style.backgroundImage = '';
}
setMedia = true;
wrapSticker({
doc: media.document,
div: mediaEl,
lazyLoadQueue: appImManager.chat.bubbles.lazyLoadQueue,
group: CHAT_ANIMATION_GROUP,
2021-02-04 02:30:23 +02:00
//onlyThumb: media.document.sticker === 2,
width: boxSize,
height: boxSize
});
} else {
if(mediaEl.firstElementChild) {
mediaEl.innerHTML = '';
}
const photo = media.photo || media.document;
const cacheContext = appPhotosManager.getCacheContext(photo);
2020-10-21 22:17:49 +03:00
if(!cacheContext.downloaded) {
const sizes = photo.sizes || photo.thumbs;
if(sizes && sizes[0].bytes) {
setMedia = true;
renderImageFromUrl(mediaEl, appPhotosManager.getPreviewURLFromThumb(sizes[0]));
}
}
2020-10-13 17:10:27 +03:00
const size = appPhotosManager.choosePhotoSize(photo, boxSize, boxSize/* mediaSizes.active.regular.width, mediaSizes.active.regular.height */);
2021-02-04 02:30:23 +02:00
if(size._ !== 'photoSizeEmpty') {
setMedia = true;
appPhotosManager.preloadPhoto(photo, size)
.then(() => {
2021-02-04 02:30:23 +02:00
renderImageFromUrl(mediaEl, photo._ === 'photo' ? photo.url : appPhotosManager.getDocumentCachedThumb(photo.id).url);
});
}
}
}
} else {
subtitle = subtitle ? RichTextProcessor.wrapEmojiText(subtitle) : '';
}
subtitleEl.innerHTML = subtitle;
return setMedia;
}
export default class ReplyContainer extends DivAndCaption<(title: string, subtitle: string, message?: any) => void> {
private mediaEl: HTMLElement;
constructor(protected className: string) {
super(className, (title: string, subtitle: string = '', message?: any) => {
if(!this.mediaEl) {
this.mediaEl = document.createElement('div');
this.mediaEl.classList.add(this.className + '-media');
}
const isMediaSet = wrapReplyDivAndCaption({
title,
titleEl: this.title,
subtitle,
subtitleEl: this.subtitle,
mediaEl: this.mediaEl,
message
});
this.container.classList.toggle('is-media', isMediaSet);
if(isMediaSet) {
this.content.prepend(this.mediaEl);
} else {
this.mediaEl.remove();
}
});
}
}