diff --git a/public/css/style.less b/public/css/style.less index 5cb9d0b0ff..5da5d4be06 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -733,4 +733,13 @@ body .navbar .nodebb-inline-block { font-size: 12px; color: red; } +} + +#chat-content { + width:95%; + height:200px; +} + +#chat-message-input { + width:95%; } \ No newline at end of file diff --git a/public/templates/admin/users.tpl b/public/templates/admin/users.tpl index 4d8df6ca3e..3f181571be 100644 --- a/public/templates/admin/users.tpl +++ b/public/templates/admin/users.tpl @@ -16,7 +16,7 @@
- +
{users.username} diff --git a/public/templates/footer.tpl b/public/templates/footer.tpl index 75d4086dce..c21eb5599f 100644 --- a/public/templates/footer.tpl +++ b/public/templates/footer.tpl @@ -81,7 +81,6 @@ } }); - // Post window events var postWindowEl = document.getElementById('post_window'), discardEl = document.getElementById('discard-post'); diff --git a/public/templates/header.tpl b/public/templates/header.tpl index 0a2caf095e..05d604b7d5 100644 --- a/public/templates/header.tpl +++ b/public/templates/header.tpl @@ -90,6 +90,18 @@
+ +
\ No newline at end of file diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index cef7b2a962..3e6eaa064c 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -52,7 +52,7 @@ -
  • +
  • @@ -66,6 +66,7 @@
    {posts.signature}
    +
    @@ -191,6 +192,7 @@ e.preventDefault(); moveThreadModal.modal('show'); }, false); + moveThreadModal.on('shown', function() { var loadingEl = document.getElementById('categories-loading'); if (loadingEl) { @@ -291,6 +293,79 @@ } }); + // CHAT, move to chat.js later? + + $('.post-container').delegate('.chat', 'click', function(e){ + + var username = $(this).parents('li').attr('data-username'); + var touid = $(this).parents('li').attr('data-uid'); + + var chatModal = $('#chat-modal-'+touid); + console.log($('#chat-modal-'+touid).length); + console.log('#chat-modal-'+touid); + if(!chatModal.length) { + var chatModal = $('#chat-modal').clone(); + chatModal.attr('id','#chat-modal-'+touid); + chatModal.appendTo($('body')); + chatModal.find('.close').on('click',function(e){ + chatModal.hide(); + }); + } + + chatModal.show(); + + chatModal.find('#chat-with-name').html(username); + + //addSendHandler(touid); + + }); + + $('#chat-modal').on('hide', function(){ + $('#chat-message-input').off('keypress'); + $('#chat-content').html(''); + }); + + socket.on('chatMessage', function(data){ + var username = data.username; + var fromuid = data.fromuid; + var message = data.message; + + $('#chat-modal').modal('show'); + $('#chat-with-name').html(username); + $('#chat-content').append(message); + + var chatContent = $('#chat-content'); + chatContent.scrollTop( + chatContent[0].scrollHeight - chatContent.height() + ); + + addSendHandler(fromuid); + }); + + function addSendHandler(touid) { + $('#chat-message-input').off('keypress'); + $('#chat-message-input').on('keypress', function(e) { + if(e.which === 13) { + sendMessage(touid); + } + }); + + $('#chat-message-send-btn').off('click'); + $('#chat-message-send-btn').on('click', function(e){ + sendMessage(touid); + return false; + }); + } + + function sendMessage(touid) { + var msg = $('#chat-message-input').val() + '\n'; + socket.emit('sendChatMessage', { touid:touid, message:msg}); + $('#chat-message-input').val(''); + $('#chat-content').append('You : '+ msg); + } + //end of chat + + ajaxify.register_events([ 'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room', 'event:topic_deleted', 'event:topic_restored', 'event:topic:locked', @@ -299,6 +374,7 @@ 'api:posts.favourite' ]); + socket.on('api:get_users_in_room', function(users) { var anonymous = users.anonymous, usernames = users.usernames, diff --git a/src/websockets.js b/src/websockets.js index 502bea880a..aff4cb4fd3 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -10,7 +10,8 @@ var SocketIO = require('socket.io').listen(global.server,{log:false}), (function(io) { var users = {}, - rooms = {} + userSockets = {}, + rooms = {} global.io = io; @@ -48,6 +49,7 @@ var SocketIO = require('socket.io').listen(global.server,{log:false}), var hs = socket.handshake; var uid = users[hs.sessionID]; + userSockets[uid] = socket; user.go_online(uid); @@ -233,6 +235,19 @@ var SocketIO = require('socket.io').listen(global.server,{log:false}), socket.on('api:posts.restore', function(data) { posts.restore(uid, data.pid); }); + + socket.on('sendChatMessage', function(data) { + var touid = data.touid; + + if(userSockets[touid]) { + var msg = data.message; + + user.getUserField(uid, 'username', function(username) { + var finalMessage = username + ' says : ' + msg; + userSockets[touid].emit('chatMessage', {fromuid:uid, username:username, message:finalMessage}); + }); + } + }); }); }(SocketIO));