1 // var f = new _kiwi.model.ChannelInfo({channel: _kiwi.app.panels().active});
3 _kiwi
.view
.ChannelInfo
= Backbone
.View
.extend({
5 'click .toggle_banlist': 'toggleBanList',
6 'change .channel-mode': 'onModeChange',
7 'click .remove-ban': 'onRemoveBanClick'
11 initialize: function () {
14 channel
= this.model
.get('channel'),
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')
26 this.$el
= $(_
.template($('#tmpl_channel_info').html().trim(), text
));
28 // Create the menu box this view will sit inside
29 this.menu
= new _kiwi
.view
.MenuBox(channel
.get('name'));
30 this.menu
.addItem('channel_info', this.$el
);
31 this.menu
.$el
.appendTo(channel
.view
.$container
);
34 this.menu
.$el
.offset({top
: _kiwi
.app
.view
.$el
.find('.panels').offset().top
});
36 // Menu box will call this destroy on closing
37 this.$el
.dispose
= _
.bind(this.dispose
, this);
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);
43 // Request the latest info for ths channel from the network
44 channel
.get('network').gateway
.channelInfo(channel
.get('name'));
52 onModeChange: function(event
) {
53 var $this = $(event
.currentTarget
),
54 channel
= this.model
.get('channel'),
55 mode
= $this.data('mode'),
58 if ($this.attr('type') == 'checkbox') {
59 mode_string
= $this.is(':checked') ? '+' : '-';
61 channel
.setMode(mode_string
);
66 if ($this.attr('type') == 'text') {
67 mode_string
= $this.val() ?
68 '+' + mode
+ ' ' + $this.val() :
71 channel
.setMode(mode_string
);
78 onRemoveBanClick: function (event
) {
79 event
.preventDefault();
80 event
.stopPropagation();
82 var $this = $(event
.currentTarget
),
83 $tr
= $this.parents('tr:first'),
84 ban
= $tr
.data('ban');
89 var channel
= this.model
.get('channel');
90 channel
.setMode('-b ' + ban
.banned
);
96 updateInfo: function (channel
, new_val
) {
98 title
, modes
, url
, banlist
;
100 modes
= channel
.get('info_modes');
102 _
.each(modes
, function(mode
, idx
) {
103 mode
.mode
= mode
.mode
.toLowerCase();
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');
119 url
= channel
.get('info_url');
121 this.$el
.find('.channel_url')
125 this.$el
.find('.channel_url').slideDown();
128 banlist
= channel
.get('banlist');
129 if (banlist
&& banlist
.length
) {
130 var $table
= this.$el
.find('.channel-banlist table tbody');
132 this.$el
.find('.banlist-status').text('');
135 _
.each(banlist
, function(ban
) {
136 var $tr
= $('<tr></tr>').data('ban', ban
);
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
);
141 $('<td><i class="fa fa-rtimes remove-ban"></i></td>').appendTo($tr
);
146 this.$el
.find('.channel-banlist table').slideDown();
148 this.$el
.find('.banlist-status').text('Banlist empty');
149 this.$el
.find('.channel-banlist table').hide();
153 toggleBanList: function (event
) {
154 event
.preventDefault();
155 this.$el
.find('.channel-banlist table').toggle();
157 if(!this.$el
.find('.channel-banlist table').is(':visible'))
160 var channel
= this.model
.get('channel'),
161 network
= channel
.get('network');
163 network
.gateway
.raw('MODE ' + channel
.get('name') + ' +b');
166 dispose: function () {
167 this.model
.get('channel').off('change:info_modes change:info_url change:banlist', this.updateInfo
, this);