From 210bad35bfb6525c4705f02252d3f0035839878c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jasikowski?= Date: Wed, 25 Sep 2024 14:36:59 +0200 Subject: [PATCH] Md to HTML for images with cached attributes --- __tests__/ExpensiMark-HTML-test.js | 12 ++++++++++++ lib/ExpensiMark.ts | 12 +++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/__tests__/ExpensiMark-HTML-test.js b/__tests__/ExpensiMark-HTML-test.js index 488088d4..32ca9e03 100644 --- a/__tests__/ExpensiMark-HTML-test.js +++ b/__tests__/ExpensiMark-HTML-test.js @@ -2220,6 +2220,18 @@ describe('Image markdown conversion to html tag', () => { '```code```'; expect(parser.replace(testString, {shouldKeepRawInput: true})).toBe(resultString); }); + + test('Single image with extra cached attribues', () => { + const testString = '![test](https://example.com/image.jpg)'; + const resultString = 'test'; + expect(parser.replace(testString, { + extras: { + mediaAttributeCache: { + 'https://example.com/image.jpg': 'data-expensify-height="100" data-expensify-width="100"' + } + } + })).toBe(resultString); + }) }); describe('room mentions', () => { diff --git a/lib/ExpensiMark.ts b/lib/ExpensiMark.ts index b125b578..b6942ba9 100644 --- a/lib/ExpensiMark.ts +++ b/lib/ExpensiMark.ts @@ -249,9 +249,14 @@ export default class ExpensiMark { { name: 'image', regex: MARKDOWN_IMAGE_REGEX, - replacement: (_extras, _match, g1, g2) => `${this.escapeAttributeContent(g1)}`, - rawInputReplacement: (_extras, _match, g1, g2) => - `${this.escapeAttributeContent(g1)}`, + replacement: (extras, _match, imgAlt, imgSource) => { + const extraAttrs = extras && extras.mediaAttributeCache && extras.mediaAttributeCache[imgSource]; + return `${this.escapeAttributeContent(imgAlt)}`; + }, + rawInputReplacement: (extras, _match, imgAlt, imgSource) => { + const extraAttrs = extras && extras.mediaAttributeCache && extras.mediaAttributeCache[imgSource]; + return `${this.escapeAttributeContent(imgAlt)}`; + }, }, /** @@ -891,6 +896,7 @@ export default class ExpensiMark { if (rule.pre) { replacedText = rule.pre(replacedText); } + const replacement = shouldKeepRawInput && rule.rawInputReplacement ? rule.rawInputReplacement : rule.replacement; if ('process' in rule) { replacedText = rule.process(replacedText, replacement, shouldKeepRawInput);