From 6013017ffd60020e024372c28540790b9bad91ab Mon Sep 17 00:00:00 2001 From: Julian Lam <julian@designcreateplay.com> Date: Thu, 16 May 2013 11:23:57 -0400 Subject: [PATCH 1/4] fixing bug where the favourites star was still shaded in if an anon tried to favourite a post --- public/templates/topic.tpl | 11 +++++++++-- src/posts.js | 9 +++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index ed08976290..365004038c 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -280,7 +280,8 @@ 'event:rep_up', 'event:rep_down', 'event:new_post', 'api:get_users_in_room', 'event:topic_deleted', 'event:topic_restored', 'event:topic:locked', 'event:topic_unlocked', 'event:topic_pinned', 'event:topic_unpinned', - 'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored' + 'event:topic_moved', 'event:post_edited', 'event:post_deleted', 'event:post_restored', + 'api:posts.favourite' ]); socket.on('api:get_users_in_room', function(users) { var anonymous = users.anonymous, @@ -370,6 +371,13 @@ }); }); + socket.on('api:posts.favourite', function(data) { + if (data.status !== 'ok' && data.pid) { + var favEl = document.querySelector('.post_rep_' + data.pid).nextSibling; + if (favEl) favEl.className = 'icon-star-empty'; + } + }); + socket.on('event:post_deleted', function(data) { if (data.pid) toggle_post_delete_state(data.pid, true); }); @@ -420,7 +428,6 @@ pid = ids[0], uid = ids[1]; - if (thread_state.locked !== '1') { if (this.children[1].className == 'icon-star-empty') { this.children[1].className = 'icon-star'; diff --git a/src/posts.js b/src/posts.js index e14f67e889..42a98c83e8 100644 --- a/src/posts.js +++ b/src/posts.js @@ -277,6 +277,11 @@ marked.setOptions({ type: 'error', timeout: 5000 }); + + socket.emit('api:posts.favourite', { + status: 'error', + pid: pid + }); return; } @@ -293,6 +298,10 @@ marked.setOptions({ 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' + }); } }); }); From 9d5f6364ade6dc0082765e79487988b58c6a4394 Mon Sep 17 00:00:00 2001 From: Baris Usakli <barisusakli@gmail.com> Date: Thu, 16 May 2013 11:53:27 -0400 Subject: [PATCH 2/4] removed console.logs --- public/src/app.js | 1 + src/routes/user.js | 6 ++---- src/user.js | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index a82c730ee2..b8d2afd710 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -36,6 +36,7 @@ var socket, $('#disconnect-modal').show(); $('#reload-button').on('click',function(){ $('#disconnect-modal').hide(); + console.log(window.location.href); window.location.reload(); }); }); diff --git a/src/routes/user.js b/src/routes/user.js index caff2c837d..6e74a88653 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -101,8 +101,6 @@ 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!' @@ -284,9 +282,9 @@ var user = require('./../user.js'), user.getUserData(uid, function(data) { if(data) { - console.log(data.joindate); + data.joindate = utils.relativeTime(data.joindate); - console.log(data.joindate); + if(!data.birthday) data.age = ''; else diff --git a/src/user.js b/src/user.js index e378f40bb4..6cc5a39dbc 100644 --- a/src/user.js +++ b/src/user.js @@ -80,7 +80,7 @@ var config = require('../config.js'), for(var i=0,ii=fields.length; i<ii; ++i) { key = fields[i]; if(data[key] !== undefined) { - console.log(data[key]); + User.setUserField(uid, key, data[key]); if(key === 'email') { From 34432773d664a8e3862d0eca373e90aa97acc684 Mon Sep 17 00:00:00 2001 From: Baris Usakli <barisusakli@gmail.com> Date: Thu, 16 May 2013 12:13:39 -0400 Subject: [PATCH 3/4] fix crash when you go to /topics/nonexistant --- public/src/templates.js | 7 +++++++ src/posts.js | 6 ++++++ src/topics.js | 6 ++++++ src/webserver.js | 20 ++++++++++++++++++++ 4 files changed, 39 insertions(+) diff --git a/public/src/templates.js b/public/src/templates.js index 3c0f40531d..c2b75a4779 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -40,6 +40,7 @@ var templates = {}; for (var t in templatesToLoad) { (function(file) { $.get('/templates/' + file + '.tpl?v=' + timestamp, function(html) { + var template = function() { this.toString = function() { return this.html; @@ -168,6 +169,12 @@ function load_template(callback, url, template) { jQuery.get(API_URL + url, function(data) { + console.log(data); + if(!data) { + window.location.href = '/403'; + return; + } + var tpl = templates.get_custom_map(url); if (tpl == false && !templates[url]) { diff --git a/src/posts.js b/src/posts.js index 42a98c83e8..9b56403f68 100644 --- a/src/posts.js +++ b/src/posts.js @@ -12,6 +12,7 @@ marked.setOptions({ (function(Posts) { Posts.get = function(callback, tid, current_user, start, end) { + if (start == null) start = 0; if (end == null) end = start + 10; @@ -74,6 +75,11 @@ marked.setOptions({ // get all data for thread in asynchronous fashion RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) { RDB.handle(err); + + if(pids.length === 0){ + callback(false); + return; + } var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = [], deleted = []; diff --git a/src/topics.js b/src/topics.js index ead41792d1..0e2efd92d5 100644 --- a/src/topics.js +++ b/src/topics.js @@ -20,6 +20,12 @@ var RDB = require('./redis.js'), var range_var = (category_id) ? 'categories:' + category_id + ':tid' : 'topics:tid'; RDB.smembers(range_var, function(err, tids) { + + if(tids.length === 0) { + callback(false); + return; + } + var title = [], uid = [], timestamp = [], diff --git a/src/webserver.js b/src/webserver.js index 3de6acdc98..4202bfb575 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -154,26 +154,46 @@ var express = require('express'), break; case 'topic' : posts.get(function(data) { + if(!data) { + res.send(false); + return; + } res.send(JSON.stringify(data)); }, req.params.id, (req.user) ? req.user.uid : 0); break; case 'category' : topics.get(function(data) { + if(!data) { + res.send(false); + return; + } res.send(JSON.stringify(data)); }, req.params.id, (req.user) ? req.user.uid : 0); break; case 'latest' : topics.get(function(data) { + if(!data) { + res.send(false); + return; + } res.send(JSON.stringify(data)); }); break; case 'popular' : topics.get(function(data) { + if(!data) { + res.send(false); + return; + } res.send(JSON.stringify(data)); }); break; case 'active' : topics.get(function(data) { + if(!data) { + res.send(false); + return; + } res.send(JSON.stringify(data)); }); break; From 96df6abe85d720ef978ff3eeb9ba64301af6cab7 Mon Sep 17 00:00:00 2001 From: Baris Usakli <barisusakli@gmail.com> Date: Thu, 16 May 2013 12:21:13 -0400 Subject: [PATCH 4/4] broken posts --- src/posts.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/posts.js b/src/posts.js index 9b56403f68..2c74859dcb 100644 --- a/src/posts.js +++ b/src/posts.js @@ -75,12 +75,7 @@ marked.setOptions({ // get all data for thread in asynchronous fashion RDB.lrange('tid:' + tid + ':posts', start, end, function(err, pids) { RDB.handle(err); - - if(pids.length === 0){ - callback(false); - return; - } - + var content = [], uid = [], timestamp = [], pid = [], post_rep = [], editor = [], editTime = [], deleted = []; for (var i=0, ii=pids.length; i<ii; i++) {