From b536c682a2c7efc9f926b0dc347b53e555032adb Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 6 Apr 2020 09:01:03 -0700 Subject: [PATCH] fix: Escape characters visible in TOC closes #1226 --- shared/utils/getHeadingsForText.js | 3 ++- shared/utils/getHeadingsForText.test.js | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 shared/utils/getHeadingsForText.test.js diff --git a/shared/utils/getHeadingsForText.js b/shared/utils/getHeadingsForText.js index d899adb6..38b693e6 100644 --- a/shared/utils/getHeadingsForText.js +++ b/shared/utils/getHeadingsForText.js @@ -1,6 +1,7 @@ // @flow import { filter } from 'lodash'; import slugify from 'shared/utils/slugify'; +import unescape from 'shared/utils/unescape'; export default function getHeadingsForText( text: string @@ -13,7 +14,7 @@ export default function getHeadingsForText( if (!match) continue; const level = match[1].length; - const title = match[2]; + const title = unescape(match[2]); let slug = slugify(title); const existing = filter(output, { slug }); diff --git a/shared/utils/getHeadingsForText.test.js b/shared/utils/getHeadingsForText.test.js new file mode 100644 index 00000000..9be599fb --- /dev/null +++ b/shared/utils/getHeadingsForText.test.js @@ -0,0 +1,23 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import getHeadingsForText from './getHeadingsForText'; + +it('should return an array of document headings', () => { + const response = getHeadingsForText(` +# Header + +## Subheading +`); + + expect(response.length).toBe(2); + expect(response[0].level).toBe(1); + expect(response[0].title).toBe('Header'); + expect(response[1].level).toBe(2); + expect(response[1].title).toBe('Subheading'); +}); + +it('should unescape special characters', () => { + const response = getHeadingsForText(`# Header <\\>`); + + expect(response.length).toBe(1); + expect(response[0].title).toBe('Header <>'); +});