diff --git a/public/language/en_GB/users.json b/public/language/en_GB/users.json index 5616cda575..1232555be5 100644 --- a/public/language/en_GB/users.json +++ b/public/language/en_GB/users.json @@ -17,5 +17,6 @@ "unread_topics": "Unread Topics", "categories": "Categories", "tags": "Tags", - "map": "Map" + "map": "Map", + "no-users-found": "No users found!" } \ No newline at end of file diff --git a/public/src/app.js b/public/src/app.js index 16af336b40..9fbe1c9f14 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -276,7 +276,11 @@ app.cacheBuster = null; if (err) { return app.alertError(err.message); } - app.openChat(roomId); + if (!ajaxify.currentPage.startsWith('chats/')) { + app.openChat(roomId); + } else { + ajaxify.go('chats/' + roomId); + } }); }; diff --git a/public/src/client/chats.js b/public/src/client/chats.js index fe2f9f9c77..f29ff0cc3e 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -29,6 +29,8 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', Chats.scrollToBottom($('.expanded-chat ul')); Chats.initialised = true; + + Chats.handleSearch(); if (ajaxify.data.hasOwnProperty('roomId')) { components.get('chat/input').focus(); @@ -530,6 +532,71 @@ define('forum/chats', ['components', 'string', 'sounds', 'forum/infinitescroll', callback(); }); } + + Chats.handleSearch = function() { + var timeoutId = 0; + + components.get('chat/search').on('keyup', function() { + if (timeoutId) { + clearTimeout(timeoutId); + timeoutId = 0; + } + + timeoutId = setTimeout(doSearch, 250); + }); + + function doSearch() { + var username = components.get('chat/search').val(); + var chatsListEl = $('[component="chat/search/list"]'); + if (!username) { + return chatsListEl.empty(); + } + + socket.emit('user.search', { + query: username, + searchBy: 'username' + }, function(err, data) { + if (err) { + return app.alertError(err.message); + } + + chatsListEl.empty(); + + if (data.users.length === 0) { + chatsListEl.translateHtml('
  • [[users:no-users-found]]
  • '); + } else { + data.users.forEach(function(userObj) { + function createUserImage() { + return (userObj.picture ? + '' : + '
    ' + userObj['icon:text'] + '
    ') + + ' ' + userObj.username; + } + + var chatEl = $('
  • ') + .attr('data-uid', userObj.uid) + .appendTo(chatsListEl); + + chatEl.append(createUserImage()); + + chatEl.click(function() { + socket.emit('modules.chats.hasPrivateChat', userObj.uid, function(err, roomId) { + if (err) { + return app.alertError(err.message); + } + if (roomId) { + ajaxify.go('chats/' + roomId); + } else { + app.newChat(userObj.uid); + } + }); + }); + }); + } + + }); + } + }; return Chats; });