Commit | Line | Data |
---|---|---|
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 | }); |