123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- 'use strict'
- module.exports = [
- {
- filter: 'p',
- replacement: function (content) {
- return '\n\n' + content + '\n\n'
- }
- },
- {
- filter: 'br',
- replacement: function () {
- return ' \n'
- }
- },
- {
- filter: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],
- replacement: function (content, node) {
- var hLevel = node.nodeName.charAt(1)
- var hPrefix = ''
- for (var i = 0; i < hLevel; i++) {
- hPrefix += '#'
- }
- return '\n\n' + hPrefix + ' ' + content + '\n\n'
- }
- },
- {
- filter: 'hr',
- replacement: function () {
- return '\n\n* * *\n\n'
- }
- },
- {
- filter: ['em', 'i'],
- replacement: function (content) {
- return '_' + content + '_'
- }
- },
- {
- filter: ['strong', 'b'],
- replacement: function (content) {
- return '**' + content + '**'
- }
- },
- // Inline code
- {
- filter: function (node) {
- var hasSiblings = node.previousSibling || node.nextSibling
- var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings
- return node.nodeName === 'CODE' && !isCodeBlock
- },
- replacement: function (content) {
- return '`' + content + '`'
- }
- },
- {
- filter: function (node) {
- return node.nodeName === 'A' && node.getAttribute('href')
- },
- replacement: function (content, node) {
- var titlePart = node.title ? ' "' + node.title + '"' : ''
- return '[' + content + '](' + node.getAttribute('href') + titlePart + ')'
- }
- },
- {
- filter: 'img',
- replacement: function (content, node) {
- var alt = node.alt || ''
- var src = node.getAttribute('src') || ''
- var title = node.title || ''
- var titlePart = title ? ' "' + title + '"' : ''
- return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''
- }
- },
- // Code blocks
- {
- filter: function (node) {
- return node.nodeName === 'PRE' && node.firstChild.nodeName === 'CODE'
- },
- replacement: function (content, node) {
- return '\n\n ' + node.firstChild.textContent.replace(/\n/g, '\n ') + '\n\n'
- }
- },
- {
- filter: 'blockquote',
- replacement: function (content) {
- content = content.trim()
- content = content.replace(/\n{3,}/g, '\n\n')
- content = content.replace(/^/gm, '> ')
- return '\n\n' + content + '\n\n'
- }
- },
- {
- filter: 'li',
- replacement: function (content, node) {
- content = content.replace(/^\s+/, '').replace(/\n/gm, '\n ')
- var prefix = '* '
- var parent = node.parentNode
- var index = Array.prototype.indexOf.call(parent.children, node) + 1
- prefix = /ol/i.test(parent.nodeName) ? index + '. ' : '* '
- return prefix + content
- }
- },
- {
- filter: ['ul', 'ol'],
- replacement: function (content, node) {
- var strings = []
- for (var i = 0; i < node.childNodes.length; i++) {
- strings.push(node.childNodes[i]._replacement)
- }
- if (/li/i.test(node.parentNode.nodeName)) {
- return '\n' + strings.join('\n')
- }
- return '\n\n' + strings.join('\n') + '\n\n'
- }
- },
- {
- filter: function (node) {
- return this.isBlock(node)
- },
- replacement: function (content, node) {
- return '\n\n' + this.outer(node, content) + '\n\n'
- }
- },
- // Anything else!
- {
- filter: function () {
- return true
- },
- replacement: function (content, node) {
- return this.outer(node, content)
- }
- }
- ]
|