diff --git a/public/css/style.less b/public/css/style.less index df1cfa44c0..0cf52a6dfd 100644 --- a/public/css/style.less +++ b/public/css/style.less @@ -580,7 +580,7 @@ footer.footer { width: 100%; height: 90px; text-align: center; - border-radius: 5px; + border-radius: 0px; margin: 0; padding-top:25px; cursor: pointer; @@ -588,7 +588,7 @@ footer.footer { } .category-row h4 { font-weight: 700; - text-align: center; + text-align: left; color: #555; white-space: nowrap; overflow: hidden; diff --git a/public/templates/category.tpl b/public/templates/category.tpl index 0d45345e9c..40ee2654a9 100644 --- a/public/templates/category.tpl +++ b/public/templates/category.tpl @@ -107,6 +107,9 @@ numTopics = topics.length, x; + jQuery('.category.row').show(); + jQuery('#category-no-topics').hide(); + topic.innerHTML = html; if (numTopics > 0) { for(x=0;x
-

{categories.name} {categories.topic_count}

+

{categories.topic_count} {categories.name}

diff --git a/src/favourites.js b/src/favourites.js new file mode 100644 index 0000000000..3737e1cc66 --- /dev/null +++ b/src/favourites.js @@ -0,0 +1,100 @@ +var RDB = require('./redis.js'), + user = require('./user.js'); + +(function(Favourites) { + + Favourites.favourite = function(pid, room_id, uid, socket) { + if (uid === 0) { + socket.emit('event:alert', { + alert_id: 'post_favourite', + title: 'Not Logged In', + message: 'Please log in in order to favourite this post', + type: 'error', + timeout: 5000 + }); + + socket.emit('api:posts.favourite', { + status: 'error', + pid: pid + }); + return; + } + + RDB.get('pid:' + pid + ':uid', function(err, uid_of_poster) { + RDB.handle(err); + + Favourites.hasFavourited(pid, uid, function(hasFavourited) { + if (hasFavourited == false) { + RDB.sadd('pid:' + pid + ':users_favourited', uid); + RDB.incr('pid:' + pid + ':rep'); + + if (uid !== uid_of_poster) user.incrementUserFieldBy(uid_of_poster, 'reputation', 1); + + if (room_id) { + io.sockets.in(room_id).emit('event:rep_up', {uid: uid !== uid_of_poster ? uid_of_poster : 0, pid: pid}); + } + + socket.emit('api:posts.favourite', { + status: 'ok' + }); + } + }); + }); + } + + Favourites.unfavourite = function(pid, room_id, uid, socket) { + if (uid === 0) { + socket.emit('event:alert', { + alert_id: 'post_favourite', + title: 'Not Logged In', + message: 'Please log in in order to favourite this post', + type: 'error', + timeout: 5000 + }); + return; + } + + RDB.get('pid:' + pid + ':uid', function(err, uid_of_poster) { + RDB.handle(err); + + Favourites.hasFavourited(pid, uid, function(hasFavourited) { + if (hasFavourited == true) { + + RDB.srem('pid:' + pid + ':users_favourited', uid); + RDB.decr('pid:' + pid + ':rep'); + + if (uid !== uid_of_poster) user.incrementUserFieldBy(uid_of_poster, 'reputation', -1); + + if (room_id) { + io.sockets.in(room_id).emit('event:rep_down', {uid: uid !== uid_of_poster ? uid_of_poster : 0, pid: pid}); + } + } + }); + }); + } + + Favourites.hasFavourited = function(pid, uid, callback) { + RDB.sismember('pid:' + pid + ':users_favourited', uid, function(err, hasFavourited) { + RDB.handle(err); + + callback(hasFavourited); + }); + } + + Favourites.getFavouritesByPostIDs = function(pids, uid, callback) { + var loaded = 0; + var data = {}; + + for (var i=0, ii=pids.length; i 0) { RDB.lpush('tid:' + tid + ':posts', pid); - // Notify any users looking at the category that a new post has arrived + // Notify any users looking at the category that a new topic has arrived Topics.get_topic(tid, uid, function(topicData) { io.sockets.in('category_' + category_id).emit('event:new_topic', topicData); }); diff --git a/src/websockets.js b/src/websockets.js index 7b31b5b3de..5db88cb5e8 100644 --- a/src/websockets.js +++ b/src/websockets.js @@ -5,6 +5,7 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), config = require('../config.js'), user = require('./user.js'), posts = require('./posts.js'), + favourites = require('./favourites.js'), utils = require('../public/src/utils.js'), topics = require('./topics.js'), categories = require('./categories.js'), @@ -70,6 +71,10 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), socket.on('disconnect', function() { user.go_offline(uid); delete users[hs.sessionID]; + var index = userSockets[uid].indexOf(socket); + if(index !== -1) { + userSockets[uid].splice(index, 1); + } }); socket.on('api:get_all_rooms', function(data) { @@ -181,11 +186,11 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), }); socket.on('api:posts.favourite', function(data) { - posts.favourite(data.pid, data.room_id, uid, socket); + favourites.favourite(data.pid, data.room_id, uid, socket); }); socket.on('api:posts.unfavourite', function(data) { - posts.unfavourite(data.pid, data.room_id, uid, socket); + favourites.unfavourite(data.pid, data.room_id, uid, socket); }); socket.on('api:user.active.get_record', function() { @@ -268,13 +273,13 @@ var SocketIO = require('socket.io').listen(global.server, { log:false }), user.getUserField(uid, 'username', function(username) { var finalMessage = username + ' says : ' + msg; - for(var x=0;x>numSockets;x++) { + for(var x=0;x