diff --git a/public/src/app.js b/public/src/app.js index c29f24fa03..4be2beb8b9 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -297,8 +297,8 @@ var socket, }); } - app.makeNumbersHumanReadable = function() { - $('.human-readable-number').each(function() { + app.makeNumbersHumanReadable = function(selector) { + $(selector).each(function() { var num = parseInt($(this).html(), 10); $(this).html(utils.makeNumberHumanReadable(num)); }); @@ -312,7 +312,7 @@ var socket, $('span.timeago').timeago(); $('.post-content img').addClass('img-responsive'); - app.makeNumbersHumanReadable(); + app.makeNumbersHumanReadable('.human-readable-number'); app.createUserTooltips(); diff --git a/public/src/forum/topic.js b/public/src/forum/topic.js index e0628551e8..f805a4a510 100644 --- a/public/src/forum/topic.js +++ b/public/src/forum/topic.js @@ -291,8 +291,7 @@ define(function() { var pid = $(this).parents('li').attr('data-pid'); var uid = $(this).parents('li').attr('data-uid'); - var element = $(this).find('i'); - if ($(element).hasClass('fa-star-o')) { + if ($(this).attr('data-favourited') == 'false') { socket.emit('api:posts.favourite', { pid: pid, room_id: app.currentRoom @@ -542,7 +541,9 @@ define(function() { var favEl = document.querySelector('.post_rep_' + data.pid).nextSibling; if (favEl) { favEl.className = 'fa fa-star'; - $(favEl).parent().addClass('btn-warning'); + $(favEl).parent() + .addClass('btn-warning') + .attr('data-favourited', true); } } }); @@ -552,7 +553,9 @@ define(function() { var favEl = document.querySelector('.post_rep_' + data.pid).nextSibling; if (favEl) { favEl.className = 'fa fa-star-o'; - $(favEl).parent().removeClass('btn-warning'); + $(favEl).parent() + .removeClass('btn-warning') + .attr('data-favourited', false); } } }); @@ -866,10 +869,6 @@ define(function() { if(!data || (data.posts && !data.posts.length)) return; - if (data.posts[0].uid !== app.uid) { - data.posts[0].display_moderator_tools = 'none'; - } - function removeAlreadyAddedPosts() { data.posts = data.posts.filter(function(post) { return $('#post-container li[data-pid="' + post.pid +'"]').length === 0; diff --git a/public/src/templates.js b/public/src/templates.js index d933a7db74..d185b7c16e 100644 --- a/public/src/templates.js +++ b/public/src/templates.js @@ -241,7 +241,7 @@ } function makeConditionalRegex(block) { - return new RegExp("[\\s\\S]*", 'g'); + return new RegExp("([\\s\\S]*?)", 'g'); } function getBlock(regex, block, template) { @@ -311,37 +311,37 @@ } else { function checkConditional(key, value) { var conditional = makeConditionalRegex(key), - conditionalBlock = conditional.exec(template); - - if (conditionalBlock !== null) { - conditionalBlock = conditionalBlock[0].split(//); - - if (conditionalBlock[1]) { - // there is an else statement - if (!value) { - template = template.replace(conditional, conditionalBlock[1]); + matches = template.match(conditional); + + if (matches !== null) { + for (var i = 0, ii = matches.length; i < ii; i++) { + var conditionalBlock = matches[i].split(//); + + if (conditionalBlock[1]) { + // there is an else statement + if (!value) { + template = template.replace(matches[i], conditionalBlock[1]); + } else { + template = template.replace(matches[i], conditionalBlock[0]); + } } else { - template = template.replace(conditional, conditionalBlock[0]); + // regular if statement + if (!value) { + template = template.replace(matches[i], ''); + } } - - } else { - // regular if - if (!value) { - template = template.replace(conditional, ''); - } - } + } } } checkConditional(namespace + d, data[d]); checkConditional('!' + namespace + d, !data[d]); - + if (blockInfo) { checkConditional('@first', blockInfo.iterator === 0); checkConditional('@last', blockInfo.iterator === blockInfo.total); } - template = replace(namespace + d, data[d], template); } } diff --git a/public/templates/account.tpl b/public/templates/account.tpl index 6d5335ac42..7327cca25f 100644 --- a/public/templates/account.tpl +++ b/public/templates/account.tpl @@ -15,9 +15,11 @@
offline
-
+ +
banned
+
Follow Unfollow diff --git a/public/templates/topic.tpl b/public/templates/topic.tpl index b7755ccee2..2e2c09228f 100644 --- a/public/templates/topic.tpl +++ b/public/templates/topic.tpl @@ -36,7 +36,9 @@ @@ -64,9 +66,14 @@
-
@@ -82,10 +89,12 @@
+
- - + +
+
@@ -102,8 +111,10 @@ posted - | last edited by {posts.editorname} + + | last edited by {posts.editorname} +
diff --git a/src/feed.js b/src/feed.js index 7608648850..522edab086 100644 --- a/src/feed.js +++ b/src/feed.js @@ -29,7 +29,9 @@ Feed.updateTopic = function (tid, callback) { topics.getTopicWithPosts(tid, 0, 0, -1, function (err, topicData) { - if (err) return callback(new Error('topic-invalid')); + if (err) { + return callback(new Error('topic-invalid')); + } var feed = new rss({ title: topicData.topic_name, @@ -40,13 +42,14 @@ author: topicData.posts[0].username, ttl: Feed.defaults.ttl }), - topic_posts = topicData.posts.concat(topicData.posts), dateStamp; // Add pubDate if topic contains posts - if (topicData.posts.length > 0) feed.pubDate = new Date(parseInt(topicData.posts[0].timestamp, 10)).toUTCString(); + if (topicData.posts.length > 0) { + feed.pubDate = new Date(parseInt(topicData.posts[0].timestamp, 10)).toUTCString(); + } - async.each(topic_posts, function(postData, next) { + async.each(topicData.posts, function(postData, next) { if (postData.deleted === '0') { dateStamp = new Date(parseInt(postData.edited === '0' ? postData.timestamp : postData.edited, 10)).toUTCString(); @@ -65,7 +68,9 @@ winston.info('[rss] Re-generated RSS Feed for tid ' + tid + '.'); } - if (callback) callback(); + if (callback) { + callback(); + } }); }); diff --git a/src/posts.js b/src/posts.js index 4a885a0876..b3be7dfe66 100644 --- a/src/posts.js +++ b/src/posts.js @@ -54,18 +54,25 @@ var RDB = require('./redis'), 'reputation': 0, 'editor': '', 'edited': 0, - 'deleted': 0, - 'fav_button_class': '', - 'fav_star_class': 'fa-star-o', - 'show_banned': 'hide', - 'relativeTime': new Date(timestamp).toISOString(), - 'post_rep': '0', - 'edited-class': 'none', - 'relativeEditTime': '' + 'deleted': 0 + //TODO : write upgrade script to remove these fields from the database -barisu + //'fav_button_class': '', + //'fav_star_class': 'fa-star-o', + //'show_banned': 'hide', + //'relativeTime': new Date(timestamp).toISOString(), + //'post_rep': '0', + //'edited-class': 'none', + //'relativeEditTime': '' }; RDB.hmset('post:' + pid, postData); + postData.favourited = false; + postData.display_moderator_tools = true; + postData.relativeTime = new Date(timestamp).toISOString(); + //TODO : remove this once template bug is fixed -barisu (https://github.com/designcreateplay/NodeBB/issues/574) + postData.fav_star_class = 'fa-star-o'; + topics.addPostToTopic(tid, pid); topics.increasePostCount(tid); topics.updateTimestamp(tid, timestamp); @@ -178,7 +185,6 @@ var RDB = require('./redis'), if(err) { return callback(err, null); } - callback(null, postData); }); }); @@ -217,7 +223,7 @@ var RDB = require('./redis'), post.userslug = userData.userslug || ''; post.user_rep = userData.reputation || 0; post.user_postcount = userData.postcount || 0; - post.user_banned = userData.banned || '0'; + post.user_banned = userData.banned === '1'; post.picture = userData.picture || require('gravatar').url('', {}, https = nconf.get('https')); post.signature = signature; @@ -367,8 +373,6 @@ var RDB = require('./redis'), async.map(replies, function(postData, _callback) { if (postData) { - postData.post_rep = postData.reputation; - postData['edited-class'] = postData.editor !== '' ? '' : 'none'; try { postData.relativeTime = new Date(parseInt(postData.timestamp,10)).toISOString(); postData.relativeEditTime = postData.edited !== '0' ? (new Date(parseInt(postData.edited,10)).toISOString()) : ''; diff --git a/src/routes/user.js b/src/routes/user.js index 5bdee2c5d0..12610cbc59 100644 --- a/src/routes/user.js +++ b/src/routes/user.js @@ -535,18 +535,18 @@ var user = require('./../user.js'), return callerUID == uid || (data.email && (data.showemail && data.showemail === "1")); } - if (!canSeeEmail()) + if (!canSeeEmail()) { data.email = ""; + } - if (callerUID == uid && (!data.showemail || data.showemail === "0")) + if (callerUID == uid && (!data.showemail || data.showemail === "0")) { data.emailClass = ""; - else + } else { data.emailClass = "hide"; + } data.websiteName = data.website.replace('http://', '').replace('https://', ''); - - data.show_banned = data.banned === '1' ? '' : 'hide'; - + data.banned = data.banned === '1'; data.uid = uid; data.yourid = callerUID; data.theirid = uid; diff --git a/src/topics.js b/src/topics.js index b556e7cc88..4a9c7e977c 100644 --- a/src/topics.js +++ b/src/topics.js @@ -196,11 +196,10 @@ var RDB = require('./redis'), privileges = results[2]; for (var i = 0; i < postData.length; ++i) { + postData[i].favourited = fav_data[postData[i].pid] === 1; postData[i].fav_button_class = fav_data[postData[i].pid] ? 'btn-warning' : ''; postData[i].fav_star_class = fav_data[postData[i].pid] ? 'fa-star' : 'fa-star-o'; - postData[i]['display_moderator_tools'] = ((current_user != 0) && (postData[i].uid == current_user || privileges.editable)) ? 'show' : 'none'; - - postData[i].show_banned = postData[i].user_banned === '1' ? 'show' : 'hide'; + postData[i].display_moderator_tools = ((current_user != 0) && (postData[i].uid == current_user || privileges.editable)); } callback(postData);