diff --git a/www/pad/export.js b/www/pad/export.js index 6e9de71c1..5e5a23689 100644 --- a/www/pad/export.js +++ b/www/pad/export.js @@ -94,9 +94,59 @@ define([ return void cb(blob); } if (ext === ".md") { + let strikethrough = { + filter: ['s', 'del', 'strike'], + replacement: function (content) { + return '~' + content + '~'; + } + }; + let underline = { + filter: ['u'], + replacement: function (content) { + return '' + content + ''; + } + }; var md = Turndown({ headingStyle: 'atx' - }).turndown(toExport); + }).addRule('table', { + filter: ['table'], + replacement: function (content, node) { + var childNodeArr = Array.from(node.childNodes); + var table = ''; + childNodeArr.forEach(function(rowNode) { + rowNode.childNodes.forEach(function(childNode) { + var rowContent = Array.from(childNode.childNodes); + var indexOf = Array.prototype.indexOf; + var index = childNodeArr.length > 1 ? indexOf.call(node.childNodes, rowNode) : indexOf.call(rowNode.childNodes, childNode); + var row = '|'; + var rowLength = rowContent.filter(Boolean).length; + for (var i =0; i < rowLength; i++) { + var cell = rowContent[i]; + var cellContent = Array.from(cell.childNodes); + if ((cellContent.length === 1 && cellContent[0].nodeName === "BR") || !cellContent.length) { + row += '|'; + } else if (cellContent.length >= 1) { + row += Turndown({ + headingStyle: 'atx' + }).addRule('strikethrough', strikethrough) + .addRule('underline', underline) + .turndown(cell.innerHTML).replaceAll('\n', '
'); + row += '|'; + } + } + var newRow = row.concat('\n'); + if (index === 0) { + var separator = '|-'; + newRow += `${separator.repeat(rowLength)}|\n`; + } + table += newRow; + return newRow; + }); + }); + return table; + }}).addRule('strikethrough', strikethrough) + .addRule('underline', underline) + .turndown(toExport); var mdBlob = new Blob([md], { type: 'text/markdown;charset=utf-8' });