Commit | Line | Data |
---|---|---|
72db27e4 D |
1 | // var f = new _kiwi.model.ChannelInfo({channel: _kiwi.app.panels().active}); |
2 | ||
3 | _kiwi.view.ChannelInfo = Backbone.View.extend({ | |
4 | events: { | |
099a0764 | 5 | 'click .toggle_banlist': 'toggleBanList', |
72db27e4 D |
6 | 'change .channel-mode': 'onModeChange', |
7 | 'click .remove-ban': 'onRemoveBanClick' | |
8 | }, | |
9 | ||
10 | ||
11 | initialize: function () { | |
12 | var that = this, | |
13 | network, | |
14 | channel = this.model.get('channel'), | |
72d9b774 D |
15 | text; |
16 | ||
17 | text = { | |
18 | moderated_chat: translateText('client_views_channelinfo_moderated'), | |
19 | invite_only: translateText('client_views_channelinfo_inviteonly'), | |
20 | ops_change_topic: translateText('client_views_channelinfo_opschangechannel'), | |
21 | external_messages: translateText('client_views_channelinfo_externalmessages'), | |
22 | toggle_banlist: translateText('client_views_channelinfo_togglebanlist'), | |
23 | channel_name: channel.get('name') | |
24 | }; | |
72db27e4 D |
25 | |
26 | this.$el = $(_.template($('#tmpl_channel_info').html().trim(), text)); | |
27 | ||
28 | // Create the menu box this view will sit inside | |
d4bcebc3 | 29 | this.menu = new _kiwi.view.MenuBox(channel.get('name')); |
72db27e4 D |
30 | this.menu.addItem('channel_info', this.$el); |
31 | this.menu.$el.appendTo(channel.view.$container); | |
32 | this.menu.show(); | |
33 | ||
63a887cd D |
34 | this.menu.$el.offset({top: _kiwi.app.view.$el.find('.panels').offset().top}); |
35 | ||
72db27e4 D |
36 | // Menu box will call this destroy on closing |
37 | this.$el.dispose = _.bind(this.dispose, this); | |
38 | ||
39 | // Display the info we have, then listen for further changes | |
40 | this.updateInfo(channel); | |
41 | channel.on('change:info_modes change:info_url change:banlist', this.updateInfo, this); | |
42 | ||
43 | // Request the latest info for ths channel from the network | |
44 | channel.get('network').gateway.channelInfo(channel.get('name')); | |
45 | }, | |
46 | ||
47 | ||
48 | render: function () { | |
49 | }, | |
50 | ||
51 | ||
52 | onModeChange: function(event) { | |
53 | var $this = $(event.currentTarget), | |
54 | channel = this.model.get('channel'), | |
55 | mode = $this.data('mode'), | |
56 | mode_string = ''; | |
57 | ||
58 | if ($this.attr('type') == 'checkbox') { | |
59 | mode_string = $this.is(':checked') ? '+' : '-'; | |
60 | mode_string += mode; | |
61 | channel.setMode(mode_string); | |
62 | ||
63 | return; | |
64 | } | |
65 | ||
66 | if ($this.attr('type') == 'text') { | |
67 | mode_string = $this.val() ? | |
68 | '+' + mode + ' ' + $this.val() : | |
69 | '-' + mode; | |
70 | ||
71 | channel.setMode(mode_string); | |
72 | ||
73 | return; | |
74 | } | |
75 | }, | |
76 | ||
77 | ||
78 | onRemoveBanClick: function (event) { | |
79 | event.preventDefault(); | |
80 | event.stopPropagation(); | |
81 | ||
82 | var $this = $(event.currentTarget), | |
83 | $tr = $this.parents('tr:first'), | |
84 | ban = $tr.data('ban'); | |
85 | ||
86 | if (!ban) | |
87 | return; | |
88 | ||
89 | var channel = this.model.get('channel'); | |
90 | channel.setMode('-b ' + ban.banned); | |
91 | ||
92 | $tr.remove(); | |
93 | }, | |
94 | ||
95 | ||
96 | updateInfo: function (channel, new_val) { | |
97 | var that = this, | |
63a887cd D |
98 | title, modes, url, banlist; |
99 | ||
72db27e4 D |
100 | modes = channel.get('info_modes'); |
101 | if (modes) { | |
102 | _.each(modes, function(mode, idx) { | |
103 | mode.mode = mode.mode.toLowerCase(); | |
104 | ||
105 | if (mode.mode == '+k') { | |
106 | that.$el.find('[name="channel_key"]').val(mode.param); | |
107 | } else if (mode.mode == '+m') { | |
108 | that.$el.find('[name="channel_mute"]').attr('checked', 'checked'); | |
109 | } else if (mode.mode == '+i') { | |
110 | that.$el.find('[name="channel_invite"]').attr('checked', 'checked'); | |
111 | } else if (mode.mode == '+n') { | |
112 | that.$el.find('[name="channel_external_messages"]').attr('checked', 'checked'); | |
113 | } else if (mode.mode == '+t') { | |
114 | that.$el.find('[name="channel_topic"]').attr('checked', 'checked'); | |
115 | } | |
116 | }); | |
117 | } | |
118 | ||
119 | url = channel.get('info_url'); | |
120 | if (url) { | |
63a887cd | 121 | this.$el.find('.channel_url') |
72db27e4 D |
122 | .text(url) |
123 | .attr('href', url); | |
124 | ||
125 | this.$el.find('.channel_url').slideDown(); | |
126 | } | |
127 | ||
128 | banlist = channel.get('banlist'); | |
129 | if (banlist && banlist.length) { | |
63a887cd | 130 | var $table = this.$el.find('.channel-banlist table tbody'); |
72db27e4 | 131 | |
19c15434 D |
132 | this.$el.find('.banlist-status').text(''); |
133 | ||
72db27e4 D |
134 | $table.empty(); |
135 | _.each(banlist, function(ban) { | |
136 | var $tr = $('<tr></tr>').data('ban', ban); | |
137 | ||
138 | $('<td></td>').text(ban.banned).appendTo($tr); | |
139 | $('<td></td>').text(ban.banned_by.split(/[!@]/)[0]).appendTo($tr); | |
140 | $('<td></td>').text(formatDate(new Date(parseInt(ban.banned_at, 10) * 1000))).appendTo($tr); | |
880239e8 | 141 | $('<td><i class="fa fa-rtimes remove-ban"></i></td>').appendTo($tr); |
72db27e4 D |
142 | |
143 | $table.append($tr); | |
144 | }); | |
63a887cd D |
145 | |
146 | this.$el.find('.channel-banlist table').slideDown(); | |
19c15434 D |
147 | } else { |
148 | this.$el.find('.banlist-status').text('Banlist empty'); | |
149 | this.$el.find('.channel-banlist table').hide(); | |
72db27e4 D |
150 | } |
151 | }, | |
152 | ||
099a0764 | 153 | toggleBanList: function (event) { |
72db27e4 | 154 | event.preventDefault(); |
099a0764 | 155 | this.$el.find('.channel-banlist table').toggle(); |
17a844ce | 156 | |
157 | if(!this.$el.find('.channel-banlist table').is(':visible')) | |
158 | return; | |
159 | ||
72db27e4 | 160 | var channel = this.model.get('channel'), |
a16bd4c6 | 161 | network = channel.get('network'); |
72db27e4 D |
162 | |
163 | network.gateway.raw('MODE ' + channel.get('name') + ' +b'); | |
164 | }, | |
165 | ||
72db27e4 D |
166 | dispose: function () { |
167 | this.model.get('channel').off('change:info_modes change:info_url change:banlist', this.updateInfo, this); | |
168 | ||
169 | this.$el.remove(); | |
170 | } | |
099a0764 | 171 | }); |