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'); + }); });