ControlInput updating nick view properly
[KiwiIRC.git] / client / assets / dev / model_member.js
1 _kiwi.model.Member = Backbone.Model.extend({
2 sortModes: function (modes) {
3 return modes.sort(function (a, b) {
4 var a_idx, b_idx, i;
5 var user_prefixes = _kiwi.gateway.get('user_prefixes');
6
7 for (i = 0; i < user_prefixes.length; i++) {
8 if (user_prefixes[i].mode === a) {
9 a_idx = i;
10 }
11 }
12 for (i = 0; i < user_prefixes.length; i++) {
13 if (user_prefixes[i].mode === b) {
14 b_idx = i;
15 }
16 }
17 if (a_idx < b_idx) {
18 return -1;
19 } else if (a_idx > b_idx) {
20 return 1;
21 } else {
22 return 0;
23 }
24 });
25 },
26 initialize: function (attributes) {
27 var nick, modes, prefix;
28 nick = this.stripPrefix(this.get("nick"));
29
30 modes = this.get("modes");
31 modes = modes || [];
32 this.sortModes(modes);
33 this.set({"nick": nick, "modes": modes, "prefix": this.getPrefix(modes)}, {silent: true});
34 this.isOp();
35 },
36 addMode: function (mode) {
37 var modes_to_add = mode.split(''),
38 modes, prefix;
39
40 modes = this.get("modes");
41 $.each(modes_to_add, function (index, item) {
42 modes.push(item);
43 });
44
45 modes = this.sortModes(modes);
46 this.set({"prefix": this.getPrefix(modes), "modes": modes});
47 this.isOp();
48 },
49 removeMode: function (mode) {
50 var modes_to_remove = mode.split(''),
51 modes, prefix;
52
53 modes = this.get("modes");
54 modes = _.reject(modes, function (m) {
55 return (_.indexOf(modes_to_remove, m) !== -1);
56 });
57
58 this.set({"prefix": this.getPrefix(modes), "modes": modes});
59 this.isOp();
60 },
61 getPrefix: function (modes) {
62 var prefix = '';
63 var user_prefixes = _kiwi.gateway.get('user_prefixes');
64
65 if (typeof modes[0] !== 'undefined') {
66 prefix = _.detect(user_prefixes, function (prefix) {
67 return prefix.mode === modes[0];
68 });
69 prefix = (prefix) ? prefix.symbol : '';
70 }
71 return prefix;
72 },
73 stripPrefix: function (nick) {
74 var tmp = nick, i, j, k;
75 var user_prefixes = _kiwi.gateway.get('user_prefixes');
76 i = 0;
77
78 for (j = 0; j < nick.length; j++) {
79 for (k = 0; k < user_prefixes.length; k++) {
80 if (nick.charAt(j) === user_prefixes[k].symbol) {
81 i++;
82 break;
83 }
84 }
85 }
86
87 return tmp.substr(i);
88 },
89 displayNick: function (full) {
90 var display = this.get('nick');
91
92 if (full) {
93 if (this.get("ident")) {
94 display += ' [' + this.get("ident") + '@' + this.get("hostname") + ']';
95 }
96 }
97
98 return display;
99 },
100 isOp: function () {
101 var user_prefixes = _kiwi.gateway.get('user_prefixes'),
102 modes = this.get('modes'),
103 o, max_mode;
104 if (modes.length > 0) {
105 o = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {
106 return prefix.mode === 'o';
107 }));
108 max_mode = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {
109 return prefix.mode === modes[0];
110 }));
111 if ((max_mode === -1) || (max_mode > o)) {
112 this.set({"is_op": false}, {silent: true});
113 } else {
114 this.set({"is_op": true}, {silent: true});
115 }
116 } else {
117 this.set({"is_op": false}, {silent: true});
118 }
119 }
120 });