/
retort-init.js.es6
68 lines (57 loc) · 2.01 KB
/
retort-init.js.es6
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { withPluginApi } from 'discourse/lib/plugin-api'
import { showSelector } from "discourse/lib/emoji/toolbar"
import TopicRoute from 'discourse/routes/topic'
import Retort from '../lib/retort'
import groups from 'discourse/lib/emoji/groups'
function initializePlugin(api) {
const siteSettings = api.container.lookup('site-settings:main')
TopicRoute.on("setupTopicController", function(event) {
let controller = event.controller
Retort.set('topicController', controller)
controller.messageBus.subscribe(`/retort/topics/${controller.model.id}`, (data) => { Retort.callback(data) })
})
api.decorateWidget('post-contents:after-cooked', helper => {
let post = Retort.postFor(helper.getModel().id)
Retort.storeWidget(helper)
return _.map(post.retorts, (retort) => {
return helper.attach('retort-toggle', {
post: post,
usernames: retort.usernames,
emoji: retort.emoji
})
})
})
if (!api._currentUser || !siteSettings.retort_enabled) { return }
api.addPostMenuButton('retort', attrs => {
return {
action: 'clickRetort',
icon: 'smile-o',
title: 'retort.title',
position: 'first'
}
})
api.attachWidgetAction('post-menu', 'clickRetort', function() {
let post = this.findAncestorModel()
showSelector({
page: siteSettings.retort_limited_emoji_set ? 'retort' : null,
modalClass: siteSettings.retort_limited_emoji_set ? 'retort-selector' : null,
perRow: siteSettings.retort_limited_emoji_set ? parseInt(siteSettings.retort_emojis_per_row) : null,
register: api.container,
onSelect: emoji => { Retort.updateRetort(post, emoji) }
})
})
if (siteSettings.retort_limited_emoji_set) {
groups.push({
name: 'retort',
fullName: 'Retorts',
tabicon: 'smiley',
icons: siteSettings.retort_allowed_emojis.split('|')
})
}
}
export default {
name: 'retort-button',
initialize: function() {
withPluginApi('0.1', api => initializePlugin(api))
}
}