diff --git a/src/ts/parser.ts b/src/ts/parser.ts
index bafb6226..790b4f69 100644
--- a/src/ts/parser.ts
+++ b/src/ts/parser.ts
@@ -58,23 +58,34 @@ DOMPurify.addHook("uponSanitizeAttribute", (node, data) => {
}
})
+async function parseAdditionalAssets(data:string, char:character, mode:'normal'|'back'){
+ if(char.additionalAssets){
+ for(const asset of char.additionalAssets){
+ const assetPath = await getFileSrc(asset[1])
+ data = data.replaceAll(`{{raw::${asset[0]}}}`, assetPath).
+ replaceAll(`{{img::${asset[0]}}}`,`
`)
+ .replaceAll(`{{video::${asset[0]}}}`,``)
+ .replaceAll(`{{audio::${asset[0]}}}`,``)
+ if(mode === 'back'){
+ data = data.replaceAll(`{{bg::${asset[0]}}}`, `
`)
+ }
+ }
+ }
+
+ return data
+}
+
export async function ParseMarkdown(data:string, char:(character | groupChat) = null, mode:'normal'|'back' = 'normal') {
+ let firstParsed = ''
+ if(char && char.type !== 'group'){
+ data = await parseAdditionalAssets(data, char, mode)
+ firstParsed = data
+ }
if(char){
data = processScript(char, data, 'editdisplay')
}
- if(char && char.type !== 'group'){
- if(char.additionalAssets){
- for(const asset of char.additionalAssets){
- const assetPath = await getFileSrc(asset[1])
- data = data.replaceAll(`{{raw::${asset[0]}}}`, assetPath).
- replaceAll(`{{img::${asset[0]}}}`,`
`)
- .replaceAll(`{{video::${asset[0]}}}`,``)
- .replaceAll(`{{audio::${asset[0]}}}`,``)
- if(mode === 'back'){
- data = data.replaceAll(`{{bg::${asset[0]}}}`, ``)
- }
- }
- }
+ if(firstParsed !== data && char && char.type !== 'group'){
+ data = await parseAdditionalAssets(data, char, mode)
}
return DOMPurify.sanitize(convertor.makeHtml(data), {
ADD_TAGS: ["iframe"],