github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/themes/wind/static/libs/to-markdown/lib/md-converters.js (about) 1 'use strict'; 2 3 module.exports = [ 4 { 5 filter: 'p', 6 replacement: function (content) { 7 return '\n\n' + content + '\n\n'; 8 } 9 }, 10 11 { 12 filter: 'br', 13 replacement: function () { 14 return ' \n'; 15 } 16 }, 17 18 { 19 filter: ['h1', 'h2', 'h3', 'h4','h5', 'h6'], 20 replacement: function(content, node) { 21 var hLevel = node.nodeName.charAt(1); 22 var hPrefix = ''; 23 for(var i = 0; i < hLevel; i++) { 24 hPrefix += '#'; 25 } 26 return '\n\n' + hPrefix + ' ' + content + '\n\n'; 27 } 28 }, 29 30 { 31 filter: 'hr', 32 replacement: function () { 33 return '\n\n* * *\n\n'; 34 } 35 }, 36 37 { 38 filter: ['em', 'i'], 39 replacement: function (content) { 40 return '_' + content + '_'; 41 } 42 }, 43 44 { 45 filter: ['strong', 'b'], 46 replacement: function (content) { 47 return '**' + content + '**'; 48 } 49 }, 50 51 // Inline code 52 { 53 filter: function (node) { 54 var hasSiblings = node.previousSibling || node.nextSibling; 55 var isCodeBlock = node.parentNode.nodeName === 'PRE' && !hasSiblings; 56 57 return node.nodeName === 'CODE' && !isCodeBlock; 58 }, 59 replacement: function(content) { 60 return '`' + content + '`'; 61 } 62 }, 63 64 { 65 filter: function (node) { 66 return node.nodeName === 'A' && node.getAttribute('href'); 67 }, 68 replacement: function(content, node) { 69 var titlePart = node.title ? ' "'+ node.title +'"' : ''; 70 return '[' + content + '](' + node.getAttribute('href') + titlePart + ')'; 71 } 72 }, 73 74 { 75 filter: 'img', 76 replacement: function(content, node) { 77 var alt = node.alt || ''; 78 var src = node.getAttribute('src') || ''; 79 var title = node.title || ''; 80 var titlePart = title ? ' "'+ title +'"' : ''; 81 return src ? '![' + alt + ']' + '(' + src + titlePart + ')' : ''; 82 } 83 }, 84 85 // Code blocks 86 { 87 filter: function (node) { 88 return node.nodeName === 'PRE' && node.firstChild.nodeName === 'CODE'; 89 }, 90 replacement: function(content, node) { 91 return '\n\n ' + node.firstChild.textContent.replace(/\n/g, '\n ') + '\n\n'; 92 } 93 }, 94 95 { 96 filter: 'blockquote', 97 replacement: function (content) { 98 content = this.trim(content); 99 content = content.replace(/\n{3,}/g, '\n\n'); 100 content = content.replace(/^/gm, '> '); 101 return '\n\n' + content + '\n\n'; 102 } 103 }, 104 105 { 106 filter: 'li', 107 replacement: function (content, node) { 108 content = content.replace(/^\s+/, '').replace(/\n/gm, '\n '); 109 var prefix = '* '; 110 var parent = node.parentNode; 111 var index = Array.prototype.indexOf.call(parent.children, node) + 1; 112 113 prefix = /ol/i.test(parent.nodeName) ? index + '. ' : '* '; 114 return prefix + content; 115 } 116 }, 117 118 { 119 filter: ['ul', 'ol'], 120 replacement: function (content, node) { 121 var strings = []; 122 for (var i = 0; i < node.childNodes.length; i++) { 123 strings.push(node.childNodes[i]._replacement); 124 } 125 126 if (/li/i.test(node.parentNode.nodeName)) { 127 return '\n' + strings.join('\n'); 128 } 129 return '\n\n' + strings.join('\n') + '\n\n'; 130 } 131 }, 132 133 { 134 filter: function (node) { 135 return this.isBlock(node); 136 }, 137 replacement: function (content, node) { 138 return '\n\n' + this.outer(node, content) + '\n\n'; 139 } 140 }, 141 142 // Anything else! 143 { 144 filter: function () { 145 return true; 146 }, 147 replacement: function (content, node) { 148 return this.outer(node, content); 149 } 150 } 151 ];