-
Notifications
You must be signed in to change notification settings - Fork 6
/
likes.js
44 lines (38 loc) · 1.27 KB
/
likes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
var { h, computed, when } = require('mutant')
var nest = require('depnest')
exports.needs = nest({
'keys.sync.id': 'first',
'message.obs.likes': 'first',
'sbot.async.publish': 'first'
})
exports.gives = nest('message.html.likes')
exports.create = (api) => {
return nest('message.html.likes', function likes(msg) {
var id = api.keys.sync.id()
var likes = api.message.obs.likes(msg.key)
var iLike = computed(likes, likes => likes.includes(id))
var count = computed(likes, likes => likes.length ? likes.length : '')
return h('Likes', { 'ev-click': () => publishLike(msg, !iLike()) }, [
h('i.fa', { className: when(iLike, 'fa-heart', 'fa-heart-o') }),
h('div.count', count)
])
})
function publishLike(msg, status = true) {
var like = status ? {
type: 'vote',
channel: msg.value.content.channel,
vote: { link: msg.key, value: 1, expression: 'Like' }
} : {
type: 'vote',
channel: msg.value.content.channel,
vote: { link: msg.key, value: 0, expression: 'Unlike' }
}
if (msg.value.content.recps) {
like.recps = msg.value.content.recps.map(function (e) {
return e && typeof e !== 'string' ? e.link : e
})
like.private = true
}
api.sbot.async.publish(like)
}
}