@ -6,13 +6,18 @@ const trie = new Trie(Object.keys(unicodeMapping));
const assetHost = process . env . CDN _HOST || '' ;
// Convert to file names from emojis. (For different variation selector emojis)
const emojiFilenames = ( emojis ) => {
return emojis . map ( v => unicodeMapping [ v ] . filename ) ;
} ;
// Emoji requiring extra borders depending on theme
const darkEmoji = '🎱🐜⚫🖤⬛◼️ ◾◼️ ✒️ ▪️ 💣🎳📷📸♣️ 🕶️ ✴️ 🔌💂 ♀️ 📽️ 🍳🦍💂🔪🕳️ 🕹️ 🕋🖊️ 🖋️ 💂 ♂️ 🎤🎓🎥🎼♠️ 🎩🦃📼📹🎮🐃🏴' ;
const lightEmoji = '👽⚾🐔☁️ 💨🕊️ 👀🍥👻🐐❕❔⛸️ 🌩️ 🔊🔇📃🌧️ 🐏🍚🍙🐓🐑💀☠️ 🌨️ 🔉🔈💬💭🏐🏳️ ⚪⬜◽◻️ ▫️ ' ;
const darkEmoji = emojiFilenames ( [ '🎱' , ' 🐜' , ' ⚫' , ' 🖤' , ' ⬛' , ' ◼️ ' , ' ◾' , ' ◼️ ' , ' ✒️ ' , ' ▪️ ' , ' 💣' , ' 🎳' , ' 📷' , ' 📸' , ' ♣️ ' , ' 🕶️ ' , ' ✴️ ' , ' 🔌' , ' 💂 ♀️ ' , ' 📽️ ' , ' 🍳' , ' 🦍' , ' 💂' , ' 🔪' , ' 🕳️ ' , ' 🕹️ ' , ' 🕋' , ' 🖊️ ' , ' 🖋️ ' , ' 💂 ♂️ ' , ' 🎤' , ' 🎓' , ' 🎥' , ' 🎼' , ' ♠️ ' , ' 🎩' , ' 🦃' , ' 📼' , ' 📹' , ' 🎮' , ' 🐃' , ' 🏴'] ) ;
const lightEmoji = emojiFilenames ( [ '👽' , ' ⚾' , ' 🐔' , ' ☁️ ' , ' 💨' , ' 🕊️ ' , ' 👀' , ' 🍥' , ' 👻' , ' 🐐' , ' ❕' , ' ❔' , ' ⛸️ ' , ' 🌩️ ' , ' 🔊' , ' 🔇' , ' 📃' , ' 🌧️ ' , ' 🐏' , ' 🍚' , ' 🍙' , ' 🐓' , ' 🐑' , ' 💀' , ' ☠️ ' , ' 🌨️ ' , ' 🔉' , ' 🔈' , ' 💬' , ' 💭' , ' 🏐' , ' 🏳️ ' , ' ⚪' , ' ⬜' , ' ◽' , ' ◻️ ' , ' ▫️ '] ) ;
const emojiFilename = ( filename , match ) => {
const emojiFilename = ( filename ) => {
const borderedEmoji = ( document . body && document . body . classList . contains ( 'theme-mastodon-light' ) ) ? lightEmoji : darkEmoji ;
return borderedEmoji . includes ( match ) ? ( filename + '_border' ) : filename ;
return borderedEmoji . includes ( filename ) ? ( filename + '_border' ) : filename ;
} ;
const emojify = ( str , customEmojis = { } ) => {
@ -69,7 +74,7 @@ const emojify = (str, customEmojis = {}) => {
} else { // matched to unicode emoji
const { filename , shortCode } = unicodeMapping [ match ] ;
const title = shortCode ? ` : ${ shortCode } : ` : '' ;
replacement = ` <img draggable="false" class="emojione" alt=" ${ match } " title=" ${ title } " src=" ${ assetHost } /emoji/ ${ emojiFilename ( filename , match ) } .svg" /> ` ;
replacement = ` <img draggable="false" class="emojione" alt=" ${ match } " title=" ${ title } " src=" ${ assetHost } /emoji/ ${ emojiFilename ( filename ) } .svg" /> ` ;
rend = i + match . length ;
// If the matched character was followed by VS15 (for selecting text presentation), skip it.
if ( str . codePointAt ( rend ) === 65038 ) {