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