balm-ui
Version:
A modular and customizable UI library based on Material Design and Vue 3
57 lines (45 loc) • 1.37 kB
JavaScript
export const emojiClassName = 'ql-emoji';
export function isValidEmoji(type, emoji) {
return emoji.name && (type === 'emoji' ? emoji.value : emoji.src);
}
export function getCode(emoji) {
return emoji.type === 'emoji' ? `:${emoji.name}:` : `[${emoji.name}]`;
}
function getEmoji(emoji, node) {
let emojiEl = node;
if (!node) {
emojiEl =
emoji.type === 'emoji'
? document.createElement('span')
: document.createElement('img');
}
if (emoji.type === 'emoji') {
emojiEl.innerHTML = emoji.value;
emojiEl.style.fontSize = '18px';
} else {
emojiEl.src = emoji.src;
emojiEl.setAttribute('alt', emoji.alt || '');
}
return emojiEl;
}
export function createEmoji(emoji, node = null) {
let emojiEl = getEmoji(emoji, node);
let emojiItemEl;
if (!node) {
emojiItemEl = document.createElement('span');
emojiItemEl.classList.add(emojiClassName, `ql-${emoji.type}-${emoji.name}`);
emojiItemEl.appendChild(emojiEl);
}
return node ? emojiEl : emojiItemEl;
}
export function replaceElementToString(el, str) {
if (el.outerHTML) {
el.outerHTML = str;
} else {
let tmpEl = document.createElement('div');
tmpEl.innerText = str;
let parentEl = el.parentNode;
parentEl.replaceChild(tmpEl, el);
parentEl.innerHTML = parentEl.innerHTML.replace(`<div>${str}</div>`, str);
}
}