2 // TODO: Listen to gateway events for anythign related to this channel
3 _kiwi
.model
.Channel
= _kiwi
.model
.Panel
.extend({
4 initialize: function (attributes
) {
5 var name
= this.get("name") || "",
9 "members": new _kiwi
.model
.MemberList(),
15 this.view
= new _kiwi
.view
.Channel({"model": this, "name": name
});
17 members
= this.get("members");
18 members
.channel
= this;
19 members
.bind("add", function (member
, members
, options
) {
20 var show_message
= _kiwi
.global
.settings
.get('show_joins_parts');
21 if (show_message
=== false) {
25 this.addMsg(' ', styleText('channel_join', {member
: member
.getMaskParts(), text
: translateText('client_models_channel_join'), channel
: name
}), 'action join', {time
: options
.kiwi
.time
});
28 members
.bind("remove", function (member
, members
, options
) {
29 var show_message
= _kiwi
.global
.settings
.get('show_joins_parts');
30 var msg
= (options
.kiwi
.message
) ? '(' + options
.kiwi
.message
+ ')' : '';
32 if (options
.kiwi
.type
=== 'quit' && show_message
) {
33 this.addMsg(' ', styleText('channel_quit', {member
: member
.getMaskParts(), text
: translateText('client_models_channel_quit', [msg
]), channel
: name
}), 'action quit', {time
: options
.kiwi
.time
});
35 } else if (options
.kiwi
.type
=== 'kick') {
37 if (!options
.kiwi
.current_user_kicked
) {
38 //If user kicked someone, show the message regardless of settings.
39 if (show_message
|| options
.kiwi
.current_user_initiated
) {
40 this.addMsg(' ', styleText('channel_kicked', {member
: member
.getMaskParts(), text
: translateText('client_models_channel_kicked', [options
.kiwi
.by
, msg
]), channel
: name
}), 'action kick', {time
: options
.kiwi
.time
});
43 this.addMsg(' ', styleText('channel_selfkick', {text
: translateText('client_models_channel_selfkick', [options
.kiwi
.by
, msg
]), channel
: name
}), 'action kick', {time
: options
.kiwi
.time
});
45 } else if (show_message
) {
46 this.addMsg(' ', styleText('channel_part', {member
: member
.getMaskParts(), text
: translateText('client_models_channel_part', [msg
]), channel
: name
}), 'action part', {time
: options
.kiwi
.time
});
51 _kiwi
.global
.events
.emit('panel:created', {panel
: this});
55 addMsg: function (nick
, msg
, type
, opts
) {
56 var message_obj
, bs
, d
, members
, member
,
57 scrollback
= (parseInt(_kiwi
.global
.settings
.get('scrollback'), 10) || 250);
61 // Time defaults to now
62 if (typeof opts
.time
=== 'number') {
63 opts
.time
= new Date(opts
.time
);
65 opts
.time
= new Date();
68 // CSS style defaults to empty string
69 if (!opts
|| typeof opts
.style
=== 'undefined') {
73 // Create a message object
74 message_obj
= {"msg": msg
, "date": opts
.date
, "time": opts
.time
, "nick": nick
, "chan": this.get("name"), "type": type
, "style": opts
.style
};
76 // If this user has one, get its prefix
77 members
= this.get('members');
79 member
= members
.getByNick(message_obj
.nick
);
81 message_obj
.nick_prefix
= member
.get('prefix');
85 // The CSS class (action, topic, notice, etc)
86 if (typeof message_obj
.type
!== "string") {
87 message_obj
.type
= '';
90 // Make sure we don't have NaN or something
91 if (typeof message_obj
.msg
!== "string") {
95 // Update the scrollback
96 bs
= this.get("scrollback");
100 // Keep the scrolback limited
101 if (bs
.length
> scrollback
) {
102 bs
= _
.last(bs
, scrollback
);
104 this.set({"scrollback": bs
}, {silent
: true});
107 this.trigger("msg", message_obj
);
111 clearMessages: function () {
112 this.set({'scrollback': []}, {silent
: true});
113 this.addMsg('', 'Window cleared');
119 setMode: function(mode_string
) {
120 this.get('network').gateway
.mode(this.get('name'), mode_string
);
123 isChannel: function() {