-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
format-emoji-blot.js
49 lines (38 loc) · 1.18 KB
/
format-emoji-blot.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import emojiMap from "./emoji-map";
import Quill from 'quill';
const Embed = Quill.import('blots/embed');
// this whole class may be uncessary
class EmojiBlot extends Embed {
static blotName = 'emoji';
static className = 'ql-emojiblot';
static tagName = 'span';
static emojiClass = 'ap';
static emojiPrefix = 'ap-';
static create(value) {
let node = super.create();
if (typeof value === 'object') {
EmojiBlot.buildSpan(value, node);
} else if (typeof value === "string") {
const valueObj = emojiMap[value];
if (valueObj) {
EmojiBlot.buildSpan(valueObj, node);
}
}
return node;
}
static value(node) {
return node.dataset.name;
}
static buildSpan(value, node) {
node.setAttribute('data-name', value.name);
let emojiSpan = document.createElement('span');
emojiSpan.classList.add(this.emojiClass);
emojiSpan.classList.add(this.emojiPrefix + value.name);
emojiSpan.innerText = String.fromCodePoint(...EmojiBlot.parseUnicode(value.unicode));
node.appendChild(emojiSpan);
}
static parseUnicode(string) {
return string.split('-').map(str => parseInt(str, 16));
}
}
export default EmojiBlot;