69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
import {
|
|
emojiMap,
|
|
emojiUrl,
|
|
remoteUrl
|
|
} from '@/rongyun/emojMap.js';
|
|
|
|
export function parseText(message) {
|
|
const renderDom = [];
|
|
let temp = message?.payload?.text || '';
|
|
let left = -1;
|
|
let right = -1;
|
|
while (temp !== '') {
|
|
left = temp.indexOf('[');
|
|
right = temp.indexOf(']');
|
|
|
|
switch (left) {
|
|
case 0:
|
|
if (right === -1) {
|
|
renderDom.push({
|
|
name: 'span',
|
|
text: temp
|
|
});
|
|
temp = '';
|
|
} else {
|
|
const _emoji = temp.slice(0, right + 1);
|
|
|
|
if (emojiMap[_emoji]) {
|
|
renderDom.push({
|
|
name: 'img',
|
|
src: remoteUrl + emojiMap[_emoji]
|
|
});
|
|
temp = temp.substring(right + 1);
|
|
} else {
|
|
renderDom.push({
|
|
name: 'span',
|
|
text: '['
|
|
});
|
|
temp = temp.slice(1);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case -1:
|
|
renderDom.push({
|
|
name: 'span',
|
|
text: temp
|
|
});
|
|
temp = '';
|
|
break;
|
|
|
|
default:
|
|
renderDom.push({
|
|
name: 'span',
|
|
text: temp.slice(0, left)
|
|
});
|
|
temp = temp.substring(left);
|
|
break;
|
|
}
|
|
}
|
|
let str = '';
|
|
if (renderDom.length > 0) {
|
|
renderDom.forEach((item) => {
|
|
if (item.name == 'span') str += item.text;
|
|
else if (item.name == 'img') str += `<image src="${item.src}" style='width:20px;height:20px'></image>`
|
|
})
|
|
}
|
|
return str;
|
|
} |