Text theme fixes
[KiwiIRC.git] / client / src / views / channelinfo.js
CommitLineData
72db27e4
D
1// var f = new _kiwi.model.ChannelInfo({channel: _kiwi.app.panels().active});
2
3_kiwi.view.ChannelInfo = Backbone.View.extend({
4 events: {
5 'click .show_banlist': 'updateBanlist',
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'),
15 text = {
16 channel_name: channel.get('name')
17 };
18
19 this.$el = $(_.template($('#tmpl_channel_info').html().trim(), text));
20
21 // Create the menu box this view will sit inside
d4bcebc3 22 this.menu = new _kiwi.view.MenuBox(channel.get('name'));
72db27e4
D
23 this.menu.addItem('channel_info', this.$el);
24 this.menu.$el.appendTo(channel.view.$container);
25 this.menu.show();
26
63a887cd
D
27 this.menu.$el.offset({top: _kiwi.app.view.$el.find('.panels').offset().top});
28
72db27e4
D
29 // Menu box will call this destroy on closing
30 this.$el.dispose = _.bind(this.dispose, this);
31
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);
35
36 // Request the latest info for ths channel from the network
37 channel.get('network').gateway.channelInfo(channel.get('name'));
38 },
39
40
41 render: function () {
42 },
43
44
45 onModeChange: function(event) {
46 var $this = $(event.currentTarget),
47 channel = this.model.get('channel'),
48 mode = $this.data('mode'),
49 mode_string = '';
50
51 if ($this.attr('type') == 'checkbox') {
52 mode_string = $this.is(':checked') ? '+' : '-';
53 mode_string += mode;
54 channel.setMode(mode_string);
55
56 return;
57 }
58
59 if ($this.attr('type') == 'text') {
60 mode_string = $this.val() ?
61 '+' + mode + ' ' + $this.val() :
62 '-' + mode;
63
64 channel.setMode(mode_string);
65
66 return;
67 }
68 },
69
70
71 onRemoveBanClick: function (event) {
72 event.preventDefault();
73 event.stopPropagation();
74
75 var $this = $(event.currentTarget),
76 $tr = $this.parents('tr:first'),
77 ban = $tr.data('ban');
78
79 if (!ban)
80 return;
81
82 var channel = this.model.get('channel');
83 channel.setMode('-b ' + ban.banned);
84
85 $tr.remove();
86 },
87
88
89 updateInfo: function (channel, new_val) {
90 var that = this,
63a887cd
D
91 title, modes, url, banlist;
92
72db27e4
D
93 modes = channel.get('info_modes');
94 if (modes) {
95 _.each(modes, function(mode, idx) {
96 mode.mode = mode.mode.toLowerCase();
97
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');
108 }
109 });
110 }
111
112 url = channel.get('info_url');
113 if (url) {
63a887cd 114 this.$el.find('.channel_url')
72db27e4
D
115 .text(url)
116 .attr('href', url);
117
118 this.$el.find('.channel_url').slideDown();
119 }
120
121 banlist = channel.get('banlist');
122 if (banlist && banlist.length) {
63a887cd 123 var $table = this.$el.find('.channel-banlist table tbody');
72db27e4 124
19c15434
D
125 this.$el.find('.banlist-status').text('');
126
72db27e4
D
127 $table.empty();
128 _.each(banlist, function(ban) {
129 var $tr = $('<tr></tr>').data('ban', ban);
130
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);
135
136 $table.append($tr);
137 });
63a887cd
D
138
139 this.$el.find('.channel-banlist table').slideDown();
19c15434
D
140
141 } else {
142 this.$el.find('.banlist-status').text('Banlist empty');
143 this.$el.find('.channel-banlist table').hide();
72db27e4
D
144 }
145 },
146
147
148 updateBanlist: function (event) {
149 event.preventDefault();
150
151 var channel = this.model.get('channel'),
152 network = channel.get('network');
153
154 network.gateway.raw('MODE ' + channel.get('name') + ' +b');
155 },
156
157
158 dispose: function () {
159 this.model.get('channel').off('change:info_modes change:info_url change:banlist', this.updateInfo, this);
160
161 this.$el.remove();
162 }
163});