Merge branch 'master' of github.com:designcreateplay/NodeBB

v1.18.x
Julian Lam 12 years ago
commit b1cef5f73d

@ -60,7 +60,7 @@ define(function() {
var html = templates.prepare(templates['users'].blocks['users']).parse({ var html = templates.prepare(templates['users'].blocks['users']).parse({
users: data users: data
}), }),
userListEl = document.querySelector('#users-container'); userListEl = document.querySelector('#users-inner-container');
userListEl.innerHTML = html; userListEl.innerHTML = html;
@ -77,8 +77,12 @@ define(function() {
socket.on('api:user.isOnline', function(data) { socket.on('api:user.isOnline', function(data) {
if(active == 'online' && !loadingMoreUsers) { if(active == 'online' && !loadingMoreUsers) {
$('#users-container').empty(); loadingMoreUsers = true;
$('#users-inner-container').empty();
startLoading('users:online', 0); startLoading('users:online', 0);
socket.emit('api:user.getOnlineAnonCount', {} , function(anonCount) {
$('#online_anon_count').html(anonCount);
});
} }
}); });
@ -86,7 +90,7 @@ define(function() {
var html = templates.prepare(templates['users'].blocks['users']).parse({ var html = templates.prepare(templates['users'].blocks['users']).parse({
users: users users: users
}); });
$('#users-container').append(html); $('#users-inner-container').append(html);
} }
function loadMoreUsers() { function loadMoreUsers() {
@ -102,7 +106,7 @@ define(function() {
} }
if (set) { if (set) {
startLoading(set, $('#users-container').children().length); startLoading(set, $('#users-inner-container').children().length);
} }
} }

@ -156,6 +156,10 @@
template_data = data; template_data = data;
parse_template(); parse_template();
}).fail(function (data) { }).fail(function (data) {
if(data && data.status == 404) {
ajaxify.go('404');
return;
}
app.alertError("Can't load template data!"); app.alertError("Can't load template data!");
}); });

@ -15,15 +15,17 @@
<img src="{followers.picture}" class="img-thumbnail"/> <img src="{followers.picture}" class="img-thumbnail"/>
</a> </a>
<br/> <br/>
<a href="/user/{followers.userslug}">{followers.username}</a> <div class="user-info">
<br/> <a href="/user/{followers.userslug}">{followers.username}</a>
<div title="reputation"> <br/>
<span class='formatted-number'>{followers.reputation}</span> <div title="reputation" class="reputation">
<i class='icon-star'></i> <span class='formatted-number'>{followers.reputation}</span>
</div> <i class='icon-star'></i>
<div title="post count"> </div>
<span class='formatted-number'>{followers.postcount}</span> <div title="post count" class="post-count">
<i class='icon-pencil'></i> <span class='formatted-number'>{followers.postcount}</span>
<i class='icon-pencil'></i>
</div>
</div> </div>
</div> </div>
<!-- END followers --> <!-- END followers -->

@ -15,18 +15,21 @@
<img src="{following.picture}" class="img-thumbnail"/> <img src="{following.picture}" class="img-thumbnail"/>
</a> </a>
<br/> <br/>
<a href="/user/{following.userslug}">{following.username}</a> <div class="user-info">
<br/> <a href="/user/{following.userslug}">{following.username}</a>
<div title="reputation"> <br/>
<span class='formatted-number'>{following.reputation}</span> <div title="reputation" class="reputation">
<i class='icon-star'></i> <span class='formatted-number'>{following.reputation}</span>
</div> <i class='icon-star'></i>
<div title="post count"> </div>
<span class='formatted-number'>{following.postcount}</span> <div title="post count" class="post-count">
<i class='icon-pencil'></i> <span class='formatted-number'>{following.postcount}</span>
<i class='icon-pencil'></i>
</div>
</div> </div>
<a id="unfollow-btn" href="#" class="btn btn-default unfollow-btn" followingUid="{following.uid}" data-username="{following.username}">Unfollow</a> <a id="unfollow-btn" href="#" class="btn btn-default unfollow-btn" followingUid="{following.uid}" data-username="{following.username}">Unfollow</a>
</div> </div>
<!-- END following --> <!-- END following -->
</div> </div>
<div id="no-following-notice" class="alert alert-warning hide">This user isn't following anyone :(</div> <div id="no-following-notice" class="alert alert-warning hide">This user isn't following anyone :(</div>

@ -19,26 +19,39 @@
</div> </div>
<ul id="users-container" class="users-container"> <ul id="users-container" class="users-container">
<!-- BEGIN users --> <div id="users-inner-container" class="inline-block">
<div class="users-box"> <!-- BEGIN users -->
<a href="/user/{users.userslug}"> <div class="users-box registered-user">
<img src="{users.picture}" class="img-thumbnail"/> <a href="/user/{users.userslug}">
<img src="{users.picture}" class="img-thumbnail"/>
</a>
<br/>
<div class="user-info">
<a href="/user/{users.userslug}">{users.username}</a>
<br/>
<div title="reputation" class="reputation">
<span class='formatted-number'>{users.reputation}</span>
<i class='icon-star'></i>
</div>
<div title="post count" class="post-count">
<span class='formatted-number'>{users.postcount}</span>
<i class='icon-pencil'></i>
</div>
</div>
</div>
<!-- END users -->
</div>
<div class="users-box {show_anon}">
<a href="#">
<img src="" class="img-thumbnail"/>
</a> </a>
<br/> <br/>
<div class="user-info"> <div class="user-info">
<a href="/user/{users.userslug}">{users.username}</a> <span id="online_anon_count">{anonymousUserCount}</span>
<br/> <br/>
<div title="reputation" class="reputation"> <a href="#">Anonymous</a>
<span class='formatted-number'>{users.reputation}</span>
<i class='icon-star'></i>
</div>
<div title="post count" class="post-count">
<span class='formatted-number'>{users.postcount}</span>
<i class='icon-pencil'></i>
</div>
</div> </div>
</div> </div>
<!-- END users -->
</ul> </ul>
<div class="text-center {loadmore_display}"> <div class="text-center {loadmore_display}">

@ -6,7 +6,10 @@ var user = require('./../user.js'),
path = require('path'), path = require('path'),
winston = require('winston'), winston = require('winston'),
nconf = require('nconf'), nconf = require('nconf'),
meta = require('./../meta'); meta = require('./../meta'),
async= require('async'),
RDB = require('./../redis'),
websockets = require('./../websockets.js');
(function (User) { (function (User) {
User.create_routes = function (app) { User.create_routes = function (app) {
@ -457,7 +460,8 @@ var user = require('./../user.js'),
res.json({ res.json({
search_display: 'none', search_display: 'none',
loadmore_display: 'block', loadmore_display: 'block',
users: data users: data,
show_anon: 'hide'
}); });
}); });
} }
@ -467,7 +471,8 @@ var user = require('./../user.js'),
res.json({ res.json({
search_display: 'none', search_display: 'none',
loadmore_display: 'block', loadmore_display: 'block',
users: data users: data,
show_anon: 'hide'
}); });
}); });
} }
@ -477,17 +482,36 @@ var user = require('./../user.js'),
res.json({ res.json({
search_display: 'none', search_display: 'none',
loadmore_display: 'block', loadmore_display: 'block',
users: data users: data,
show_anon: 'hide'
}); });
}); });
} }
function getOnlineUsers(req, res) { function getOnlineUsers(req, res) {
user.getUsers('users:online', 0, 49, function (err, data) { user.getUsers('users:online', 0, 49, function (err, data) {
res.json({
search_display: 'none', var onlineUsers = [];
loadmore_display: 'block',
users: data function iterator(user, callback) {
if(websockets.isUserOnline(user.uid)) {
onlineUsers.push(user);
} else {
RDB.zrem('users:online', user.uid);
}
callback(null);
}
var anonymousUserCount = websockets.getOnlineAnonCount();
async.each(data, iterator, function(err) {
res.json({
search_display: 'none',
loadmore_display: 'block',
users: onlineUsers,
anonymousUserCount: anonymousUserCount,
show_anon: anonymousUserCount?'':'hide'
});
}); });
}); });
} }
@ -496,7 +520,8 @@ var user = require('./../user.js'),
res.json({ res.json({
search_display: 'block', search_display: 'block',
loadmore_display: 'none', loadmore_display: 'none',
users: [] users: [],
show_anon: 'hide'
}); });
} }

@ -227,7 +227,7 @@ var utils = require('./../public/src/utils.js'),
}); });
function updateField(field, next) { function updateField(field, next) {
if (data[field] !== undefined) { if (data[field] !== undefined && typeof data[field] === 'string') {
if (field === 'email') { if (field === 'email') {
var gravatarpicture = User.createGravatarURLFromEmail(data[field]); var gravatarpicture = User.createGravatarURLFromEmail(data[field]);
User.setUserField(uid, 'gravatarpicture', gravatarpicture); User.setUserField(uid, 'gravatarpicture', gravatarpicture);

@ -68,7 +68,6 @@ module.exports.init = function(io) {
RDB.zadd('users:online', Date.now(), uid, function(err, data) { RDB.zadd('users:online', Date.now(), uid, function(err, data) {
socket.join('uid_' + uid); socket.join('uid_' + uid);
io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
user.getUserField(uid, 'username', function(err, username) { user.getUserField(uid, 'username', function(err, username) {
socket.emit('event:connect', { socket.emit('event:connect', {
@ -79,6 +78,8 @@ module.exports.init = function(io) {
}); });
}); });
} }
io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
}); });
}); });
@ -96,11 +97,12 @@ module.exports.init = function(io) {
delete userSockets[uid]; delete userSockets[uid];
if (uid) { if (uid) {
RDB.zrem('users:online', uid, function(err, data) { RDB.zrem('users:online', uid, function(err, data) {
io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
}); });
} }
} }
io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid));
emitOnlineUserCount(); emitOnlineUserCount();
for (var roomName in rooms) { for (var roomName in rooms) {
@ -266,6 +268,8 @@ module.exports.init = function(io) {
return !!userSockets[uid] && userSockets[uid].length > 0; return !!userSockets[uid] && userSockets[uid].length > 0;
} }
module.exports.isUserOnline = isUserOnline;
socket.on('api:user.get_online_users', function(data) { socket.on('api:user.get_online_users', function(data) {
var returnData = []; var returnData = [];
@ -282,6 +286,7 @@ module.exports.init = function(io) {
socket.on('api:user.isOnline', function(uid, callback) { socket.on('api:user.isOnline', function(uid, callback) {
callback({ callback({
online: isUserOnline(uid), online: isUserOnline(uid),
uid: uid,
timestamp: Date.now() timestamp: Date.now()
}); });
}); });
@ -438,6 +443,14 @@ module.exports.init = function(io) {
}); });
}); });
socket.on('api:user.getOnlineAnonCount', function(data, callback) {
callback(module.exports.getOnlineAnonCount());
});
module.exports.getOnlineAnonCount = function () {
return userSockets[0] ? userSockets[0].length : 0;
}
function emitOnlineUserCount() { function emitOnlineUserCount() {
var anon = userSockets[0] ? userSockets[0].length : 0; var anon = userSockets[0] ? userSockets[0].length : 0;
var registered = Object.keys(userSockets).length; var registered = Object.keys(userSockets).length;
@ -445,7 +458,8 @@ module.exports.init = function(io) {
registered = registered - 1; registered = registered - 1;
var returnObj = { var returnObj = {
users: registered + anon users: registered + anon,
anon: anon
}; };
io.sockets.emit('api:user.active.get', returnObj) io.sockets.emit('api:user.active.get', returnObj)
} }

Loading…
Cancel
Save