Fork of the emoji-button package to remove FontAwesome.
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.
 
 
 

58 lines
1.8 KiB

import { TinyEmitter as Emitter } from 'tiny-emitter';
import { EMOJI, HIDE_PREVIEW, SHOW_PREVIEW } from './events';
import { save } from './recent';
import { createElement } from './util';
import { EmojiButtonOptions, EmojiRecord, EmojiVariation } from './types';
const CLASS_EMOJI = 'emoji-picker__emoji';
export class Emoji {
private emojiButton: HTMLElement;
constructor(private emoji: EmojiRecord | EmojiVariation, private showVariants: boolean, private showPreview: boolean, private events: Emitter, private options: EmojiButtonOptions) {
}
render(): HTMLElement {
this.emojiButton = createElement('button', CLASS_EMOJI);
this.emojiButton.innerHTML = this.emoji.e;
this.emojiButton.tabIndex = -1;
this.emojiButton.addEventListener('focus', () => this.onEmojiHover());
this.emojiButton.addEventListener('blur', () => this.onEmojiLeave());
this.emojiButton.addEventListener('click', () => this.onEmojiClick());
this.emojiButton.addEventListener('mouseover', () => this.onEmojiHover());
this.emojiButton.addEventListener('mouseout', () => this.onEmojiLeave());
return this.emojiButton;
}
onEmojiClick(): void {
// TODO move this side effect out of Emoji, make the recent module listen for event
if (
(!(this.emoji as EmojiRecord).v || !this.showVariants || !this.options.showVariants) &&
this.options.showRecents
) {
save(this.emoji, this.options);
}
this.events.emit(EMOJI, {
emoji: this.emoji,
showVariants: this.showVariants,
button: this.emojiButton
});
}
onEmojiHover(): void {
if (this.showPreview) {
this.events.emit(SHOW_PREVIEW, this.emoji);
}
}
onEmojiLeave(): void {
if (this.showPreview) {
this.events.emit(HIDE_PREVIEW);
}
}
}