Place to store the code and config used for the next-Iterations live event. https://iterations.space/live/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

126 lines
4.7 KiB

// TODO: Channel modes
// TODO: Listen to gateway events for anythign related to this channel
_kiwi.model.Channel = _kiwi.model.Panel.extend({
initialize: function (attributes) {
var name = this.get("name") || "",
members;
this.set({
"members": new _kiwi.model.MemberList(),
"name": name,
"scrollback": [],
"topic": ""
}, {"silent": true});
this.view = new _kiwi.view.Channel({"model": this, "name": name});
members = this.get("members");
members.channel = this;
members.bind("add", function (member, members, options) {
var show_message = _kiwi.global.settings.get('show_joins_parts');
if (show_message === false) {
return;
}
this.addMsg(' ', styleText('channel_join', {member: member.getMaskParts(), text: translateText('client_models_channel_join'), channel: name}), 'action join', {time: options.kiwi.time});
}, this);
members.bind("remove", function (member, members, options) {
var show_message = _kiwi.global.settings.get('show_joins_parts');
var msg = (options.kiwi.message) ? '(' + options.kiwi.message + ')' : '';
if (options.kiwi.type === 'quit' && show_message) {
this.addMsg(' ', styleText('channel_quit', {member: member.getMaskParts(), text: translateText('client_models_channel_quit', [msg]), channel: name}), 'action quit', {time: options.kiwi.time});
} else if (options.kiwi.type === 'kick') {
if (!options.kiwi.current_user_kicked) {
//If user kicked someone, show the message regardless of settings.
if (show_message || options.kiwi.current_user_initiated) {
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});
}
} else {
this.addMsg(' ', styleText('channel_selfkick', {text: translateText('client_models_channel_selfkick', [options.kiwi.by, msg]), channel: name}), 'action kick', {time: options.kiwi.time});
}
} else if (show_message) {
this.addMsg(' ', styleText('channel_part', {member: member.getMaskParts(), text: translateText('client_models_channel_part', [msg]), channel: name}), 'action part', {time: options.kiwi.time});
}
}, this);
_kiwi.global.events.emit('panel:created', {panel: this});
},
addMsg: function (nick, msg, type, opts) {
var message_obj, bs, d, members, member,
scrollback = (parseInt(_kiwi.global.settings.get('scrollback'), 10) || 250);
opts = opts || {};
// Time defaults to now
if (typeof opts.time === 'number') {
opts.time = new Date(opts.time);
} else {
opts.time = new Date();
}
// CSS style defaults to empty string
if (!opts || typeof opts.style === 'undefined') {
opts.style = '';
}
// Create a message object
message_obj = {"msg": msg, "date": opts.date, "time": opts.time, "nick": nick, "chan": this.get("name"), "type": type, "style": opts.style};
// If this user has one, get its prefix
members = this.get('members');
if (members) {
member = members.getByNick(message_obj.nick);
if (member) {
message_obj.nick_prefix = member.get('prefix');
}
}
// The CSS class (action, topic, notice, etc)
if (typeof message_obj.type !== "string") {
message_obj.type = '';
}
// Make sure we don't have NaN or something
if (typeof message_obj.msg !== "string") {
message_obj.msg = '';
}
// Update the scrollback
bs = this.get("scrollback");
if (bs) {
bs.push(message_obj);
// Keep the scrolback limited
if (bs.length > scrollback) {
bs = _.takeRight(bs, scrollback);
}
this.set({"scrollback": bs}, {silent: true});
}
this.trigger("msg", message_obj);
},
clearMessages: function () {
this.set({'scrollback': []}, {silent: true});
this.addMsg('', 'Window cleared');
this.view.render();
},
setMode: function(mode_string) {
this.get('network').gateway.mode(this.get('name'), mode_string);
},
isChannel: function() {
return true;
}
});