From c371d311439a1bf12f1d1b885b435777efa078d4 Mon Sep 17 00:00:00 2001 From: supertiger Date: Mon, 11 Mar 2019 20:22:50 +0000 Subject: [PATCH] added emoji shortcode --- package-lock.json | 10 ++++++++++ package.json | 2 ++ src/components/app/RightPanel.vue | 8 ++++---- src/messageFormatter.js | 3 ++- src/shortcodeToEmoji.js | 27 +++++++++++++++++++++++++++ 5 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 src/shortcodeToEmoji.js diff --git a/package-lock.json b/package-lock.json index 06234c2..70861d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3620,6 +3620,16 @@ "minimalistic-crypto-utils": "^1.0.0" } }, + "emojibase-data": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/emojibase-data/-/emojibase-data-3.2.1.tgz", + "integrity": "sha512-6BbqwDbAGxbd+5YM82qlpb9Mr3SaS/rSffc6bREqUW9RWcqOclv0q9/P3MwOompIu+QSEDBAOBEbWgLQVhFxSw==" + }, + "emojibase-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/emojibase-regex/-/emojibase-regex-2.0.1.tgz", + "integrity": "sha512-prb7DjhYxlWOhqmLTbqd30ZA6P+o5onn3WZwe5V0LxwG6bar2o8TsXH4xTPpaQt5rTCyZFR1nPqUNRtOk8vvOg==" + }, "emojis-list": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", diff --git a/package.json b/package.json index 1b1123b..d588202 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,8 @@ }, "dependencies": { "axios": "^0.18.0", + "emojibase-data": "^3.2.1", + "emojibase-regex": "^2.0.1", "filesize": "^4.1.2", "futoji": "^0.2.4", "jquery": "^3.3.1", diff --git a/src/components/app/RightPanel.vue b/src/components/app/RightPanel.vue index 3e2e8f4..71b3c3b 100644 --- a/src/components/app/RightPanel.vue +++ b/src/components/app/RightPanel.vue @@ -80,6 +80,7 @@ import Message from "../../components/app/MessageTemplate.vue"; import Spinner from "@/components/Spinner.vue"; import TypingStatus from "@/components/app/TypingStatus.vue"; import uploadsQueue from "@/components/app/uploadsQueue.vue"; +import shortcodeToEmoji from "@/shortcodeToEmoji.js"; export default { components: { @@ -127,15 +128,16 @@ export default { this.postTimerID = null; this.messageLength = 0; - const msg = this.message; + const msg = shortcodeToEmoji(this.message);; const tempID = this.generateNum(25); + this.$store.dispatch("addMessage", { sender: true, channelID: this.selectedChannelID, message: { tempID, - message: this.message, + message: msg, channelID: this.selectedChannelID, created: new Date() } @@ -483,8 +485,6 @@ export default { transition: 0.3s; display: flex; flex-shrink: 0; - - } .send-button .material-icons { margin: auto; diff --git a/src/messageFormatter.js b/src/messageFormatter.js index 8f6ade9..0191593 100644 --- a/src/messageFormatter.js +++ b/src/messageFormatter.js @@ -3,9 +3,10 @@ import twemoji from 'twemoji' export default (message) => { + + message = twemoji.parse(escapeHtml(message), function (icon, options, variant) { - console.log(icon) return require("twemoji/2/svg/" + icon + ".svg") }) diff --git a/src/shortcodeToEmoji.js b/src/shortcodeToEmoji.js new file mode 100644 index 0000000..a1697fe --- /dev/null +++ b/src/shortcodeToEmoji.js @@ -0,0 +1,27 @@ +import emojis from "emojibase-data/en/compact.json"; +import { + groups +} from "emojibase-data/meta/groups.json"; + +export default message => { + const regex = /:([\w]+):/g; + + return message.replace(regex, (x) => { + const emoji = emojiExists(x.replace(/[::]+/g, '')) + + if (emoji) return emoji.unicode + return x + }); +}; + +function emojiExists(shortCode) { + for (let index = 0; index < emojis.length; index++) { + const element = emojis[index]; + for (let i = 0; i < element.shortcodes.length; i++) { + const el2 = element.shortcodes[i]; + if (el2 === shortCode) { + return element + } + } + } +} \ No newline at end of file