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('client_models_channel_join', {'%M': member
.getMemberMask(), '%T': translateText('client_models_channel_join'), '%C': 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('client_models_channel_quit', {'%M': member
.getMemberMask(), '%T': translateText('client_models_channel_quit', [msg
]), '%C': 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('client_models_channel_kicked', {'%M': member
.getMemberMask(), '%T': translateText('client_models_channel_kicked', [options
.kiwi
.by
, msg
]), '%C': name
}), 'action kick', {time
: options
.kiwi
.time
});
43 this.addMsg(' ', styleText('client_models_channel_selfkick', {'%T': translateText('client_models_channel_selfkick', [options
.kiwi
.by
, msg
]), '%C': name
}), 'action kick', {time
: options
.kiwi
.time
});
45 } else if (show_message
) {
46 this.addMsg(' ', styleText('client_models_channel_part', {'%M': member
.getMemberMask(), '%T': translateText('client_models_channel_part', [msg
]), '%C': name
}), 'action part', {time
: options
.kiwi
.time
});
53 addMsg: function (nick
, msg
, type
, opts
) {
54 var message_obj
, bs
, d
,
55 scrollback
= (parseInt(_kiwi
.global
.settings
.get('scrollback'), 10) || 250);
59 // Time defaults to now
60 if (typeof opts
.time
=== 'number') {
61 opts
.time
= new Date(opts
.time
);
63 opts
.time
= new Date();
66 // CSS style defaults to empty string
67 if (!opts
|| typeof opts
.style
=== 'undefined') {
71 // Run through the plugins
72 message_obj
= {"msg": msg
, "date": opts
.date
, "time": opts
.time
, "nick": nick
, "chan": this.get("name"), "type": type
, "style": opts
.style
};
73 //tmp = _kiwi.plugs.run('addmsg', message_obj);
78 // The CSS class (action, topic, notice, etc)
79 if (typeof message_obj
.type
!== "string") {
80 message_obj
.type
= '';
83 // Make sure we don't have NaN or something
84 if (typeof message_obj
.msg
!== "string") {
88 // Update the scrollback
89 bs
= this.get("scrollback");
93 // Keep the scrolback limited
94 if (bs
.length
> scrollback
) {
95 bs
.splice(scrollback
);
97 this.set({"scrollback": bs
}, {silent
: true});
100 this.trigger("msg", message_obj
);
104 clearMessages: function () {
105 this.set({'scrollback': []}, {silent
: true});
106 this.addMsg('', 'Window cleared');
112 setMode: function(mode_string
) {
113 this.get('network').gateway
.mode(this.get('name'), mode_string
);
116 isChannel: function() {