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"],