lib/markdown.jsView |
---|
2 | 2 … | var url = require('url') |
3 | 3 … | var marked = require('ssb-marked') |
4 | 4 … | var ref = require('ssb-ref') |
5 | 5 … | var u = require('./util') |
| 6 … | +var emojiNamedCharacters = require('emoji-named-characters') |
6 | 7 … | |
7 | 8 … | |
8 | 9 … | var blockRenderer = new marked.Renderer() |
9 | 10 … | blockRenderer.urltransform = function (href) { |
47 | 48 … | (checked === undefined ? '' : '<i>' + (checked ? '☑' : '☐') + '</i> ') + |
48 | 49 … | text + '</li>\n' |
49 | 50 … | } |
50 | 51 … | |
| 52 … | +function renderEmoji(emoji) { |
| 53 … | + return emoji in emojiNamedCharacters ? |
| 54 … | + '<img src="/emoji/' + encodeURI(emoji) + '.png"' |
| 55 … | + + ' alt=":' + escape(emoji) + ':"' |
| 56 … | + + ' title=":' + escape(emoji) + ':"' |
| 57 … | + + ' class="emoji" height="16" width="16">' |
| 58 … | + : ':' + emoji + ':' |
| 59 … | +} |
| 60 … | + |
51 | 61 … | marked.setOptions({ |
52 | 62 … | gfm: true, |
53 | 63 … | mentions: true, |
54 | 64 … | tables: true, |
56 | 66 … | pedantic: false, |
57 | 67 … | sanitize: true, |
58 | 68 … | smartLists: true, |
59 | 69 … | smartypants: false, |
| 70 … | + emoji: renderEmoji, |
60 | 71 … | highlight: u.highlight, |
61 | 72 … | renderer: blockRenderer |
62 | 73 … | }) |
63 | 74 … | |
64 | 75 … | |
65 | 76 … | var mdRules = new marked.InlineLexer(1, marked.defaults).rules |
66 | 77 … | mdRules.mention = |
67 | 78 … | /^(\s)?([@%&][A-Za-z0-9\._\-+=\/]*[A-Za-z0-9_\-+=\/]|[0-9a-f]{40})/ |
68 | | -mdRules.text = /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n| [@%&]|[0-9a-f]{40}|$)/ |
| 79 … | +mdRules.text = /^[\s\S]+?(?=[\\<!\[_*`:~]|https?:\/\/| {2,}\n| [@%&]|[0-9a-f]{40}|$)/ |
69 | 80 … | |
70 | 81 … | module.exports = function (text, options, cb) { |
71 | 82 … | if (!text) return '' |
72 | 83 … | if (typeof text != 'string') text = String(text) |