You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

emoji.js 969B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import emojis from '../../../assets/emoji.json';
  2. const {assetUrlPrefix, customEmojis} = window.config;
  3. const tempMap = {...customEmojis};
  4. for (const {emoji, aliases} of emojis) {
  5. for (const alias of aliases || []) {
  6. tempMap[alias] = emoji;
  7. }
  8. }
  9. export const emojiKeys = Object.keys(tempMap).sort((a, b) => {
  10. if (a === '+1' || a === '-1') return -1;
  11. if (b === '+1' || b === '-1') return 1;
  12. return a.localeCompare(b);
  13. });
  14. const emojiMap = {};
  15. for (const key of emojiKeys) {
  16. emojiMap[key] = tempMap[key];
  17. }
  18. // retrieve HTML for given emoji name
  19. export function emojiHTML(name) {
  20. let inner;
  21. if (Object.hasOwn(customEmojis, name)) {
  22. inner = `<img alt=":${name}:" src="${assetUrlPrefix}/img/emoji/${name}.png">`;
  23. } else {
  24. inner = emojiString(name);
  25. }
  26. return `<span class="emoji" title=":${name}:">${inner}</span>`;
  27. }
  28. // retrieve string for given emoji name
  29. export function emojiString(name) {
  30. return emojiMap[name] || `:${name}:`;
  31. }