some chats refactor
parent
09a03bbe10
commit
f67f408b2c
@ -0,0 +1,57 @@
|
||||
'use strict';
|
||||
|
||||
/* globals define, socket, app */
|
||||
|
||||
define('forum/chats/recent', function() {
|
||||
|
||||
var recent = {};
|
||||
|
||||
recent.init = function() {
|
||||
$('[component="chat/recent"]').on('scroll', function() {
|
||||
var $this = $(this);
|
||||
var bottom = ($this[0].scrollHeight - $this.height()) * 0.9;
|
||||
if ($this.scrollTop() > bottom) {
|
||||
loadMoreRecentChats();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function loadMoreRecentChats() {
|
||||
var recentChats = $('[component="chat/recent"]');
|
||||
if (recentChats.attr('loading')) {
|
||||
return;
|
||||
}
|
||||
recentChats.attr('loading', 1);
|
||||
socket.emit('modules.chats.getRecentChats', {
|
||||
after: recentChats.attr('data-nextstart')
|
||||
}, function(err, data) {
|
||||
if (err) {
|
||||
return app.alertError(err.message);
|
||||
}
|
||||
|
||||
if (data && data.rooms.length) {
|
||||
onRecentChatsLoaded(data, function() {
|
||||
recentChats.removeAttr('loading');
|
||||
recentChats.attr('data-nextstart', data.nextStart);
|
||||
});
|
||||
} else {
|
||||
recentChats.removeAttr('loading');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function onRecentChatsLoaded(data, callback) {
|
||||
if (!data.rooms.length) {
|
||||
return callback();
|
||||
}
|
||||
|
||||
app.parseAndTranslate('chats', 'rooms', data, function(html) {
|
||||
$('[component="chat/recent"]').append(html);
|
||||
html.find('.timeago').timeago();
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
return recent;
|
||||
});
|
@ -0,0 +1,87 @@
|
||||
'use strict';
|
||||
|
||||
/* globals define, socket, app, ajaxify */
|
||||
|
||||
define('forum/chats/search', ['components'], function(components) {
|
||||
|
||||
var search = {};
|
||||
|
||||
search.init = 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);
|
||||
}
|
||||
|
||||
displayResults(chatsListEl, data);
|
||||
});
|
||||
}
|
||||
|
||||
function displayResults(chatsListEl, data) {
|
||||
chatsListEl.empty();
|
||||
|
||||
if (!data.users.length) {
|
||||
return chatsListEl.translateHtml('<li><div><span>[[users:no-users-found]]</span></div></li>');
|
||||
}
|
||||
|
||||
data.users.forEach(function(userObj) {
|
||||
var chatEl = displayUser(chatsListEl, userObj);
|
||||
onUserClick(chatEl, userObj);
|
||||
});
|
||||
}
|
||||
|
||||
function displayUser(chatsListEl, userObj) {
|
||||
function createUserImage() {
|
||||
return (userObj.picture ?
|
||||
'<img src="' + userObj.picture + '" title="' + userObj.username +'" />' :
|
||||
'<div class="user-icon" style="background-color: ' + userObj['icon:bgColor'] + '">' + userObj['icon:text'] + '</div>') +
|
||||
'<i class="fa fa-circle status ' + userObj.status + '"></i> ' + userObj.username;
|
||||
}
|
||||
|
||||
var chatEl = $('<li component="chat/search/user" />')
|
||||
.attr('data-uid', userObj.uid)
|
||||
.appendTo(chatsListEl);
|
||||
|
||||
chatEl.append(createUserImage());
|
||||
return chatEl;
|
||||
}
|
||||
|
||||
function onUserClick(chatEl, userObj) {
|
||||
chatEl.on('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 search;
|
||||
});
|
Loading…
Reference in New Issue