-
Notifications
You must be signed in to change notification settings - Fork 408
/
channels.js.coffee
120 lines (91 loc) · 4.11 KB
/
channels.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
class Kandan.Helpers.Channels
@options:
autoScrollThreshold: 0.90
@templates:
addChannelButton: _.template '''
<span class="delete_channel">[x]</span>
'''
@replaceCreateButton: ()->
$tabNav = $(".create_channel").parent().parent()
$createButton = $(".create_channel").parent().html()
$tabNav.find(".create_channel").parent().remove()
$tabNav.append("<li>"+$createButton+"</li>")
@pastAutoScrollThreshold: (channel_id)->
currentPosition = @currentScrollPosition channel_id
totalHeight = $(document).height() - $(window).height()
scrollPercentage = (currentPosition) / (totalHeight)
scrollPercentage > @options.autoScrollThreshold
@scrollToLatestMessage: (channel_id)->
$("#channels-#{channel_id}").scrollTop(100000)
@currentScrollPosition: (channel_id)->
$("#channels-#{channel_id}").scrollTop()
@channel_activities_el: (channel_id)->
$("#channel-activities-#{channel_id}")
@channel_pagination_el: (channel_id)->
$("#channels-#{channel_id} .pagination")
@get_channel_id_from_tab_index: (tab_index)->
$("#channels .ui-tabs-panel")
.eq(tab_index)
.data('channel_id')
@selected_tab: ()->
$('#channels').tabs('option', 'selected')
@get_active_channel_id: ()->
if $(document).data('active_channel_id') == undefined
return $("#channels .ui-tabs-panel")
.eq(@selected_tab())
.data('channel_id')
else
return $(document).data('active_channel_id')
@deleteChannel: (channelIndex)->
channelID = @get_channel_id_from_tab_index(channelIndex)
console.log "deleting channel ID #{channelID}"
channel = Kandan.Models.Channel({id: channelID})
console.log "could create channel"
channel.destroy({success: ()=>
$("#channels").tabs("remove", channelIndex)
})
@channel_not_exists: (channel_id)->
$("#channels-#{channel_id}").length == 0
@create_channel_area: (channel)->
channel_area = "#channels-#{channel.get('id')}"
totalTabs = $("#channels").tabs("length")
$("#channels").tabs('add', channel_area, "#{channel.get("name")}#{@templates.addChannelButton()}", totalTabs)
Kandan.Helpers.Channels.replaceCreateButton()
view = new Kandan.Views.ListActivities({channel: channel})
$(channel_area).html $(view.render().el).html()
$(channel_area).data('channel_id', channel.get('id'))
@new_activity_view: (activity_attributes)->
activity = new Kandan.Models.Activity(activity_attributes)
activity_view = new Kandan.Views.ShowActivity({activity: activity})
return activity_view
@add_activity: (activity_attributes, state)->
if activity_attributes.channel!=undefined && @channel_not_exists(activity_attributes.channel_id)
@create_channel_area(new Kandan.Models.Channel(activity_attributes.channel))
if activity_attributes.channel_id
@add_message(activity_attributes, state)
else
@add_notification(activity_attributes)
if activity_attributes.channel_id
channel_id = activity_attributes.channel_id
else
channel_id = @get_active_channel_id()
@scrollToLatestMessage(channel_id) if @pastAutoScrollThreshold(channel_id)
@add_message: (activity_attributes, state)->
@channel_activities_el(activity_attributes.channel_id)
.append(@new_activity_view(activity_attributes).render().el)
@set_pagination_data(activity_attributes.channel_id)
@add_notification: (activity_attributes)->
$channel_elements = $(".channel-activities")
activity_attributes["created_at"] = new Date()
for el in $channel_elements
$(el).append(@new_activity_view(activity_attributes).render().el)
@set_pagination_state: (channel_id, more_activities, oldest)->
@channel_pagination_el(channel_id).data('oldest', oldest)
if more_activities == true
@channel_pagination_el(channel_id).show()
else
@channel_pagination_el(channel_id).hide()
@set_pagination_data: (channel_id)->
$oldest_activity = @channel_activities_el(channel_id).find(".activity").first()
if $oldest_activity.length != 0
@channel_pagination_el(channel_id).data('oldest', $oldest_activity.data('activity_id'))