From 4b5d5b4bd98ab6f74326c365e1d03ffa80be0830 Mon Sep 17 00:00:00 2001 From: pichalite Date: Mon, 8 Feb 2016 23:01:23 +0000 Subject: [PATCH] search user and initiate chat from expanded chat page --- public/src/app.js | 7 +++- public/src/client/chats.js | 71 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/public/src/app.js b/public/src/app.js index 16af336b40..855e6192ee 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -276,7 +276,12 @@ app.cacheBuster = null; if (err) { return app.alertError(err.message); } - app.openChat(roomId); + if (!ajaxify.currentPage.match(/^chats\//)) { + app.openChat(roomId); + } + else { + ajaxify.go('chats/' + roomId); + } }); }; diff --git a/public/src/client/chats.js b/public/src/client/chats.js index 9b35d735cb..a914aeff82 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,75 @@ 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) { + 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.append('
  • 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); + } + }); + }); + }); + } + + }); + } + else { + chatsListEl.empty(); + } + } + }; return Chats; });