Switching the old RPC methods to the websocketrpc
[KiwiIRC.git] / client / src / models / memberlist.js
1 _kiwi.model.MemberList = Backbone.Collection.extend({
2 model: _kiwi.model.Member,
3 comparator: function (a, b) {
4 var i, a_modes, b_modes, a_idx, b_idx, a_nick, b_nick;
5 var user_prefixes = this.channel.get('network').get('user_prefixes');
6
7 a_modes = a.get("modes");
8 b_modes = b.get("modes");
9
10 // Try to sort by modes first
11 if (a_modes.length > 0) {
12 // a has modes, but b doesn't so a should appear first
13 if (b_modes.length === 0) {
14 return -1;
15 }
16 a_idx = b_idx = -1;
17 // Compare the first (highest) mode
18 for (i = 0; i < user_prefixes.length; i++) {
19 if (user_prefixes[i].mode === a_modes[0]) {
20 a_idx = i;
21 }
22 }
23 for (i = 0; i < user_prefixes.length; i++) {
24 if (user_prefixes[i].mode === b_modes[0]) {
25 b_idx = i;
26 }
27 }
28 if (a_idx < b_idx) {
29 return -1;
30 } else if (a_idx > b_idx) {
31 return 1;
32 }
33 // If we get to here both a and b have the same highest mode so have to resort to lexicographical sorting
34
35 } else if (b_modes.length > 0) {
36 // b has modes but a doesn't so b should appear first
37 return 1;
38 }
39 a_nick = a.get("nick").toLocaleUpperCase();
40 b_nick = b.get("nick").toLocaleUpperCase();
41 // Lexicographical sorting
42 if (a_nick < b_nick) {
43 return -1;
44 } else if (a_nick > b_nick) {
45 return 1;
46 } else {
47 return 0;
48 }
49 },
50 initialize: function (options) {
51 this.view = new _kiwi.view.MemberList({"model": this});
52 },
53 getByNick: function (nick) {
54 if (typeof nick !== 'string') return;
55 return this.find(function (m) {
56 return nick.toLowerCase() === m.get('nick').toLowerCase();
57 });
58 }
59 });