// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved. // See License.txt for license information. const emoticonPatterns = { smile: /(^|\s)(:-?\))($|\s)/g, // :) open_mouth: /(^|\s)(:o)($|\s)/gi, // :o scream: /(^|\s)(:-o)($|\s)/gi, // :-o smirk: /(^|\s)(:-?])($|\s)/g, // :] grinning: /(^|\s)(:-?d)($|\s)/gi, // :D stuck_out_tongue_closed_eyes: /(^|\s)(x-d)($|\s)/gi, // x-d stuck_out_tongue: /(^|\s)(:-?p)($|\s)/gi, // :p rage: /(^|\s)(:-?[\[@])($|\s)/g, // :@ frowning: /(^|\s)(:-?\()($|\s)/g, // :( sob: /(^|\s)(:['’]-?\(|:'\(|:'\()($|\s)/g, // :`( kissing_heart: /(^|\s)(:-?\*)($|\s)/g, // :* pensive: /(^|\s)(:-?\/)($|\s)/g, // :/ confounded: /(^|\s)(:-?s)($|\s)/gi, // :s flushed: /(^|\s)(:-?\|)($|\s)/g, // :| relaxed: /(^|\s)(:-?\$)($|\s)/g, // :$ mask: /(^|\s)(:-x)($|\s)/gi, // :-x heart: /(^|\s)(<3|<3)($|\s)/g, // <3 broken_heart: /(^|\s)(<\/3|</3)($|\s)/g, // `, originalText: match }); return prefix + alias + suffix; } return match; } output = output.replace(/(^|\s):([a-zA-Z0-9_-]+):($|\s)/g, replaceEmoticonWithToken); $.each(emoticonPatterns, (name, pattern) => { // this might look a bit funny, but since the name isn't contained in the actual match // like with the named emoticons, we need to add it in manually output = output.replace(pattern, (match, prefix, emoticon, suffix) => replaceEmoticonWithToken(match, prefix, name, suffix)); }); return output; } function getImagePathForEmoticon(name) { return `/static/images/emoji/${name}.png`; }