Use @github's emoji data

This commit is contained in:
Pavel Djundik 2019-06-10 22:14:11 +03:00
parent 9949fa9963
commit b95c8236bd
5 changed files with 3390 additions and 4557 deletions

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,7 @@ const merge = require("./ircmessageparser/merge");
const colorClass = require("./colorClass"); const colorClass = require("./colorClass");
const emojiMap = require("../fullnamemap.json"); const emojiMap = require("../fullnamemap.json");
const LinkPreviewToggle = require("../../../components/LinkPreviewToggle.vue").default; const LinkPreviewToggle = require("../../../components/LinkPreviewToggle.vue").default;
const emojiModifiersRegex = /[\u{1f3fb}-\u{1f3ff}]/ug;
// Create an HTML `span` with styling information for a given fragment // Create an HTML `span` with styling information for a given fragment
function createFragment(fragment, createElement) { function createFragment(fragment, createElement) {
@ -124,7 +125,8 @@ module.exports = function parse(createElement, text, message = undefined, networ
}, },
}, fragments); }, fragments);
} else if (textPart.emoji) { } else if (textPart.emoji) {
const title = emojiMap[textPart.emoji] ? `Emoji: ${emojiMap[textPart.emoji]}` : null; const emojiWithoutModifiers = textPart.emoji.replace(emojiModifiersRegex, "");
const title = emojiMap[emojiWithoutModifiers] ? `Emoji: ${emojiMap[emojiWithoutModifiers]}` : null;
return createElement("span", { return createElement("span", {
class: [ class: [

File diff suppressed because it is too large Load Diff

View File

@ -3,36 +3,18 @@
const got = require("got"); const got = require("got");
const path = require("path"); const path = require("path");
const fs = require("fs"); const fs = require("fs");
const fuzzy = require("fuzzy");
(async () => { (async () => {
const response = await got("https://raw.githubusercontent.com/emojione/emojione/master/extras/alpha-codes/eac.json"); const response = await got("https://raw.githubusercontent.com/github/gemoji/master/db/emoji.json");
const emojiStrategy = JSON.parse(response.body); const emojiStrategy = JSON.parse(response.body);
const emojiMap = {}; const emojiMap = {};
const fullNameEmojiMap = {}; const fullNameEmojiMap = {};
for (const key in emojiStrategy) { for (const emoji of emojiStrategy) {
if (emojiStrategy.hasOwnProperty(key)) { fullNameEmojiMap[emoji.emoji] = emoji.description;
const shortname = prepareShortName(emojiStrategy[key].alpha_code);
const unicode = stringToUnicode(emojiStrategy[key].output);
fullNameEmojiMap[unicode] = emojiStrategy[key].name;
// Skip tones, at least for now for (const alias of emoji.aliases) {
if (shortname.includes("tone")) { emojiMap[alias] = emoji.emoji;
continue;
}
emojiMap[shortname] = unicode;
for (let alternative of emojiStrategy[key].aliases.split("|")) {
alternative = prepareShortName(alternative);
if (fuzzy.test(shortname, alternative) || fuzzy.test(alternative, shortname)) {
continue;
}
emojiMap[alternative] = unicode;
}
} }
} }
@ -57,24 +39,3 @@ const fuzzy = require("fuzzy");
"fullnamemap.json" "fullnamemap.json"
)), fullNameEmojiMapOutput); )), fullNameEmojiMapOutput);
})(); })();
function stringToUnicode(key) {
return key
.split("-")
.map((c) => String.fromCodePoint(`0x${c}`))
.join("");
}
function prepareShortName(shortname) {
if (shortname === ":-1:") {
// We replace dashes, but should keep :-1: working
return "-1";
} else if (shortname === ":e-mail:") {
// :email: exists as an alternative, should figure out how to use it instead
return "email";
}
return shortname
.slice(1, -1)
.replace("-", "_");
}

View File

@ -380,7 +380,15 @@ describe("parse Handlebars helper", () => {
}, { }, {
name: "complicated zero-join-width emoji", name: "complicated zero-join-width emoji",
input: "🤦🏿‍♀️", input: "🤦🏿‍♀️",
expected: '<span role="img" aria-label="Emoji: woman facepalming: dark skin tone" title="Emoji: woman facepalming: dark skin tone" class="emoji">🤦🏿‍♀️</span>', expected: '<span role="img" aria-label="Emoji: woman facepalming" title="Emoji: woman facepalming" class="emoji">🤦🏿‍♀️</span>',
}, {
name: "unicode 12 emojis",
input: "🧘🏿👨‍👨‍👧‍👧",
expected: '<span role="img" aria-label="Emoji: person in lotus position" title="Emoji: person in lotus position" class="emoji">🧘🏿</span><span role="img" aria-label="Emoji: family: man, man, girl, girl" title="Emoji: family: man, man, girl, girl" class="emoji">👨‍👨‍👧‍👧</span>',
}, {
name: "unicode 12 emojis with multiple modifiers",
input: "👩🏾‍🤝‍👨🏽",
expected: '<span role="img" class="emoji">👩🏾‍🤝‍👨🏽</span>',
}, { }, {
name: "with modifiers", name: "with modifiers",
input: "🤷‍♀️", input: "🤷‍♀️",