1 // var f = new _kiwi.model.ChannelInfo({channel: _kiwi.app.panels().active});
3 _kiwi
.view
.ChannelInfo
= Backbone
.View
.extend({
5 'click .show_banlist': 'updateBanlist',
6 'change .channel-mode': 'onModeChange',
7 'click .remove-ban': 'onRemoveBanClick'
11 initialize: function () {
14 channel
= this.model
.get('channel'),
16 channel_name
: channel
.get('name')
19 this.$el
= $(_
.template($('#tmpl_channel_info').html().trim(), text
));
21 // Create the menu box this view will sit inside
22 this.menu
= new _kiwi
.view
.MenuBox(channel
.get('name'));
23 this.menu
.addItem('channel_info', this.$el
);
24 this.menu
.$el
.appendTo(channel
.view
.$container
);
27 this.menu
.$el
.offset({top
: _kiwi
.app
.view
.$el
.find('.panels').offset().top
});
29 // Menu box will call this destroy on closing
30 this.$el
.dispose
= _
.bind(this.dispose
, this);
32 // Display the info we have, then listen for further changes
33 this.updateInfo(channel
);
34 channel
.on('change:info_modes change:info_url change:banlist', this.updateInfo
, this);
36 // Request the latest info for ths channel from the network
37 channel
.get('network').gateway
.channelInfo(channel
.get('name'));
45 onModeChange: function(event
) {
46 var $this = $(event
.currentTarget
),
47 channel
= this.model
.get('channel'),
48 mode
= $this.data('mode'),
51 if ($this.attr('type') == 'checkbox') {
52 mode_string
= $this.is(':checked') ? '+' : '-';
54 channel
.setMode(mode_string
);
59 if ($this.attr('type') == 'text') {
60 mode_string
= $this.val() ?
61 '+' + mode
+ ' ' + $this.val() :
64 channel
.setMode(mode_string
);
71 onRemoveBanClick: function (event
) {
72 event
.preventDefault();
73 event
.stopPropagation();
75 var $this = $(event
.currentTarget
),
76 $tr
= $this.parents('tr:first'),
77 ban
= $tr
.data('ban');
82 var channel
= this.model
.get('channel');
83 channel
.setMode('-b ' + ban
.banned
);
89 updateInfo: function (channel
, new_val
) {
91 title
, modes
, url
, banlist
;
93 modes
= channel
.get('info_modes');
95 _
.each(modes
, function(mode
, idx
) {
96 mode
.mode
= mode
.mode
.toLowerCase();
98 if (mode
.mode
== '+k') {
99 that
.$el
.find('[name="channel_key"]').val(mode
.param
);
100 } else if (mode
.mode
== '+m') {
101 that
.$el
.find('[name="channel_mute"]').attr('checked', 'checked');
102 } else if (mode
.mode
== '+i') {
103 that
.$el
.find('[name="channel_invite"]').attr('checked', 'checked');
104 } else if (mode
.mode
== '+n') {
105 that
.$el
.find('[name="channel_external_messages"]').attr('checked', 'checked');
106 } else if (mode
.mode
== '+t') {
107 that
.$el
.find('[name="channel_topic"]').attr('checked', 'checked');
112 url
= channel
.get('info_url');
114 this.$el
.find('.channel_url')
118 this.$el
.find('.channel_url').slideDown();
121 banlist
= channel
.get('banlist');
122 if (banlist
&& banlist
.length
) {
123 var $table
= this.$el
.find('.channel-banlist table tbody');
125 this.$el
.find('.banlist-status').text('');
128 _
.each(banlist
, function(ban
) {
129 var $tr
= $('<tr></tr>').data('ban', ban
);
131 $('<td></td>').text(ban
.banned
).appendTo($tr
);
132 $('<td></td>').text(ban
.banned_by
.split(/[!@]/)[0]).appendTo($tr
);
133 $('<td></td>').text(formatDate(new Date(parseInt(ban
.banned_at
, 10) * 1000))).appendTo($tr
);
134 $('<td><i class="icon-remove remove-ban"></i></td>').appendTo($tr
);
139 this.$el
.find('.channel-banlist table').slideDown();
142 this.$el
.find('.banlist-status').text('Banlist empty');
143 this.$el
.find('.channel-banlist table').hide();
148 updateBanlist: function (event
) {
149 event
.preventDefault();
151 var channel
= this.model
.get('channel'),
152 network
= channel
.get('network');
154 network
.gateway
.raw('MODE ' + channel
.get('name') + ' +b');
158 dispose: function () {
159 this.model
.get('channel').off('change:info_modes change:info_url change:banlist', this.updateInfo
, this);