XSS fix in channel linking (courtesy of dispols)
[KiwiIRC.git] / client / src / views / userbox.js
CommitLineData
50ac472f
D
1_kiwi.view.UserBox = Backbone.View.extend({
2 events: {
3 'click .query': 'queryClick',
4 'click .info': 'infoClick',
a938bce3
D
5 'change .ignore': 'ignoreChange',
6 'click .ignore': 'ignoreClick',
50ac472f
D
7 'click .op': 'opClick',
8 'click .deop': 'deopClick',
9 'click .voice': 'voiceClick',
10 'click .devoice': 'devoiceClick',
11 'click .kick': 'kickClick',
12 'click .ban': 'banClick'
13 },
14
15 initialize: function () {
0d29c21f 16 var text = {
247dd7ac
N
17 op: _kiwi.global.i18n.translate('client_views_userbox_op').fetch(),
18 de_op: _kiwi.global.i18n.translate('client_views_userbox_deop').fetch(),
19 voice: _kiwi.global.i18n.translate('client_views_userbox_voice').fetch(),
20 de_voice: _kiwi.global.i18n.translate('client_views_userbox_devoice').fetch(),
21 kick: _kiwi.global.i18n.translate('client_views_userbox_kick').fetch(),
22 ban: _kiwi.global.i18n.translate('client_views_userbox_ban').fetch(),
23 message: _kiwi.global.i18n.translate('client_views_userbox_query').fetch(),
24 info: _kiwi.global.i18n.translate('client_views_userbox_whois').fetch(),
a938bce3 25 ignore: _kiwi.global.i18n.translate('client_views_userbox_ignore').fetch()
0d29c21f
JA
26 };
27 this.$el = $(_.template($('#tmpl_userbox').html().trim(), text));
50ac472f
D
28 },
29
d62fa271
D
30 setTargets: function (user, channel) {
31 this.user = user;
32 this.channel = channel;
a938bce3
D
33
34 var is_ignored = _kiwi.app.connections.active_connection.isNickIgnored(this.user.get('nick'));
35 this.$('.ignore input').attr('checked', is_ignored ? 'checked' : false);
d62fa271
D
36 },
37
38 displayOpItems: function(display_items) {
39 if (display_items) {
40 this.$el.find('.if_op').css('display', 'block');
41 } else {
42 this.$el.find('.if_op').css('display', 'none');
43 }
44 },
45
50ac472f 46 queryClick: function (event) {
d62fa271 47 var panel = new _kiwi.model.Query({name: this.user.get('nick')});
50ac472f
D
48 _kiwi.app.connections.active_connection.panels.add(panel);
49 panel.view.show();
50 },
51
52 infoClick: function (event) {
d62fa271 53 _kiwi.app.controlbox.processInput('/whois ' + this.user.get('nick'));
50ac472f
D
54 },
55
a938bce3
D
56 ignoreClick: function (event) {
57 // Stop the menubox from closing since it will not update the checkbox otherwise
58 event.stopPropagation();
59 },
60
61 ignoreChange: function (event) {
62 if ($(event.currentTarget).find('input').is(':checked')) {
63 _kiwi.app.controlbox.processInput('/ignore ' + this.user.get('nick'));
64 } else {
65 _kiwi.app.controlbox.processInput('/unignore ' + this.user.get('nick'));
66 }
50ac472f
D
67 },
68
69 opClick: function (event) {
d62fa271 70 _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +o ' + this.user.get('nick'));
50ac472f
D
71 },
72
73 deopClick: function (event) {
d62fa271 74 _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' -o ' + this.user.get('nick'));
50ac472f
D
75 },
76
77 voiceClick: function (event) {
d62fa271 78 _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +v ' + this.user.get('nick'));
50ac472f
D
79 },
80
81 devoiceClick: function (event) {
d62fa271 82 _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' -v ' + this.user.get('nick'));
50ac472f
D
83 },
84
85 kickClick: function (event) {
86 // TODO: Enable the use of a custom kick message
d62fa271 87 _kiwi.app.controlbox.processInput('/kick ' + this.user.get('nick') + ' Bye!');
50ac472f
D
88 },
89
90 banClick: function (event) {
91 // TODO: Set ban on host, not just on nick
d62fa271 92 _kiwi.app.controlbox.processInput('/mode ' + this.channel.get('name') + ' +b ' + this.user.get('nick') + '!*');
50ac472f
D
93 }
94});