decodeText.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { emojiMap, emojiUrl } from './emojiMap';
  2. export function decodeText(payload:any) {
  3. const renderDom = [];
  4. // 文本消息
  5. let temp = payload.text;
  6. let left = -1;
  7. let right = -1;
  8. while (temp !== '') {
  9. left = temp.indexOf('[');
  10. right = temp.indexOf(']');
  11. switch (left) {
  12. case 0:
  13. if (right === -1) {
  14. renderDom.push({
  15. name: 'text',
  16. text: temp,
  17. });
  18. temp = '';
  19. } else {
  20. const emojiKey = temp.slice(0, right + 1);
  21. if (emojiMap[emojiKey]) {
  22. renderDom.push({
  23. name: 'img',
  24. src: emojiUrl + emojiMap[emojiKey],
  25. });
  26. temp = temp.substring(right + 1);
  27. } else {
  28. renderDom.push({
  29. name: 'text',
  30. text: '[',
  31. });
  32. temp = temp.slice(1);
  33. }
  34. }
  35. break;
  36. case -1:
  37. renderDom.push({
  38. name: 'text',
  39. text: temp,
  40. });
  41. temp = '';
  42. break;
  43. default:
  44. renderDom.push({
  45. name: 'text',
  46. text: temp.slice(0, left),
  47. });
  48. temp = temp.substring(left);
  49. break;
  50. }
  51. }
  52. return renderDom;
  53. };