-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathindex.js
35 lines (29 loc) · 1.39 KB
/
index.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
const source = (size) => require(`./resource/emoji.${size}.json`);
module.exports = {
mutateSource: ({ markdownNode }, pluginOptions = {}) => {
const active = !!pluginOptions.active;
if (!active) return Promise.resolve();
const classAttribute = pluginOptions && pluginOptions.class
? `class="${pluginOptions.class}"`
: null,
escapeCharacter = pluginOptions && pluginOptions.hasOwnProperty('escapeCharacter')
? pluginOptions.escapeCharacter
: '',
size = pluginOptions && pluginOptions.size ? pluginOptions.size : 64,
styleAttribute = Object.keys(pluginOptions && pluginOptions.styles || {})
.filter(key => '_PARENT' !== key)
.map((key) => `${key}: ${pluginOptions.styles[key]}`)
.join('; '),
emojis = source(size);
Object.keys(emojis).forEach((key) => {
const emoji = emojis[key],
pattern = new RegExp(`${escapeCharacter}${emoji.pattern}`, 'g'),
replacement = (classAttribute ? `<img ${classAttribute} ` : '<img ') + `alt="emoji-${key}" data-icon="emoji-${key}" style="${styleAttribute}" src="data:image/png;base64, ${emojis[key].data}" title="emoji-${key}" />`;
markdownNode.internal.content = markdownNode.internal.content.replace(
pattern,
replacement
);
});
return Promise.resolve();
}
}