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 = '
- Test
- Test2
- 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| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n
\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| Test | \n | \n | \n
\n\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n
\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| Test | \nTest | \nTest | \n
\n\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n\n| test | \ntest | \ntest | \n
\n
\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');
+ });
});