From 276031cd6ff554a98287c5eacf58a6f8ddce7a51 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 25 Aug 2016 16:05:02 +0300 Subject: [PATCH] closes #4585, closes https://github.com/NodeBB/nodebb-theme-persona/issues/299 --- public/src/app.js | 4 ++-- public/src/modules/chat.js | 5 ++--- src/messaging.js | 30 ++++++++++++++++-------------- src/messaging/rooms.js | 18 ++++++++++++++++++ 4 files changed, 38 insertions(+), 19 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 66257e7980..e66d0d03c2 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -189,12 +189,12 @@ app.cacheBuster = null; } } - app.createUserTooltips = function(els) { + app.createUserTooltips = function(els, placement) { els = els || $('body'); els.find('.avatar,img[title].teaser-pic,img[title].user-img,div.user-icon,span.user-icon').each(function() { if (!utils.isTouchDevice()) { $(this).tooltip({ - placement: 'top', + placement: placement || $(this).attr('title-placement') || 'top', title: $(this).attr('title') }); } diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js index 445b4212e4..8e0b435434 100644 --- a/public/src/modules/chat.js +++ b/public/src/modules/chat.js @@ -113,13 +113,12 @@ define('chat', [ return room.teaser; }); - chatsListEl.empty(); - templates.parse('partials/chat_dropdown', { rooms: rooms }, function(html) { translator.translate(html, function(translated) { - chatsListEl.html(translated); + chatsListEl.empty().html(translated); + app.createUserTooltips(chatsListEl, 'right'); }); }); }); diff --git a/src/messaging.js b/src/messaging.js index 1ce4160d62..b17bea6ec2 100644 --- a/src/messaging.js +++ b/src/messaging.js @@ -242,6 +242,9 @@ var async = require('async'), } async.parallel({ + roomData: function(next) { + Messaging.getRoomsData(roomIds, next); + }, unread: function(next) { db.isSortedSetMembers('uid:' + uid + ':chat:rooms:unread', roomIds, next); }, @@ -254,7 +257,7 @@ var async = require('async'), uids = uids.filter(function(value) { return value && parseInt(value, 10) !== parseInt(uid, 10); }); - user.getUsersFields(uids, ['uid', 'username', 'picture', 'status', 'lastonline'] , next); + user.getUsersFields(uids, ['uid', 'username', 'userslug', 'picture', 'status', 'lastonline'] , next); }); }, next); }, @@ -267,29 +270,28 @@ var async = require('async'), if (err) { return callback(err); } - var rooms = results.users.map(function(users, index) { - var data = { - users: users, - unread: results.unread[index], - roomId: roomIds[index], - teaser: results.teasers[index] - }; - data.users.forEach(function(userData) { + + results.roomData.forEach(function(room, index) { + room.users = results.users[index]; + room.unread = results.unread[index]; + room.teaser = results.teasers[index]; + + room.users.forEach(function(userData) { if (userData && parseInt(userData.uid, 10)) { userData.status = user.getStatus(userData); } }); - data.users = data.users.filter(function(user) { + room.users = room.users.filter(function(user) { return user && parseInt(user.uid, 10); }); - data.lastUser = data.users[0]; - data.usernames = data.users.map(function(user) { + room.lastUser = room.users[0]; + + room.usernames = room.users.map(function(user) { return user.username; }).join(', '); - return data; }); - callback(null, {rooms: rooms, nextStart: stop + 1}); + callback(null, {rooms: results.roomData, nextStart: stop + 1}); }); }); }; diff --git a/src/messaging/rooms.js b/src/messaging/rooms.js index 0c9c5bb01f..8c021d509e 100644 --- a/src/messaging/rooms.js +++ b/src/messaging/rooms.js @@ -21,6 +21,24 @@ module.exports = function(Messaging) { }); }; + Messaging.getRoomsData = function(roomIds, callback) { + var keys = roomIds.map(function(roomId) { + return 'chat:room:' + roomId; + }); + db.getObjects(keys, function(err, roomData) { + if (err) { + return callback(err); + } + roomData.forEach(function(data) { + if (data) { + data.roomName = data.roomName || '[[modules:chat.roomname, ' + data.roomId + ']]'; + data.roomName = validator.escape(String(data.roomName)); + } + }); + callback(null, roomData); + }); + }; + Messaging.newRoom = function(uid, toUids, callback) { var roomId; var now = Date.now();