/
kandan.js.coffee
96 lines (84 loc) · 2.83 KB
/
kandan.js.coffee
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#= require_self
#= require_tree ../../templates
#= require_tree ./models
#= require_tree ./collections
#= require_tree ./views
#= require_tree ./routers
#= require_tree ./helpers
window.Kandan =
Models: {}
Collections: {}
Views: {}
Routers: {}
Helpers: {}
Broadcasters: {}
Data: {}
Plugins: {}
# TODO this is a helper method to register plugins
# in the order required until we come up with plugin management
registerPlugins: ->
plugins = [
"UserList"
,"YouTubeEmbed"
,"ImageEmbed"
,"LinkEmbed"
,"Pastie"
,"Attachments"
,"MeAnnounce"
]
for plugin in plugins
Kandan.Plugins.register "Kandan.Plugins.#{plugin}"
initBroadcasterAndSubscribe: ()->
window.broadcaster = new Kandan.Broadcasters.FayeBroadcaster()
window.broadcaster.subscribe "/channels/*"
initTabs: ()->
$('#kandan').tabs({
select: (event, ui)->
$(document).data('active_channel_id',
Kandan.Helpers.Channels.getChannelIdByTabIndex(ui.index))
Kandan.Data.Channels.runCallbacks('change')
})
$("#kandan").tabs 'option', 'tabTemplate', '''
<li>
<span class="tab_right"></span>
<span class="tab_left"></span>
<span class="tab_content">
<a href="#{href}">#{label}</a>
<a href="#" class="ui-icon ui-icon-close">x</a>
</span>
</li>
'''
initChatArea: (channels)->
chatArea = new Kandan.Views.ChatArea({channels: channels})
$(".main-area").html(chatArea.render().el)
bindEventCallbacks: ()->
$(document).bind 'changeData', (element, name, value)->
Kandan.Data.ActiveUsers.runCallbacks('change') if name=="active_users"
onFetchActiveUsers: (channels)=>
return (activeUsers)=>
if not Kandan.Helpers.ActiveUsers.collectionHasCurrentUser(activeUsers)
activeUsers.add([Kandan.Helpers.Users.currentUser()])
Kandan.Helpers.ActiveUsers.setFromCollection(activeUsers)
Kandan.registerPlugins()
Kandan.Plugins.initAll()
Kandan.initChatArea(channels)
Kandan.initTabs()
Kandan.Widgets.initAll()
setCurrentUser: ()->
template = _.template '''
<img src="http://gravatar.com/avatar/<%= gravatar_hash %>?s=25&d=http://bushi.do/images/profile.png"/> <%= name %>
'''
currentUser = Kandan.Helpers.Users.currentUser()
$(".header .user").html template({
gravatar_hash: currentUser.gravatar_hash,
name: "#{currentUser.first_name} #{currentUser.last_name}"
})
init: ->
@setCurrentUser()
channels = new Kandan.Collections.Channels()
channels.fetch({success: (channelsCollection)=>
@initBroadcasterAndSubscribe()
@bindEventCallbacks()
activeUsers = new Kandan.Collections.ActiveUsers()
activeUsers.fetch({success: @onFetchActiveUsers(channelsCollection)})
})