import {getEventName} from "../util/compatibility";
import {execAfterRender} from "../util/fixBrowserBehavior";
import {getEditorRange, insertHTML, setSelectionFocus} from "../util/selection";
import {MenuItem} from "./MenuItem";
import {toggleSubMenu} from "./setToolbar";
export class Emoji extends MenuItem {
public element: HTMLElement;
constructor(vditor: IVditor, menuItem: IMenuItem) {
super(vditor, menuItem);
const panelElement = document.createElement("div");
panelElement.className = "vditor-panel vditor-panel--arrow";
let commonEmojiHTML = "";
Object.keys(vditor.options.hint.emoji).forEach((key) => {
const emojiValue = vditor.options.hint.emoji[key];
if (emojiValue.indexOf(".") > -1) {
commonEmojiHTML += ``;
} else {
commonEmojiHTML += ``;
}
});
const tailHTML = `
${vditor.options.hint.emojiTail || ""}
`;
panelElement.innerHTML = `${commonEmojiHTML}
${tailHTML}`;
this.element.appendChild(panelElement);
toggleSubMenu(vditor, panelElement, this.element.children[0], menuItem.level);
this._bindEvent(vditor, panelElement);
}
public _bindEvent(vditor: IVditor, panelElement: HTMLElement) {
panelElement.querySelectorAll(".vditor-emojis button").forEach((element: HTMLElement) => {
element.addEventListener(getEventName(), (event: Event) => {
event.preventDefault();
const value = element.getAttribute("data-value");
const range = getEditorRange(vditor);
let html = value;
if (vditor.currentMode === "wysiwyg") {
html = vditor.lute.SpinVditorDOM(value);
} else if (vditor.currentMode === "ir") {
html = vditor.lute.SpinVditorIRDOM(value);
}
if (value.indexOf(":") > -1 && vditor.currentMode !== "sv") {
const tempElement = document.createElement("div");
tempElement.innerHTML = html;
html = tempElement.firstElementChild.firstElementChild.outerHTML + " ";
insertHTML(html, vditor);
} else {
range.extractContents();
range.insertNode(document.createTextNode(value));
}
range.collapse(false);
setSelectionFocus(range);
panelElement.style.display = "none";
execAfterRender(vditor);
});
element.addEventListener("mouseover", (event: Event) => {
if ((event.target as HTMLElement).tagName === "BUTTON") {
panelElement.querySelector(".vditor-emojis__tip").innerHTML =
(event.target as HTMLElement).getAttribute("data-key");
}
});
});
}
}