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.
68 lines
1.8 KiB
68 lines
1.8 KiB
/* |
|
* https://github.com/morethanwords/tweb |
|
* Copyright (C) 2019-2021 Eduard Kuzmenko |
|
* https://github.com/morethanwords/tweb/blob/master/LICENSE |
|
*/ |
|
|
|
import type ChatInput from "./input"; |
|
import { appendEmoji, getEmojiFromElement } from "../emoticonsDropdown/tabs/emoji"; |
|
import { ScrollableX } from "../scrollable"; |
|
import AutocompleteHelper from "./autocompleteHelper"; |
|
import AutocompleteHelperController from "./autocompleteHelperController"; |
|
|
|
export default class EmojiHelper extends AutocompleteHelper { |
|
private scrollable: ScrollableX; |
|
|
|
constructor(appendTo: HTMLElement, controller: AutocompleteHelperController, private chatInput: ChatInput) { |
|
super({ |
|
appendTo, |
|
controller, |
|
listType: 'x', |
|
onSelect: (target) => { |
|
this.chatInput.onEmojiSelected(getEmojiFromElement(target as any), true); |
|
} |
|
}); |
|
|
|
this.container.classList.add('emoji-helper'); |
|
} |
|
|
|
protected init() { |
|
this.list = document.createElement('div'); |
|
this.list.classList.add('emoji-helper-emojis', 'super-emojis'); |
|
|
|
this.container.append(this.list); |
|
|
|
this.scrollable = new ScrollableX(this.container); |
|
|
|
this.addEventListener('visible', () => { |
|
setTimeout(() => { // it is not rendered yet |
|
this.scrollable.container.scrollLeft = 0; |
|
}, 0); |
|
}); |
|
} |
|
|
|
public render(emojis: string[], waitForKey: boolean) { |
|
if(this.init) { |
|
if(!emojis.length) { |
|
return; |
|
} |
|
|
|
this.init(); |
|
this.init = null; |
|
} |
|
|
|
if(emojis.length) { |
|
this.list.innerHTML = ''; |
|
emojis.forEach(emoji => { |
|
appendEmoji(emoji, this.list, false, true); |
|
}); |
|
} |
|
|
|
this.waitForKey = waitForKey ? 'ArrowUp' : undefined; |
|
this.toggle(!emojis.length); |
|
|
|
/* window.requestAnimationFrame(() => { |
|
this.container.style.width = (3 * 2) + (emojis.length * 44) + 'px'; |
|
}); */ |
|
} |
|
}
|
|
|