mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-31 19:15:58 +01:00
changed friends to following/followers, updated routes and the user.js functions
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
(function() {
|
||||
var yourid = templates.get('yourid'),
|
||||
theirid = templates.get('theirid'),
|
||||
isFriend = templates.get('isFriend');
|
||||
isFollowing = templates.get('isFollowing');
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
@@ -12,25 +12,24 @@
|
||||
postcount.html(app.addCommas(postcount.html()));
|
||||
|
||||
var editLink = $('#editLink');
|
||||
var addFriendBtn = $('#add-friend-btn');
|
||||
|
||||
|
||||
var followBtn = $('#follow-btn');
|
||||
|
||||
if( yourid !== theirid) {
|
||||
editLink.hide();
|
||||
if(isFriend)
|
||||
addFriendBtn.hide();
|
||||
if(isFollowing)
|
||||
followBtn.hide();
|
||||
else
|
||||
addFriendBtn.show();
|
||||
followBtn.show();
|
||||
}
|
||||
else {
|
||||
addFriendBtn.hide();
|
||||
followBtn.hide();
|
||||
}
|
||||
|
||||
addFriendBtn.on('click', function() {
|
||||
$.post('/users/addfriend', {uid: theirid},
|
||||
followBtn.on('click', function() {
|
||||
$.post('/users/follow', {uid: theirid},
|
||||
function(data) {
|
||||
addFriendBtn.remove();
|
||||
$('#user-action-alert').html('Friend Added!').show();
|
||||
followBtn.remove();
|
||||
$('#user-action-alert').html('You are now following'+ $('.account-username').text() +'!').show();
|
||||
}
|
||||
);
|
||||
return false;
|
||||
|
||||
29
public/src/forum/followers.js
Normal file
29
public/src/forum/followers.js
Normal file
@@ -0,0 +1,29 @@
|
||||
(function() {
|
||||
|
||||
var yourid = templates.get('yourid'),
|
||||
theirid = templates.get('theirid'),
|
||||
followersCount = templates.get('followersCount');
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
if(parseInt(followersCount, 10) === 0) {
|
||||
$('#no-followers-notice').show();
|
||||
}
|
||||
var editLink = $('#editLink');
|
||||
|
||||
if(yourid !== theirid) {
|
||||
editLink.hide();
|
||||
}
|
||||
|
||||
$('.reputation').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
$('.postcount').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}());
|
||||
44
public/src/forum/following.js
Normal file
44
public/src/forum/following.js
Normal file
@@ -0,0 +1,44 @@
|
||||
(function() {
|
||||
|
||||
var yourid = templates.get('yourid'),
|
||||
theirid = templates.get('theirid'),
|
||||
followingCount = templates.get('followingCount');
|
||||
|
||||
$(document).ready(function() {
|
||||
|
||||
if(parseInt(followingCount, 10) === 0) {
|
||||
$('#no-following-notice').show();
|
||||
}
|
||||
var editLink = $('#editLink');
|
||||
|
||||
if(yourid !== theirid) {
|
||||
editLink.hide();
|
||||
$('.unfollow-btn').hide();
|
||||
}
|
||||
else {
|
||||
$('.unfollow-btn').on('click',function(){
|
||||
|
||||
var removeBtn = $(this);
|
||||
var followingUid = $(this).attr('followingUid');
|
||||
|
||||
$.post('/users/unfollow', {uid: followingUid},
|
||||
function(data) {
|
||||
removeBtn.parent().remove();
|
||||
}
|
||||
);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
||||
$('.reputation').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
$('.postcount').each(function(index, element) {
|
||||
$(element).html(app.addCommas($(element).html()));
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
}());
|
||||
@@ -8,7 +8,8 @@
|
||||
<a href="/users/{username}">{username}</a>
|
||||
</span>
|
||||
<div class="account-sub-links inline-block pull-right">
|
||||
<span id="friendsLink" class="pull-right"><a href="/users/{username}/friends">friends</a></span>
|
||||
<span id="followersLink" class="pull-right"><a href="/users/{username}/followers">followers</a></span>
|
||||
<span id="followingLink" class="pull-right"><a href="/users/{username}/following">following</a></span>
|
||||
<span id="editLink" class="pull-right"><a href="/users/{username}/edit">edit</a></span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -65,7 +66,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div id="user-actions" class="container">
|
||||
<a id="add-friend-btn" href="#" class="btn">Follow</a>
|
||||
<a id="follow-btn" href="#" class="btn">Follow</a>
|
||||
</div>
|
||||
<br/>
|
||||
<div id="user-action-alert" class="alert alert-success hide"></div>
|
||||
|
||||
@@ -66,7 +66,8 @@
|
||||
<a href="/users/{username}/edit">edit</a>
|
||||
</span>
|
||||
<div class="account-sub-links inline-block pull-right">
|
||||
<span id="friendsLink" class="pull-right"><a href="/users/{username}/friends">friends</a></span>
|
||||
<span id="followersLink" class="pull-right"><a href="/users/{username}/followers">followers</a></span>
|
||||
<span id="followingLink" class="pull-right"><a href="/users/{username}/following">following</a></span>
|
||||
<span id="editLink" class="pull-right"><a href="/users/{username}/edit">edit</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
"install/social/?": "install/social",
|
||||
"install/privileges/?": "install/privileges",
|
||||
"users[^]*edit": "accountedit",
|
||||
"users[^]*friends": "friends",
|
||||
"users[^]*following": "following",
|
||||
"users[^]*followers": "followers",
|
||||
"users/[^]*": "account",
|
||||
"latest": "category",
|
||||
"popular": "category",
|
||||
|
||||
47
public/templates/followers.tpl
Normal file
47
public/templates/followers.tpl
Normal file
@@ -0,0 +1,47 @@
|
||||
|
||||
<div class="well">
|
||||
|
||||
|
||||
|
||||
<div class="account-username-box">
|
||||
<span class="account-username">
|
||||
<a href="/users/{username}">{username}</a> >
|
||||
<a href="/users/{username}/followers">followers</a>
|
||||
</span>
|
||||
<div class="account-sub-links inline-block pull-right">
|
||||
<span id="followersLink" class="pull-right"><a href="/users/{username}/followers">followers</a></span>
|
||||
<span id="followingLink" class="pull-right"><a href="/users/{username}/following">following</a></span>
|
||||
<span id="editLink" class="pull-right"><a href="/users/{username}/edit">edit</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!-- BEGIN followers -->
|
||||
|
||||
<div class="users-box well">
|
||||
<a href="/users/{followers.username}">
|
||||
<img src="{followers.picture}" class="user-8080-picture"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="/users/{followers.username}">{followers.username}</a>
|
||||
<br/>
|
||||
<div title="reputation">
|
||||
<span class='reputation'>{followers.reputation}</span>
|
||||
<i class='icon-star'></i>
|
||||
</div>
|
||||
<div title="post count">
|
||||
<span class='postcount'>{followers.postcount}</span>
|
||||
<i class='icon-pencil'></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- END followers -->
|
||||
</div>
|
||||
<div id="no-followers-notice" class="alert alert-warning hide">This user doesn't have any followers :(</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" template-variable="yourid" value="{yourid}" />
|
||||
<input type="hidden" template-variable="theirid" value="{theirid}" />
|
||||
<input type="hidden" template-variable="followersCount" value="{followersCount}" />
|
||||
|
||||
<script type="text/javascript" src="/src/forum/followers.js"></script>
|
||||
48
public/templates/following.tpl
Normal file
48
public/templates/following.tpl
Normal file
@@ -0,0 +1,48 @@
|
||||
|
||||
<div class="well">
|
||||
|
||||
|
||||
|
||||
<div class="account-username-box">
|
||||
<span class="account-username">
|
||||
<a href="/users/{username}">{username}</a> >
|
||||
<a href="/users/{username}/following">following</a>
|
||||
</span>
|
||||
<div class="account-sub-links inline-block pull-right">
|
||||
<span id="followersLink" class="pull-right"><a href="/users/{username}/followers">followers</a></span>
|
||||
<span id="followingLink" class="pull-right"><a href="/users/{username}/following">following</a></span>
|
||||
<span id="editLink" class="pull-right"><a href="/users/{username}/edit">edit</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!-- BEGIN following -->
|
||||
|
||||
<div class="users-box well">
|
||||
<a href="/users/{following.username}">
|
||||
<img src="{following.picture}" class="user-8080-picture"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="/users/{following.username}">{following.username}</a>
|
||||
<br/>
|
||||
<div title="reputation">
|
||||
<span class='reputation'>{following.reputation}</span>
|
||||
<i class='icon-star'></i>
|
||||
</div>
|
||||
<div title="post count">
|
||||
<span class='postcount'>{following.postcount}</span>
|
||||
<i class='icon-pencil'></i>
|
||||
</div>
|
||||
<a id="unfollow-btn" href="#" class="btn unfollow-btn" followingUid="{following.uid}">Unfollow</a>
|
||||
</div>
|
||||
|
||||
<!-- END following -->
|
||||
</div>
|
||||
<div id="no-following-notice" class="alert alert-warning hide">This user isn't following anyone :(</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" template-variable="yourid" value="{yourid}" />
|
||||
<input type="hidden" template-variable="theirid" value="{theirid}" />
|
||||
<input type="hidden" template-variable="followingCount" value="{followingCount}" />
|
||||
|
||||
<script type="text/javascript" src="/src/forum/following.js"></script>
|
||||
@@ -1,47 +0,0 @@
|
||||
|
||||
<div class="well">
|
||||
|
||||
|
||||
|
||||
<div class="account-username-box">
|
||||
<span class="account-username">
|
||||
<a href="/users/{username}">{username}</a> >
|
||||
<a href="/users/{username}/friends">friends</a>
|
||||
</span>
|
||||
<div class="account-sub-links inline-block pull-right">
|
||||
<span id="friendsLink" class="pull-right"><a href="/users/{username}/friends">friends</a></span>
|
||||
<span id="editLink" class="pull-right"><a href="/users/{username}/edit">edit</a></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<!-- BEGIN friends -->
|
||||
|
||||
<div class="users-box well">
|
||||
<a href="/users/{friends.username}">
|
||||
<img src="{friends.picture}" class="user-8080-picture"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="/users/{friends.username}">{friends.username}</a>
|
||||
<br/>
|
||||
<div title="reputation">
|
||||
<span class='reputation'>{friends.reputation}</span>
|
||||
<i class='icon-star'></i>
|
||||
</div>
|
||||
<div title="post count">
|
||||
<span class='postcount'>{friends.postcount}</span>
|
||||
<i class='icon-pencil'></i>
|
||||
</div>
|
||||
<a id="remove-friend-btn" href="#" class="btn remove-friend-btn" friendid="{friends.uid}">Unfollow</a>
|
||||
</div>
|
||||
|
||||
<!-- END friends -->
|
||||
</div>
|
||||
<div id="no-friend-notice" class="alert alert-warning hide">This user doesn't have any friends :(</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" template-variable="yourid" value="{yourid}" />
|
||||
<input type="hidden" template-variable="theirid" value="{theirid}" />
|
||||
<input type="hidden" template-variable="friendCount" value="{friendCount}" />
|
||||
|
||||
<script type="text/javascript" src="/src/forum/friends.js"></script>
|
||||
@@ -202,36 +202,44 @@ var user = require('./../user.js'),
|
||||
res.send({});
|
||||
});
|
||||
|
||||
app.post('/users/addfriend', function(req, res){
|
||||
app.post('/users/follow', function(req, res){
|
||||
if(!req.user)
|
||||
return res.redirect('/403');
|
||||
|
||||
if(req.user.uid == req.body.uid)
|
||||
return res.redirect('/');
|
||||
|
||||
user.addFriend(req.user.uid, req.body.uid, function(data) {
|
||||
user.follow(req.user.uid, req.body.uid, function(data) {
|
||||
res.send({data:data});
|
||||
});
|
||||
});
|
||||
|
||||
app.post('/users/removefriend', function(req, res){
|
||||
app.post('/users/unfollow', function(req, res){
|
||||
if(!req.user)
|
||||
return res.redirect('/403');
|
||||
|
||||
if(req.user.uid == req.body.uid)
|
||||
return res.redirect('/');
|
||||
|
||||
user.removeFriend(req.user.uid, req.body.uid, function(data) {
|
||||
user.unfollow(req.user.uid, req.body.uid, function(data) {
|
||||
res.send({data:data});
|
||||
});
|
||||
});
|
||||
|
||||
app.get('/users/:username/friends', function(req, res){
|
||||
app.get('/users/:username/following', function(req, res) {
|
||||
|
||||
if(!req.user)
|
||||
return res.redirect('/403');
|
||||
|
||||
res.send(build_header() + app.create_route('users/'+req.params.username+'/friends','friends') + templates['footer']);
|
||||
res.send(build_header() + app.create_route('users/'+req.params.username+'/following','following') + templates['footer']);
|
||||
});
|
||||
|
||||
app.get('/users/:username/followers', function(req, res) {
|
||||
|
||||
if(!req.user)
|
||||
return res.redirect('/403');
|
||||
|
||||
res.send(build_header() + app.create_route('users/'+req.params.username+'/followers','followers') + templates['footer']);
|
||||
});
|
||||
|
||||
function api_method(req, res) {
|
||||
@@ -246,13 +254,24 @@ var user = require('./../user.js'),
|
||||
|
||||
});
|
||||
}
|
||||
else if(String(req.params.section).toLowerCase() === 'friends') {
|
||||
else if(String(req.params.section).toLowerCase() === 'following') {
|
||||
|
||||
getUserDataByUserName(req.params.username, callerUID, function(userData) {
|
||||
|
||||
user.getFriends(userData.uid, function(friendsData){
|
||||
userData.friends = friendsData;
|
||||
userData.friendCount = friendsData.length;
|
||||
user.getFollowing(userData.uid, function(followingData){
|
||||
userData.following = followingData;
|
||||
userData.followingCount = followingData.length;
|
||||
res.send(JSON.stringify(userData));
|
||||
});
|
||||
});
|
||||
}
|
||||
else if(String(req.params.section).toLowerCase() === 'followers') {
|
||||
|
||||
getUserDataByUserName(req.params.username, callerUID, function(userData) {
|
||||
|
||||
user.getFollowers(userData.uid, function(followersData){
|
||||
userData.followers = followersData;
|
||||
userData.followersCount = followersData.length;
|
||||
res.send(JSON.stringify(userData));
|
||||
});
|
||||
});
|
||||
@@ -264,8 +283,8 @@ var user = require('./../user.js'),
|
||||
} else {
|
||||
getUserDataByUserName(req.params.username, callerUID, function(userData) {
|
||||
|
||||
user.isFriend(callerUID, userData.theirid, function(isFriend) {
|
||||
userData.isFriend = isFriend;
|
||||
user.isFollowing(callerUID, userData.theirid, function(isFollowing) {
|
||||
userData.isFollowing = isFollowing;
|
||||
|
||||
userData.signature = marked(userData.signature || '');
|
||||
|
||||
|
||||
81
src/user.js
81
src/user.js
@@ -388,54 +388,71 @@ var utils = require('./../public/src/utils.js'),
|
||||
}
|
||||
}
|
||||
|
||||
User.addFriend = function(uid, friendid, callback) {
|
||||
RDB.sadd('user:'+uid+':friends', friendid, function(err, data){
|
||||
if(err === null)
|
||||
callback(data);
|
||||
User.follow = function(uid, followid, callback) {
|
||||
RDB.sadd('user:'+uid+':following', followid, function(err, data) {
|
||||
if(err === null) {
|
||||
RDB.sadd('user:'+followid+':followers', uid, function(err, data) {
|
||||
callback(data);
|
||||
});
|
||||
}
|
||||
else
|
||||
console.log(err);
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
User.getFriends = function(uid, callback) {
|
||||
RDB.smembers('user:'+uid+':friends', function(err, data){
|
||||
if(err === null){
|
||||
|
||||
var friendsData = [];
|
||||
|
||||
if(data.length === 0) {
|
||||
callback(friendsData);
|
||||
return;
|
||||
}
|
||||
|
||||
for(var i=0, ii=data.length; i<ii; ++i) {
|
||||
User.getUserData(data[i], function(userData){
|
||||
friendsData.push(userData);
|
||||
|
||||
if(friendsData.length == data.length)
|
||||
callback(friendsData);
|
||||
});
|
||||
}
|
||||
User.unfollow = function(uid, unfollowid, callback) {
|
||||
RDB.srem('user:'+uid+':following', unfollowid, function(err, data){
|
||||
if(err === null) {
|
||||
RDB.srem('user:'+unfollowid+':followers', uid, function(err, data){
|
||||
callback(data);
|
||||
});
|
||||
}
|
||||
else
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
User.getFollowing = function(uid, callback) {
|
||||
RDB.smembers('user:'+uid+':following', function(err, userIds) {
|
||||
if(err === null)
|
||||
User.getDataForUsers(userIds, callback);
|
||||
else
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
User.removeFriend = function(uid, friendid, callback) {
|
||||
RDB.srem('user:'+uid+':friends', friendid, function(err, data){
|
||||
User.getFollowers = function(uid, callback) {
|
||||
RDB.smembers('user:'+uid+':followers', function(err, userIds) {
|
||||
if(err === null)
|
||||
callback(data);
|
||||
User.getDataForUsers(userIds, callback);
|
||||
else
|
||||
console.log(err);
|
||||
console.log(err);
|
||||
});
|
||||
}
|
||||
|
||||
User.getDataForUsers = function(userIds, callback) {
|
||||
var returnData = [];
|
||||
|
||||
User.isFriend = function(uid, friendid, callback) {
|
||||
RDB.sismember('user:'+uid+':friends', friendid, function(err, data){
|
||||
if(err === null){
|
||||
if(userIds.length === 0) {
|
||||
callback(returnData);
|
||||
return;
|
||||
}
|
||||
|
||||
for(var i=0, ii=userIds.length; i<ii; ++i) {
|
||||
User.getUserData(userIds[i], function(userData) {
|
||||
returnData.push(userData);
|
||||
|
||||
if(returnData.length == userIds.length)
|
||||
callback(returnData);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
User.isFollowing = function(uid, theirid, callback) {
|
||||
RDB.sismember('user:'+uid+':following', theirid, function(err, data) {
|
||||
if(err === null)
|
||||
callback(data === 1);
|
||||
}
|
||||
else
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user