Skip to content
This repository was archived by the owner on Jul 11, 2019. It is now read-only.

Commit a4bc153

Browse files
committed
Migrate rich-message.js to its new home.
2 parents 8cf4cb5 + 5d3afe7 commit a4bc153

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

lib/rich-message.js

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
module.exports = makeRichMessage
2+
module.exports.mergeMessages = mergeMessages
3+
4+
var emoji = require('markdown-it-emoji')
5+
var ghlink = require('ghlink')
6+
var higlight = require('highlight.js')
7+
var htmlToVDom = require('html-to-vdom')
8+
var MarkdownIt = require('markdown-it')
9+
var twemoji = require('twemoji')
10+
var util = require('./util.js')
11+
var VNode = require('virtual-dom/vnode/vnode')
12+
var VText = require('virtual-dom/vnode/vtext')
13+
14+
var md = new MarkdownIt({
15+
linkify: true,
16+
highlight: function (str, lang) {
17+
if (lang && higlight.getLanguage(lang)) {
18+
try {
19+
return higlight.highlight(lang, str).value
20+
} catch (err) {}
21+
}
22+
23+
try {
24+
return higlight.highlightAuto(str).value
25+
} catch (err) {}
26+
27+
return '' // use external default escaping
28+
}
29+
}).use(emoji)
30+
31+
md.renderer.rules.emoji = function (token, index) {
32+
return twemoji.parse(token[index].content)
33+
}
34+
35+
var convertHTML = htmlToVDom({
36+
VNode: VNode,
37+
VText: VText
38+
})
39+
40+
function makeVDom (html) {
41+
return convertHTML('<div class="text">' + html + '</div>')
42+
}
43+
44+
function makeRichMessage (message, username) {
45+
message.anon = /Anonymous/i.test(message.username)
46+
message.avatar = message.anon
47+
? 'static/cat.png'
48+
: 'https://github.com/' + message.username + '.png'
49+
message.timeago = util.timeago(message.timestamp)
50+
51+
message.html = md.render(message.text)
52+
message.html = message.html.replace(/\n/g, '<p></p>')
53+
message.html = ghlink(message.html, { format: 'html' })
54+
message.html = message.html.replace(/(^| )(#[a-zA-Z0-9]+)( |$)$/g, '$1<a href="$2">$2</a>$3')
55+
56+
var highlight = (message.text.indexOf(username) !== -1)
57+
var classStr = highlight ? ' class="highlight"' : ''
58+
message.html = '<div' + classStr + '>' + message.html + '</div>'
59+
60+
message.vdom = makeVDom(message.html)
61+
62+
return message
63+
}
64+
65+
function mergeMessages (message1, message2) {
66+
message1.text += '\n' + message2.text
67+
message1.html += '<p></p>' + message2.html
68+
message1.vdom = makeVDom(message1.html)
69+
return message1
70+
}

lib/util.js

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var moment = require('moment')
2+
3+
exports.timeago = function (milliseconds) {
4+
var timeago = moment(milliseconds).calendar()
5+
if (timeago.indexOf('Today at ') === 0) return timeago.substring(9)
6+
return timeago
7+
}

0 commit comments

Comments
 (0)