Merge branch 'fixes' of https://github.com/CoryChaplin/KiwiIRC into CoryChaplin-fixes
[KiwiIRC.git] / client / src / models / member.js
CommitLineData
eaaf73b0 1_kiwi.model.Member = Backbone.Model.extend({\r
9df70c63
D
2 sortModes: function (modes) {\r
3 return modes.sort(function (a, b) {\r
4 var a_idx, b_idx, i;\r
eaaf73b0 5 var user_prefixes = _kiwi.gateway.get('user_prefixes');\r
9df70c63
D
6\r
7 for (i = 0; i < user_prefixes.length; i++) {\r
8 if (user_prefixes[i].mode === a) {\r
9 a_idx = i;\r
10 }\r
11 }\r
12 for (i = 0; i < user_prefixes.length; i++) {\r
13 if (user_prefixes[i].mode === b) {\r
14 b_idx = i;\r
15 }\r
16 }\r
17 if (a_idx < b_idx) {\r
18 return -1;\r
19 } else if (a_idx > b_idx) {\r
20 return 1;\r
21 } else {\r
22 return 0;\r
23 }\r
24 });\r
25 },\r
26 initialize: function (attributes) {\r
27 var nick, modes, prefix;\r
28 nick = this.stripPrefix(this.get("nick"));\r
29\r
30 modes = this.get("modes");\r
31 modes = modes || [];\r
32 this.sortModes(modes);\r
33 this.set({"nick": nick, "modes": modes, "prefix": this.getPrefix(modes)}, {silent: true});\r
062bae80 34 this.isOp();\r
aa4f5ba5 35 this.view = new _kiwi.view.Member({"model": this});\r
9df70c63
D
36 },\r
37 addMode: function (mode) {\r
38 var modes_to_add = mode.split(''),\r
39 modes, prefix;\r
40\r
41 modes = this.get("modes");\r
42 $.each(modes_to_add, function (index, item) {\r
43 modes.push(item);\r
44 });\r
70e6f698 45\r
9df70c63
D
46 modes = this.sortModes(modes);\r
47 this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
062bae80 48 this.isOp();\r
70e6f698
D
49\r
50 this.view.render();\r
9df70c63
D
51 },\r
52 removeMode: function (mode) {\r
53 var modes_to_remove = mode.split(''),\r
54 modes, prefix;\r
55\r
56 modes = this.get("modes");\r
57 modes = _.reject(modes, function (m) {\r
c4fc06f6 58 return (_.indexOf(modes_to_remove, m) !== -1);\r
9df70c63
D
59 });\r
60\r
61 this.set({"prefix": this.getPrefix(modes), "modes": modes});\r
062bae80 62 this.isOp();\r
70e6f698
D
63\r
64 this.view.render();\r
9df70c63
D
65 },\r
66 getPrefix: function (modes) {\r
67 var prefix = '';\r
eaaf73b0 68 var user_prefixes = _kiwi.gateway.get('user_prefixes');\r
9df70c63
D
69\r
70 if (typeof modes[0] !== 'undefined') {\r
71 prefix = _.detect(user_prefixes, function (prefix) {\r
72 return prefix.mode === modes[0];\r
73 });\r
74 prefix = (prefix) ? prefix.symbol : '';\r
75 }\r
76 return prefix;\r
77 },\r
78 stripPrefix: function (nick) {\r
03bb4301 79 var tmp = nick, i, j, k, nick_char;\r
eaaf73b0 80 var user_prefixes = _kiwi.gateway.get('user_prefixes');\r
9df70c63
D
81 i = 0;\r
82\r
03bb4301 83 nick_character_loop:\r
9df70c63 84 for (j = 0; j < nick.length; j++) {\r
03bb4301 85 nick_char = nick.charAt(j);\r
9df70c63 86 for (k = 0; k < user_prefixes.length; k++) {\r
03bb4301 87 if (nick_char === user_prefixes[k].symbol) {\r
9df70c63 88 i++;\r
03bb4301 89 continue nick_character_loop;\r
9df70c63
D
90 }\r
91 }\r
5b380fee 92 break;\r
9df70c63
D
93 }\r
94\r
95 return tmp.substr(i);\r
96 },\r
97 displayNick: function (full) {\r
98 var display = this.get('nick');\r
99\r
100 if (full) {\r
101 if (this.get("ident")) {\r
102 display += ' [' + this.get("ident") + '@' + this.get("hostname") + ']';\r
103 }\r
104 }\r
105\r
106 return display;\r
062bae80
JA
107 },\r
108 isOp: function () {\r
109 var user_prefixes = _kiwi.gateway.get('user_prefixes'),\r
110 modes = this.get('modes'),\r
111 o, max_mode;\r
112 if (modes.length > 0) {\r
113 o = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {\r
114 return prefix.mode === 'o';\r
115 }));\r
116 max_mode = _.indexOf(user_prefixes, _.find(user_prefixes, function (prefix) {\r
117 return prefix.mode === modes[0];\r
118 }));\r
119 if ((max_mode === -1) || (max_mode > o)) {\r
120 this.set({"is_op": false}, {silent: true});\r
121 } else {\r
122 this.set({"is_op": true}, {silent: true});\r
123 }\r
124 } else {\r
125 this.set({"is_op": false}, {silent: true});\r
126 }\r
9df70c63
D
127 }\r
128});