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');
7 a_modes
= a
.get("modes");
8 b_modes
= b
.get("modes");
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) {
17 // Compare the first (highest) mode
18 for (i
= 0; i
< user_prefixes
.length
; i
++) {
19 if (user_prefixes
[i
].mode
=== a_modes
[0]) {
23 for (i
= 0; i
< user_prefixes
.length
; i
++) {
24 if (user_prefixes
[i
].mode
=== b_modes
[0]) {
30 } else if (a_idx
> b_idx
) {
33 // If we get to here both a and b have the same highest mode so have to resort to lexicographical sorting
35 } else if (b_modes
.length
> 0) {
36 // b has modes but a doesn't so b should appear first
39 a_nick
= a
.get("nick").toLocaleUpperCase();
40 b_nick
= b
.get("nick").toLocaleUpperCase();
41 // Lexicographical sorting
42 if (a_nick
< b_nick
) {
44 } else if (a_nick
> b_nick
) {
50 initialize: function (options
) {
51 this.view
= new _kiwi
.view
.MemberList({"model": this});
53 getByNick: function (nick
) {
54 if (typeof nick
!== 'string') return;
55 return this.find(function (m
) {
56 return nick
.toLowerCase() === m
.get('nick').toLowerCase();