From 057608bac0222c65b51b8b034aeed9d42d942da5 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 4 Oct 2013 13:01:28 -0400 Subject: [PATCH 1/5] added usernames to following followers, closes #369 --- public/templates/followers.tpl | 20 +++++++++++--------- public/templates/following.tpl | 21 ++++++++++++--------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/public/templates/followers.tpl b/public/templates/followers.tpl index 5093d40713..71ebe8a12d 100644 --- a/public/templates/followers.tpl +++ b/public/templates/followers.tpl @@ -15,15 +15,17 @@
- {followers.username} -
-
- {followers.reputation} - -
-
- {followers.postcount} - +
diff --git a/public/templates/following.tpl b/public/templates/following.tpl index 8215d9be31..cc6a28f2ca 100644 --- a/public/templates/following.tpl +++ b/public/templates/following.tpl @@ -15,18 +15,21 @@
- {following.username} -
-
- {following.reputation} - -
-
- {following.postcount} - + Unfollow
+
This user isn't following anyone :(
From 52f2e193d6a8a19fe11dc75ae3342700a5f1bb10 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 4 Oct 2013 13:39:44 -0400 Subject: [PATCH 2/5] if api fails with 404 ajaxify to 404, added type check to updateProfile --- public/src/templates.js | 4 ++++ src/user.js | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/public/src/templates.js b/public/src/templates.js index 82c0438b05..07d6c8fc7a 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -156,6 +156,10 @@ template_data = data; parse_template(); }).fail(function (data) { + if(data && data.status == 404) { + ajaxify.go('404'); + return; + } app.alertError("Can't load template data!"); }); diff --git a/src/user.js b/src/user.js index 4c6ccfc811..2bd216725f 100644 --- a/src/user.js +++ b/src/user.js @@ -227,7 +227,7 @@ var utils = require('./../public/src/utils.js'), }); function updateField(field, next) { - if (data[field] !== undefined) { + if (data[field] !== undefined && typeof data[field] === 'string') { if (field === 'email') { var gravatarpicture = User.createGravatarURLFromEmail(data[field]); User.setUserField(uid, 'gravatarpicture', gravatarpicture); From 1155eaf1f17f9f59589d90cd6b98a16b2485d509 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 4 Oct 2013 15:30:52 -0400 Subject: [PATCH 3/5] online page changes --- public/src/forum/users.js | 7 +++++-- public/templates/users.tpl | 13 +++++++++++- src/routes/user.js | 43 ++++++++++++++++++++++++++++++-------- src/websockets.js | 20 +++++++++++++++--- 4 files changed, 68 insertions(+), 15 deletions(-) diff --git a/public/src/forum/users.js b/public/src/forum/users.js index c845a7c4cb..5d7994cf97 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -77,8 +77,11 @@ define(function() { socket.on('api:user.isOnline', function(data) { if(active == 'online' && !loadingMoreUsers) { - $('#users-container').empty(); + $('#users-container .registered-user').remove(); startLoading('users:online', 0); + socket.emit('api:user.getOnlineAnonCount', {} , function(anonCount) { + $('#online_anon_count').html(anonCount); + }); } }); @@ -86,7 +89,7 @@ define(function() { var html = templates.prepare(templates['users'].blocks['users']).parse({ users: users }); - $('#users-container').append(html); + $('#users-container').prepend(html); } function loadMoreUsers() { diff --git a/public/templates/users.tpl b/public/templates/users.tpl index d68b7cd397..ce43feb591 100644 --- a/public/templates/users.tpl +++ b/public/templates/users.tpl @@ -20,7 +20,7 @@
    -
    +
    @@ -39,6 +39,17 @@
    +
    + + + +
    + +
diff --git a/src/routes/user.js b/src/routes/user.js index f7461886d7..d31f2b1ba7 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -6,7 +6,10 @@ var user = require('./../user.js'), path = require('path'), winston = require('winston'), nconf = require('nconf'), - meta = require('./../meta'); + meta = require('./../meta'), + async= require('async'), + RDB = require('./../redis'), + websockets = require('./../websockets.js'); (function (User) { User.create_routes = function (app) { @@ -457,7 +460,8 @@ var user = require('./../user.js'), res.json({ search_display: 'none', loadmore_display: 'block', - users: data + users: data, + show_anon: 'hide' }); }); } @@ -467,7 +471,8 @@ var user = require('./../user.js'), res.json({ search_display: 'none', loadmore_display: 'block', - users: data + users: data, + show_anon: 'hide' }); }); } @@ -477,17 +482,36 @@ var user = require('./../user.js'), res.json({ search_display: 'none', loadmore_display: 'block', - users: data + users: data, + show_anon: 'hide' }); }); } function getOnlineUsers(req, res) { user.getUsers('users:online', 0, 49, function (err, data) { - res.json({ - search_display: 'none', - loadmore_display: 'block', - users: data + + var onlineUsers = []; + + 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({ search_display: 'block', loadmore_display: 'none', - users: [] + users: [], + show_anon: 'hide' }); } diff --git a/src/websockets.js b/src/websockets.js index 90784ad847..633c5b8f86 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -68,7 +68,6 @@ module.exports.init = function(io) { RDB.zadd('users:online', Date.now(), uid, function(err, data) { socket.join('uid_' + uid); - io.sockets. in ('global').emit('api:user.isOnline', isUserOnline(uid)); user.getUserField(uid, 'username', function(err, username) { 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]; if (uid) { 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(); for (var roomName in rooms) { @@ -266,6 +268,8 @@ module.exports.init = function(io) { return !!userSockets[uid] && userSockets[uid].length > 0; } + module.exports.isUserOnline = isUserOnline; + socket.on('api:user.get_online_users', function(data) { var returnData = []; @@ -282,6 +286,7 @@ module.exports.init = function(io) { socket.on('api:user.isOnline', function(uid, callback) { callback({ online: isUserOnline(uid), + uid: uid, 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() { var anon = userSockets[0] ? userSockets[0].length : 0; var registered = Object.keys(userSockets).length; @@ -445,7 +458,8 @@ module.exports.init = function(io) { registered = registered - 1; var returnObj = { - users: registered + anon + users: registered + anon, + anon: anon }; io.sockets.emit('api:user.active.get', returnObj) } From c00b138bf2e20b32f7c645b5dc08703f4735a3ad Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Fri, 4 Oct 2013 16:03:03 -0400 Subject: [PATCH 4/5] some fixes to online page --- public/src/forum/users.js | 8 ++++---- public/templates/users.tpl | 34 ++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/public/src/forum/users.js b/public/src/forum/users.js index 5d7994cf97..9135416c92 100644 --- a/public/src/forum/users.js +++ b/public/src/forum/users.js @@ -60,7 +60,7 @@ define(function() { var html = templates.prepare(templates['users'].blocks['users']).parse({ users: data }), - userListEl = document.querySelector('#users-container'); + userListEl = document.querySelector('#users-inner-container'); userListEl.innerHTML = html; @@ -77,7 +77,7 @@ define(function() { socket.on('api:user.isOnline', function(data) { if(active == 'online' && !loadingMoreUsers) { - $('#users-container .registered-user').remove(); + $('#users-inner-container').empty(); startLoading('users:online', 0); socket.emit('api:user.getOnlineAnonCount', {} , function(anonCount) { $('#online_anon_count').html(anonCount); @@ -89,7 +89,7 @@ define(function() { var html = templates.prepare(templates['users'].blocks['users']).parse({ users: users }); - $('#users-container').prepend(html); + $('#users-inner-container').append(html); } function loadMoreUsers() { @@ -105,7 +105,7 @@ define(function() { } if (set) { - startLoading(set, $('#users-container').children().length); + startLoading(set, $('#users-inner-container').children().length); } } diff --git a/public/templates/users.tpl b/public/templates/users.tpl index ce43feb591..a223ad2b82 100644 --- a/public/templates/users.tpl +++ b/public/templates/users.tpl @@ -19,26 +19,28 @@