mirror of https://github.com/mindoc-org/mindoc.git
111 lines
2.5 KiB
JavaScript
111 lines
2.5 KiB
JavaScript
'use strict'
|
|
|
|
function cell (content, node) {
|
|
var index = Array.prototype.indexOf.call(node.parentNode.childNodes, node)
|
|
var prefix = ' '
|
|
if (index === 0) prefix = '| '
|
|
return prefix + content + ' |'
|
|
}
|
|
|
|
var highlightRegEx = /highlight highlight-(\S+)/
|
|
|
|
module.exports = [
|
|
{
|
|
filter: 'br',
|
|
replacement: function () {
|
|
return '\n'
|
|
}
|
|
},
|
|
{
|
|
filter: ['del', 's', 'strike'],
|
|
replacement: function (content) {
|
|
return '~~' + content + '~~'
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: function (node) {
|
|
return node.type === 'checkbox' && node.parentNode.nodeName === 'LI'
|
|
},
|
|
replacement: function (content, node) {
|
|
return (node.checked ? '[x]' : '[ ]') + ' '
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: ['th', 'td'],
|
|
replacement: function (content, node) {
|
|
return cell(content, node)
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: 'tr',
|
|
replacement: function (content, node) {
|
|
var borderCells = ''
|
|
var alignMap = { left: ':--', right: '--:', center: ':-:' }
|
|
|
|
if (node.parentNode.nodeName === 'THEAD') {
|
|
for (var i = 0; i < node.childNodes.length; i++) {
|
|
var align = node.childNodes[i].attributes.align
|
|
var border = '---'
|
|
|
|
if (align) border = alignMap[align.value] || border
|
|
|
|
borderCells += cell(border, node.childNodes[i])
|
|
}
|
|
}
|
|
return '\n' + content + (borderCells ? '\n' + borderCells : '')
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: 'table',
|
|
replacement: function (content) {
|
|
return '\n\n' + content + '\n\n'
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: ['thead', 'tbody', 'tfoot'],
|
|
replacement: function (content) {
|
|
return content
|
|
}
|
|
},
|
|
|
|
// Fenced code blocks
|
|
{
|
|
filter: function (node) {
|
|
return node.nodeName === 'PRE' &&
|
|
node.firstChild &&
|
|
node.firstChild.nodeName === 'CODE'
|
|
},
|
|
replacement: function (content, node) {
|
|
return '\n\n```\n' + node.firstChild.textContent + '\n```\n\n'
|
|
}
|
|
},
|
|
|
|
// Syntax-highlighted code blocks
|
|
{
|
|
filter: function (node) {
|
|
return node.nodeName === 'PRE' &&
|
|
node.parentNode.nodeName === 'DIV' &&
|
|
highlightRegEx.test(node.parentNode.className)
|
|
},
|
|
replacement: function (content, node) {
|
|
var language = node.parentNode.className.match(highlightRegEx)[1]
|
|
return '\n\n```' + language + '\n' + node.textContent + '\n```\n\n'
|
|
}
|
|
},
|
|
|
|
{
|
|
filter: function (node) {
|
|
return node.nodeName === 'DIV' &&
|
|
highlightRegEx.test(node.className)
|
|
},
|
|
replacement: function (content) {
|
|
return '\n\n' + content + '\n\n'
|
|
}
|
|
}
|
|
]
|