about summary refs log tree commit diff
path: root/app/assets/javascripts/components/emoji.jsx
diff options
context:
space:
mode:
authorshel <Yiskah.Raphen@gmail.com>2017-03-31 10:34:14 -0400
committerGitHub <noreply@github.com>2017-03-31 10:34:14 -0400
commitf20f6b25b98efffca47caae713f8dc5e1d0d4bd1 (patch)
tree104152d4bd6f9889f38b2f46fee108185c3b29f7 /app/assets/javascripts/components/emoji.jsx
parent76188d61f2c3bb5747208df92835e912db18d7b6 (diff)
parent680f9efe9c4aa7fce1f4dd6a35ef4aca7a80c1f3 (diff)
Merge branch 'master' into patch-2
Diffstat (limited to 'app/assets/javascripts/components/emoji.jsx')
-rw-r--r--app/assets/javascripts/components/emoji.jsx34
1 files changed, 30 insertions, 4 deletions
diff --git a/app/assets/javascripts/components/emoji.jsx b/app/assets/javascripts/components/emoji.jsx
index c93c07c74..eee657b86 100644
--- a/app/assets/javascripts/components/emoji.jsx
+++ b/app/assets/javascripts/components/emoji.jsx
@@ -1,9 +1,35 @@
 import emojione from 'emojione';
 
-emojione.imageType    = 'png';
-emojione.sprites      = false;
-emojione.imagePathPNG = '/emoji/';
+const toImage = str => shortnameToImage(unicodeToImage(str));
+
+const unicodeToImage = str => {
+  const mappedUnicode = emojione.mapUnicodeToShort();
+
+  return str.replace(emojione.regUnicode, unicodeChar => {
+    if (typeof unicodeChar === 'undefined' || unicodeChar === '' || !(unicodeChar in emojione.jsEscapeMap)) {
+      return unicodeChar;
+    }
+
+    const unicode  = emojione.jsEscapeMap[unicodeChar];
+    const short    = mappedUnicode[unicode];
+    const filename = emojione.emojioneList[short].fname;
+    const alt      = emojione.convert(unicode.toUpperCase());
+
+    return `<img draggable="false" class="emojione" alt="${alt}" src="/emoji/${filename}.svg" />`;
+  });
+};
+
+const shortnameToImage = str => str.replace(emojione.regShortNames, shortname => {
+  if (typeof shortname === 'undefined' || shortname === '' || !(shortname in emojione.emojioneList)) {
+    return shortname;
+  }
+
+  const unicode = emojione.emojioneList[shortname].unicode[emojione.emojioneList[shortname].unicode.length - 1];
+  const alt     = emojione.convert(unicode.toUpperCase());
+
+  return `<img draggable="false" class="emojione" alt="${alt}" src="/emoji/${unicode}.svg" />`;
+});
 
 export default function emojify(text) {
-  return emojione.toImage(text);
+  return toImage(text);
 };