var connection = null; function log(msg) { console.log(msg); } function rawInput(data) { log('RECV: ' + data); } function rawOutput(data) { log('SENT: ' + data); } function onConnect(status) { if (status === Strophe.Status.CONNECTING) { log('Strophe is connecting.'); } else if (status === Strophe.Status.CONNFAIL) { log('Strophe failed to connect.'); } else if (status === Strophe.Status.DISCONNECTING) { log('Strophe is disconnecting.'); } else if (status === Strophe.Status.DISCONNECTED) { log('Strophe is disconnected.'); } else if (status === Strophe.Status.CONNECTED) { log('Strophe is connected.'); } else if (status === Strophe.Status.ATTACHED) { log('Strophe is attached.'); connection.send($pres().c("priority").t("100")); connection.play_sounds = true; connection.addHandler(onMessage, null, 'message', null, null, null); } } function onMessage(msg) { var to = msg.getAttribute('to'); var from = msg.getAttribute('from'); var type = msg.getAttribute('type'); var elems = msg.getElementsByTagName('body'); if (type == "chat" && elems.length > 0) { // var body = elems[0]; // log('ECHOBOT: I got a message from ' + from + ': ' + // Strophe.getText(body)); // var count = $('#messages_count').text(); // count++; // $('#messages_count').text(count); // if(count > 0) { // $('#messages_count').show(); // } else { // $('#messages_count').hide(); // } if($('.message_reply:visible').length == 0) { playNotification(); updateMessages(); } } else if (type == "error" && elems.length > 0) { $.globalEval($("
").html(Strophe.getText(elems[0])).text()); } // we must return true to keep the handler alive. // returning false would remove it after it finishes. return true; } function updateMessages(id) { id = typeof id !== 'undefined' ? id : false; $('#messages_holder').load('/messages/update'); if(id) { $('.messge_' + id).removeClass('unread'); } } function playNotification() { var audio; if (connection.play_sounds && typeof Audio !== "undefined"){ audio = new Audio("/sounds/msg_received.ogg"); if (audio.canPlayType('/audio/ogg')) { audio.play(); } else { audio = new Audio("/sounds/msg_received.mp3"); audio.play(); } } } catchOutsideClick = function(){ $(document).one('mouseup', function (e) { var container = $('#messages_container'); if (!container.is(e.target) // if the target of the click isn't the container... && container.has(e.target).length === 0) // ... nor a descendant of the container { $('.message_reply:visible').remove(); container.hide(); } else { catchOutsideClick(); } }); } markAsRead = function(ids) { if(!Array.isArray(ids)) return; $.each(ids, function(key, id){ //$('.message_' + id).removeClass('unread'); }); } jQuery(function($) { $('#main_menu_top a.letter').click(function(){ if($('#messages_count').text() > 0) { catchOutsideClick(); $('#messages_container').show(); return false; } return true; }); $('#messages_container .footer a.button').click(function(){ $('.message_reply:visible').remove(); $('#messages_container').hide(); return false; }); $('#messages_container').on('click', 'a.close', function(){ $.ajax({ type: "POST", url: '/messages/mark_as_read', data: {ids: [$(this).closest('.message').data('id')]}, success: function() { //$('#messages_container').hide(); //updateMessages(); } }); return false; }); $('#messages_container').on('click', '.message', function(e){ if(e.target.tagName.toUpperCase() === 'A') return true; if($(this).hasClass('message_reply')) return false; $('.message_reply:visible').remove(); var $reply = $('.message_reply').clone().show(); $reply.find('input').val($(this).data('id')); $(this).after($reply); return false; }); $('#messages_container').on('click', '.message_reply a.button', function(){ var $form = $(this).closest('form'); if($.trim($form.find('textarea').val()) == '') return false; if($form.find('input').val() == 0) return false; $.ajax({ type: "POST", url: $form.attr('action'), data: $form.serialize(), success: function() { $('#messages_container').hide(); updateMessages(); } }); return false; }); });