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
= _kiwi
.gateway
.get('user_prefixes');
6 a_modes
= a
.get("modes");
7 b_modes
= b
.get("modes");
8 // Try to sort by modes first
9 if (a_modes
.length
> 0) {
10 // a has modes, but b doesn't so a should appear first
11 if (b_modes
.length
=== 0) {
15 // Compare the first (highest) mode
16 for (i
= 0; i
< user_prefixes
.length
; i
++) {
17 if (user_prefixes
[i
].mode
=== a_modes
[0]) {
21 for (i
= 0; i
< user_prefixes
.length
; i
++) {
22 if (user_prefixes
[i
].mode
=== b_modes
[0]) {
28 } else if (a_idx
> b_idx
) {
31 // If we get to here both a and b have the same highest mode so have to resort to lexicographical sorting
33 } else if (b_modes
.length
> 0) {
34 // b has modes but a doesn't so b should appear first
37 a_nick
= a
.get("nick").toLocaleUpperCase();
38 b_nick
= b
.get("nick").toLocaleUpperCase();
39 // Lexicographical sorting
40 if (a_nick
< b_nick
) {
42 } else if (a_nick
> b_nick
) {
48 initialize: function (options
) {
49 this.view
= new _kiwi
.view
.MemberList({"model": this});
51 getByNick: function (nick
) {
52 if (typeof nick
!== 'string') return;
53 return this.find(function (m
) {
54 return nick
.toLowerCase() === m
.get('nick').toLowerCase();