c3d2-web/content/static/candy/plugins/typingnotifications/typingnotifications.js

56 lines
1.9 KiB
JavaScript

/** File: typingnotifications.js
* Candy Plugin Typing Notifications
* Author: Melissa Adamaitis <madamei@mojolingo.com>
*/
var CandyShop = (function(self) { return self; }(CandyShop || {}));
CandyShop.TypingNotifications = (function(self, Candy, $) {
/** Object: about
*
* Contains:
* (String) name - Candy Plugin Typing Notifications
* (Float) version - Candy Plugin Typing Notifications
*/
self.about = {
name: 'Candy Plugin Typing Notifications',
version: '1.0'
};
/**
* Initializes the Typing Notifications plugin with the default settings.
*/
self.init = function(){
// After a room is added, make sure to tack on a little div that we can put the typing notification into.
$(Candy).on('candy:view.private-room.after-open', function(ev, obj){
self.addTypingNotificationDiv(obj);
});
// When a typing notification is recieved, display it.
$(Candy).on('candy:core.message.chatstate', function(ev, obj) {
var pane, chatstate_string;
pane = Candy.View.Pane.Room.getPane(obj.roomJid);
chatstate_string = self.getChatstateString(obj.chatstate, obj.name);
$(pane).find('.typing-notification-area').html(chatstate_string);
return true;
});
};
self.getChatstateString = function(chatstate, name) {
switch (chatstate) {
case 'paused': return name + ' has entered text.';
case 'inactive': return name + ' is away from the window.';
case 'composing': return name + ' is composing...';
case 'gone': return name + ' has closed the window.';
default: return '';
}
};
self.addTypingNotificationDiv = function(obj){
var pane_html = Candy.View.Pane.Room.getPane(obj.roomJid),
typing_notification_div_html = '<div class="typing-notification-area"></div>';
$(pane_html).find('.message-form-wrapper').append(typing_notification_div_html);
};
return self;
}(CandyShop.TypingNotifications || {}, Candy, jQuery));