Merge pull request #315 from happytodesign/development
[KiwiIRC.git] / client / assets / src / models / 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 this.view = new _kiwi.view.Member({"model": this});
36 },
37 addMode: function (mode) {
38 var modes_to_add = mode.split(''),
39 modes, prefix;
40
41 modes = this.get("modes");
42 $.each(modes_to_add, function (index, item) {
43 modes.push(item);
44 });
45
46 modes = this.sortModes(modes);
47 this.set({"prefix": this.getPrefix(modes), "modes": modes});
48 this.isOp();
49
50 this.view.render();
51 },
52 removeMode: function (mode) {
53 var modes_to_remove = mode.split(''),
54 modes, prefix;
55
56 modes = this.get("modes");
57 modes = _.reject(modes, function (m) {
58 return (_.indexOf(modes_to_remove, m) !== -1);
59 });
60
61 this.set({"prefix": this.getPrefix(modes), "modes": modes});
62 this.isOp();
63
64 this.view.render();
65 },
66 getPrefix: function (modes) {
67 var prefix = '';
68 var user_prefixes = _kiwi.gateway.get('user_prefixes');
69
70 if (typeof modes[0] !== 'undefined') {
71 prefix = _.detect(user_prefixes, function (prefix) {
72 return prefix.mode === modes[0];
73 });
74 prefix = (prefix) ? prefix.symbol : '';
75 }
76 return prefix;
77 },
78 stripPrefix: function (nick) {
79 var tmp = nick, i, j, k;
80 var user_prefixes = _kiwi.gateway.get('user_prefixes');
81 i = 0;
82
83 for (j = 0; j < nick.length; j++) {
84 for (k = 0; k < user_prefixes.length; k++) {
85 if (nick.charAt(j) === user_prefixes[k].symbol) {
86 i++;
87 break;
88 }
89 }
90 }
91
92 return tmp.substr(i);
93 },
94 displayNick: function (full) {
95 var display = this.get('nick');
96
97 if (full) {
98 if (this.get("ident")) {
99 display += ' [' + this.get("ident") + '@' + this.get("hostname") + ']';
100 }
101 }
102
103 return display;
104 },
105 isOp: function () {
106 var user_prefixes = _kiwi.gateway.get('user_prefixes'),
107 modes = this.get('modes'),
108 o, max_mode;
109 if (modes.length > 0) {
110 o = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {
111 return prefix.mode === 'o';
112 }));
113 max_mode = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {
114 return prefix.mode === modes[0];
115 }));
116 if ((max_mode === -1) || (max_mode > o)) {
117 this.set({"is_op": false}, {silent: true});
118 } else {
119 this.set({"is_op": true}, {silent: true});
120 }
121 } else {
122 this.set({"is_op": false}, {silent: true});
123 }
124 }
125 });