35 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import emojione from 'emojione';
 | 
						|
 | 
						|
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}" title="${short}" 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}" title="${shortname}" src="/emoji/${unicode}.svg" />`;
 | 
						|
});
 | 
						|
 | 
						|
export default function emojify(text) {
 | 
						|
  return toImage(text);
 | 
						|
};
 |