From 58aa0ee64759fd82dc188bab1ace0470f01a390b Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 15 May 2013 13:57:13 -0400 Subject: [PATCH 1/5] friends --- public/css/style.less | 4 ++ public/src/templates.js | 2 +- public/templates/account.tpl | 28 +++++----- public/templates/accountedit.tpl | 18 +++--- public/templates/config.json | 1 + public/templates/friends.tpl | 94 ++++++++++++++++++++++++++++++++ src/routes/user.js | 40 +++++++++----- src/templates.js | 2 +- src/user.js | 21 ++++++- 9 files changed, 169 insertions(+), 41 deletions(-) create mode 100644 public/templates/friends.tpl diff --git a/public/css/style.less b/public/css/style.less index 064d7e318f..b11eec2644 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -390,6 +390,10 @@ footer.footer { margin-bottom:10px; } +.account-sub-links a{ + margin-left:10px; +} + .account-username{ font-size:20px; font-weight:bold; diff --git a/public/src/templates.js b/public/src/templates.js index 27a1a4af1d..3c0f40531d 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -65,7 +65,7 @@ var templates = {}; function init() { loadTemplates([ - 'header', 'footer', 'register', 'home', 'topic','account', 'category', 'users', 'accountedit', + 'header', 'footer', 'register', 'home', 'topic','account', 'category', 'users', 'accountedit', 'friends', 'login', 'reset', 'reset_code', 'account', 'confirm', '403', 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', diff --git a/public/templates/account.tpl b/public/templates/account.tpl index 2579de2670..eba82fcc6f 100644 --- a/public/templates/account.tpl +++ b/public/templates/account.tpl @@ -1,15 +1,16 @@
- + - diff --git a/src/routes/user.js b/src/routes/user.js index 5902b10dc3..fe92c1913c 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -34,7 +34,8 @@ var user = require('./../user.js'), }); - app.get('/users/:username*', function(req, res) { + app.get('/users/:username', function(req, res) { + if(!req.params.username) { res.send("User doesn't exist!"); return; @@ -189,30 +190,33 @@ var user = require('./../user.js'), if(req.user.uid == req.body.uid) return res.redirect('/'); - user.addFriend(req.user.uid, req.body.uid, function(err, data) { - if(err) - res.send({error:err}); - else - res.send(data); + user.addFriend(req.user.uid, req.body.uid, function(data) { + res.send({data:data}); + }); + }); + + app.post('/users/removefriend', 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) { + res.send({data:data}); }); }); app.get('/users/:username/friends', function(req, res){ - + if(!req.user) return res.redirect('/403'); - user.get_uid_by_username(req.params.username, function(uid) { - user.getFriends(uid, function(data) { - res.send(JSON.stringify(data, null, 0)); - }); - }); + res.send(templates['header'] + app.create_route('users/'+req.params.username+'/friends','friends') + templates['footer']); }); function api_method(req, res) { - - var callerUID = req.user?req.user.uid : 0; if (!req.params.section && !req.params.username) { @@ -225,6 +229,14 @@ var user = require('./../user.js'), } else if(String(req.params.section).toLowerCase() === 'friends') { + getUserDataByUserName(req.params.username, callerUID, function(userData) { + + user.getFriends(userData.uid, function(friendsData){ + userData.friends = friendsData; + userData.friendCount = friendsData.length; + res.send(JSON.stringify(userData)); + }); + }); } else if (String(req.params.section).toLowerCase() === 'edit') { getUserDataByUserName(req.params.username, callerUID, function(userData) { diff --git a/src/templates.js b/src/templates.js index 30a14df328..2ad56e23ae 100644 --- a/src/templates.js +++ b/src/templates.js @@ -29,7 +29,7 @@ var fs = require('fs'); Templates.init = function() { loadTemplates([ - 'header', 'footer', 'register', 'home', 'topic', 'account', + 'header', 'footer', 'register', 'home', 'topic', 'account', 'friends', 'login', 'reset', 'reset_code', 'logout', '403', 'admin/header', 'admin/footer', 'admin/index', diff --git a/src/user.js b/src/user.js index 8d47e572b3..04d0af9ca0 100644 --- a/src/user.js +++ b/src/user.js @@ -64,6 +64,7 @@ var config = require('../config.js'), { if(data && data['password']) delete data['password']; + data.uid = uid; callback(data); } else @@ -365,8 +366,24 @@ var config = require('../config.js'), User.getFriends = function(uid, callback) { RDB.smembers('user:'+uid+':friends', function(err, data){ - if(err === null) - callback(data); + if(err === null){ + + var friendsData = []; + + if(data.length === 0) { + callback(friendsData); + return; + } + + for(var i=0, ii=data.length; i Date: Wed, 15 May 2013 14:30:03 -0400 Subject: [PATCH 2/5] add friend button invisible if user is already friend --- public/templates/account.tpl | 7 ++++++- src/routes/user.js | 7 ++++--- src/user.js | 12 +++++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/public/templates/account.tpl b/public/templates/account.tpl index eba82fcc6f..efc5d8099d 100644 --- a/public/templates/account.tpl +++ b/public/templates/account.tpl @@ -72,6 +72,8 @@ var theirid = '{theirid}'; (function() { + var isFriend = {isFriend}; + function addCommas(text) { return text.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"); } @@ -90,7 +92,10 @@ var theirid = '{theirid}'; if( yourid !== theirid) { editLink.hide(); - addFriendBtn.show(); + if(isFriend) + addFriendBtn.hide(); + else + addFriendBtn.show(); } else { addFriendBtn.hide(); diff --git a/src/routes/user.js b/src/routes/user.js index fe92c1913c..cfd82e4038 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -244,7 +244,10 @@ var user = require('./../user.js'), }); } else { getUserDataByUserName(req.params.username, callerUID, function(userData) { - res.send(JSON.stringify(userData)); + user.isFriend(callerUID, userData.theirid, function(isFriend) { + userData.isFriend = isFriend; + res.send(JSON.stringify(userData)); + }); }); } @@ -252,8 +255,6 @@ var user = require('./../user.js'), app.get('/api/users/:username?/:section?', api_method); - - function getUserDataByUserName(username, callerUID, callback) { user.get_uid_by_username(username, function(uid) { diff --git a/src/user.js b/src/user.js index 04d0af9ca0..4af1fc23b0 100644 --- a/src/user.js +++ b/src/user.js @@ -378,7 +378,7 @@ var config = require('../config.js'), for(var i=0, ii=data.length; i Date: Wed, 15 May 2013 14:46:49 -0400 Subject: [PATCH 3/5] only png jpg and gifs are allowed for image upload, increase profile image size to 256kb --- src/routes/user.js | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/routes/user.js b/src/routes/user.js index cfd82e4038..7af4fa3f31 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -91,20 +91,29 @@ var user = require('./../user.js'), if(!req.user) return res.redirect('/403'); - if(req.files.userPhoto.size > 131072) { + if(req.files.userPhoto.size > 262144) { res.send({ - error: 'Images must be smaller than 128kb!' + error: 'Images must be smaller than 256kb!' }); return; } + var allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']; + var type = req.files.userPhoto.type; + if(allowedTypes.indexOf(type) === -1) { + res.send({ + error: 'Allowed image types are png, jpg and gif!' + }); + return; + } + user.getUserField(req.user.uid, 'uploadedpicture', function(oldpicture) { if(!oldpicture) { uploadUserPicture(req.user.uid, req.files.userPhoto.name, req.files.userPhoto.path, res); return; } - + var index = oldpicture.lastIndexOf('/'); var filename = oldpicture.substr(index + 1); From d1041bedf48c700d949bde948e0705b5b1b99907 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 15 May 2013 15:01:05 -0400 Subject: [PATCH 4/5] imagemagick resizing --- package.json | 3 ++- src/routes/user.js | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 69583881ff..72e0ad08c3 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,8 @@ "marked": "0.2.8", "bcrypt": "0.7.5", "node-gyp": "0.9.5", - "async": "0.2.8" + "async": "0.2.8", + "node-imagemagick": "0.1.8" }, "devDependencies": {}, "optionalDependencies": {}, diff --git a/src/routes/user.js b/src/routes/user.js index 7af4fa3f31..ac8fa9a1b8 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -100,6 +100,8 @@ var user = require('./../user.js'), var allowedTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']; var type = req.files.userPhoto.type; + console.log(req.files.userPhoto); + if(allowedTypes.indexOf(type) === -1) { res.send({ error: 'Allowed image types are png, jpg and gif!' @@ -161,6 +163,17 @@ var user = require('./../user.js'), user.setUserField(uid, 'uploadedpicture', imageUrl); user.setUserField(uid, 'picture', imageUrl); + var im = require('node-imagemagick'); + + im.resize({ + srcPath: global.configuration['ROOT_DIRECTORY'] + uploadPath, + dstPath: global.configuration['ROOT_DIRECTORY'] + uploadPath, + width: 128 + }, function(err, stdout, stderr){ + if (err) + throw err; + }); + }); os.on('error', function(err) { From 09c80b82899f9b1e8dfbd37933359a2f1d3889c6 Mon Sep 17 00:00:00 2001 From: Baris Usakli Date: Wed, 15 May 2013 15:07:40 -0400 Subject: [PATCH 5/5] fixed unfollow button --- public/templates/account.tpl | 6 ++---- public/templates/friends.tpl | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/public/templates/account.tpl b/public/templates/account.tpl index efc5d8099d..91c76d4ad9 100644 --- a/public/templates/account.tpl +++ b/public/templates/account.tpl @@ -59,7 +59,7 @@
- Add Friend + Follow

@@ -104,16 +104,14 @@ var theirid = '{theirid}'; addFriendBtn.on('click', function() { $.post('/users/addfriend', {uid: theirid}, function(data) { + addFriendBtn.remove(); $('#user-action-alert').html('Friend Added!').show(); } ); return false; }); - - }); - }()); \ No newline at end of file diff --git a/public/templates/friends.tpl b/public/templates/friends.tpl index 233bafa3ad..57edeb8563 100644 --- a/public/templates/friends.tpl +++ b/public/templates/friends.tpl @@ -32,7 +32,7 @@ {friends.postcount} - Unfriend + Unfollow @@ -72,7 +72,7 @@ var friendCount = '{friendCount}'; $.post('/users/removefriend', {uid: friendid}, function(data) { - button.parent().remove(); + removeBtn.parent().remove(); } ); return false;