Add support for setting a chat room's topic

This commit is contained in:
JC Brand 2012-07-22 22:08:19 +02:00
parent df4c14826f
commit c48b1f2aeb

View File

@ -331,7 +331,7 @@ xmppchat.ChatBoxView = Backbone.View.extend({
'<div class="chat-head chat-head-chatbox">' + '<div class="chat-head chat-head-chatbox">' +
'<div class="chat-title"> <%= user_id %> </div>' + '<div class="chat-title"> <%= user_id %> </div>' +
'<a href="javascript:void(0)" class="chatbox-button close-chatbox-button">X</a>' + '<a href="javascript:void(0)" class="chatbox-button close-chatbox-button">X</a>' +
'<br clear="all"/>' + '<p class="user-custom-message"><p/>' +
'</div>' + '</div>' +
'<div class="chat-content"></div>' + '<div class="chat-content"></div>' +
'<form class="sendXMPPMessage" action="" method="post">' + '<form class="sendXMPPMessage" action="" method="post">' +
@ -559,16 +559,37 @@ xmppchat.ChatRoomView = xmppchat.ChatBoxView.extend({
} }
}, },
sendGroupMessage: function (text) { sendGroupMessage: function (body) {
this.last_msgid = xmppchat.connection.muc.groupchat(this.model.get('jid'), text); var match = body.replace(/^\s*/, "").match(/^\/(.*?)(?: (.*))?$/);
this.appendMessage(text); var args = null;
if (match) {
if (match[1] === "msg") {
// TODO: Private messages
} else if (match[1] === "topic") {
xmppchat.connection.muc.setTopic(this.model.get('jid'), match[2]);
} else if (match[1] === "kick") {
xmppchat.connection.muc.kick(this.model.get('jid'), match[2]);
} else if (match[1] === "ban") {
xmppchat.connection.muc.ban(this.model.get('jid'), match[2]);
} else if (match[1] === "op") {
xmppchat.connection.muc.op(this.model.get('jid'), match[2]);
} else if (match[1] === "deop") {
xmppchat.connection.muc.deop(this.model.get('jid'), match[2]);
}
} else {
this.last_msgid = xmppchat.connection.muc.groupchat(this.model.get('jid'), body);
}
}, },
template: _.template( template: _.template(
'<div class="chat-head chat-head-chatroom">' + '<div class="chat-head chat-head-chatroom">' +
'<div class="chat-title"> <%= name %> </div>' + '<div class="chat-title"> <%= name %> </div>' +
'<a href="javascript:void(0)" class="chatbox-button close-chatbox-button">X</a>' + '<a href="javascript:void(0)" class="chatbox-button close-chatbox-button">X</a>' +
'<br clear="all"/>' + '<p class="chatroom-topic"><p/>' +
'</div>' + '</div>' +
'<div>' + '<div>' +
'<div class="chat-area">' + '<div class="chat-area">' +
@ -620,16 +641,16 @@ xmppchat.ChatRoomView = xmppchat.ChatBoxView.extend({
}, },
onMessage: function (message) { onMessage: function (message) {
if ($(message).attr('id') === this.last_msgid) {
// Return if own message sent just now...
return true;
}
var body = $(message).children('body').text(), var body = $(message).children('body').text(),
jid = $(message).attr('from'), jid = $(message).attr('from'),
composing = $(message).find('composing'), composing = $(message).find('composing'),
$chat_content = $(this.el).find('.chat-content'), $chat_content = $(this.el).find('.chat-content'),
sender = Strophe.getResourceFromJid(jid); sender = Strophe.getResourceFromJid(jid),
subject = $(message).children('subject').text();
if (subject) {
this.$el.find('.chatroom-topic').text(subject);
}
if (!body) { if (!body) {
if (composing.length > 0) { if (composing.length > 0) {
this.insertStatusNotification('is typing'); this.insertStatusNotification('is typing');
@ -1291,13 +1312,13 @@ $(document).ready($.proxy(function () {
this.xmppstatus.sendPresence(); this.xmppstatus.sendPresence();
// Controlbox toggler // Controlbox toggler
$toggle.bind('click', function (e) { $toggle.bind('click', $.proxy(function (e) {
e.preventDefault(); e.preventDefault();
if ($("div#online-users-container").is(':visible')) { if ($("div#online-users-container").is(':visible')) {
this.chatboxesview.closeChat('online-users-container'); this.chatboxesview.closeChat('online-users-container');
} else { } else {
this.chatboxesview.openChat('online-users-container'); this.chatboxesview.openChat('online-users-container');
} }
}); }, this));
}, this)); }, this));
}, xmppchat)); }, xmppchat));