From 3f76d343a5197a2fdeb497e91644fc6b8ce072c8 Mon Sep 17 00:00:00 2001 From: Barbara Valdez <34872381+barbaravaldez@users.noreply.github.com> Date: Mon, 9 Nov 2020 09:42:42 -0800 Subject: [PATCH] Table with no headings gets corrupted when editing (#13293) * fix data loss issue when modifying table with no headings * fix comment * Add tests and extra empty space to empty header format --- .../contrib/notebook/browser/turndownPluginGfm.ts | 13 +++++++++++-- .../test/browser/htmlMarkdownConverter.test.ts | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/sql/workbench/contrib/notebook/browser/turndownPluginGfm.ts b/src/sql/workbench/contrib/notebook/browser/turndownPluginGfm.ts index 9643f61f40..1d4dceafae 100644 --- a/src/sql/workbench/contrib/notebook/browser/turndownPluginGfm.ts +++ b/src/sql/workbench/contrib/notebook/browser/turndownPluginGfm.ts @@ -95,10 +95,19 @@ rules['table'] = { filter: function (node) { return node.nodeName === 'TABLE' && isHeadingRow(node.rows[0]); }, - - replacement: function (content) { + replacement: function (content, node) { // Ensure there are no blank lines content = content.replace('\n\n', '\n'); + // if the headings are empty, add border line and headings to keep table format + if (node.tHead.innerText === '') { + let emptyHeader = '\n\n|'; + let border = '\n|'; + for (let i = 0; i < node.rows[0].childNodes.length; i++) { + emptyHeader += ' |'; + border += ' --- |' + } + return emptyHeader + border + content + '\n\n'; + } return '\n\n' + content + '\n\n'; } }; diff --git a/src/sql/workbench/contrib/notebook/test/browser/htmlMarkdownConverter.test.ts b/src/sql/workbench/contrib/notebook/test/browser/htmlMarkdownConverter.test.ts index c3333b8b2b..d485e4d29d 100644 --- a/src/sql/workbench/contrib/notebook/test/browser/htmlMarkdownConverter.test.ts +++ b/src/sql/workbench/contrib/notebook/test/browser/htmlMarkdownConverter.test.ts @@ -152,4 +152,19 @@ suite('HTML Markdown Converter', function (): void { htmlString = '
  1. Test
    1. Test2
  2. Test3
'; assert.equal(htmlMarkdownConverter.convert(htmlString), `1. Test\n 1. Test2\n2. Test3`, 'Basic ordered item test failed'); }); + + test('Should transform table with no header', () => { + htmlString = '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
testtesttest
testtesttest
testtesttest
testtesttest
\n'; + assert.equal(htmlMarkdownConverter.convert(htmlString), `| | | |\n| --- | --- | --- |\n| test | test | test |\n| test | test | test |\n| test | test | test |\n| test | test | test |`, 'Table with no header failed'); + }); + + test('Should transform table with missing headings', () => { + htmlString = '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Test
testtesttest
testtesttest
testtesttest
testtesttest
\n'; + assert.equal(htmlMarkdownConverter.convert(htmlString), `| Test | | |\n| --- | --- | --- |\n| test | test | test |\n| test | test | test |\n| test | test | test |\n| test | test | test |`, 'Table with missing headings failed'); + }); + + test('Should transform table with header', () => { + htmlString = '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
TestTestTest
testtesttest
testtesttest
testtesttest
testtesttest
\n'; + assert.equal(htmlMarkdownConverter.convert(htmlString), `| Test | Test | Test |\n| --- | --- | --- |\n| test | test | test |\n| test | test | test |\n| test | test | test |\n| test | test | test |`, 'Table with header failed'); + }); });