diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index bc2d297112..ca12c815f4 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -25,14 +25,7 @@ define('forum/topic/posts', [ data.loggedIn = app.user.uid ? true : false; data.privileges = ajaxify.data.privileges; - data.posts.forEach(function (post) { - post.selfPost = !!app.user.uid && parseInt(post.uid, 10) === parseInt(app.user.uid, 10); - post.display_edit_tools = (ajaxify.data.privileges['posts:edit'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; - post.display_delete_tools = (ajaxify.data.privileges['posts:delete'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; - post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools; - post.display_move_tools = ajaxify.data.privileges.isAdminOrMod; - post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted); - }); + Posts.modifyPostsByPrivileges(data.posts); updatePostCounts(data.posts); @@ -46,6 +39,17 @@ define('forum/topic/posts', [ } }; + Posts.modifyPostsByPrivileges = function (posts) { + posts.forEach(function (post) { + post.selfPost = !!app.user.uid && parseInt(post.uid, 10) === parseInt(app.user.uid, 10); + post.display_edit_tools = (ajaxify.data.privileges['posts:edit'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; + post.display_delete_tools = (ajaxify.data.privileges['posts:delete'] && post.selfPost) || ajaxify.data.privileges.isAdminOrMod; + post.display_moderator_tools = post.display_edit_tools || post.display_delete_tools; + post.display_move_tools = ajaxify.data.privileges.isAdminOrMod; + post.display_post_menu = ajaxify.data.privileges.isAdminOrMod || (post.selfPost && !ajaxify.data.locked) || ((app.user.uid || ajaxify.data.postSharing.length) && !post.deleted); + }); + }; + function updatePostCounts(posts) { for (var i = 0; i < posts.length; ++i) { var cmp = components.get('user/postcount', posts[i].uid); diff --git a/public/src/client/topic/replies.js b/public/src/client/topic/replies.js index 64f5441ecd..ad461430be 100644 --- a/public/src/client/topic/replies.js +++ b/public/src/client/topic/replies.js @@ -1,8 +1,8 @@ 'use strict'; -/* globals define, app, ajaxify, bootbox, socket, templates, utils, config */ +/* globals define, app, ajaxify, socket */ -define('forum/topic/replies', ['navigator', 'components', 'translator'], function (navigator, components, translator) { +define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts'], function (navigator, components, posts) { var Replies = {}; @@ -19,7 +19,7 @@ define('forum/topic/replies', ['navigator', 'components', 'translator'], functio } function onRepliesClicked(button, tid) { - var post = button.parents('[data-pid]'); + var post = button.closest('[data-pid]'); var pid = post.data('pid'); var open = button.children('[component="post/replies/open"]'); var loading = button.children('[component="post/replies/loading"]'); @@ -40,16 +40,20 @@ define('forum/topic/replies', ['navigator', 'components', 'translator'], functio loading.addClass('hidden'); close.removeClass('hidden'); - templates.parse('partials/posts_list', data, function (html) { - translator.translate(html, function (translated) { - $('<div>', {component: 'post/replies'}).html(translated).hide().insertAfter(button).slideDown('fast'); - }); + posts.modifyPostsByPrivileges(data); + var tplData ={ + posts: data, + privileges: ajaxify.data.privileges, + loggedIn: !!app.user.uid, + hideReplies: true + }; + app.parseAndTranslate('topic', 'posts', tplData, function (html) { + $('<div>', {component: 'post/replies'}).html(html).hide().insertAfter(button).slideDown('fast'); }); }); } else if (close.is(':not(.hidden)')) { close.addClass('hidden'); open.removeClass('hidden'); - post.find('[component="post/replies"]').slideUp('fast', function () { $(this).remove(); }); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 9700db947c..c6ef158221 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -162,6 +162,9 @@ define('navigator', ['forum/pagination', 'components'], function (pagination, co }; navigator.updateTextAndProgressBar = function () { + if (!utils.isNumber(index)) { + return; + } index = index > count ? count : index; $('.pagination-block .pagination-text').translateHtml('[[global:pagination.out_of, ' + index + ', ' + count + ']]'); diff --git a/src/socket.io/posts.js b/src/socket.io/posts.js index a762aa127c..781970f11f 100644 --- a/src/socket.io/posts.js +++ b/src/socket.io/posts.js @@ -122,8 +122,23 @@ SocketPosts.getReplies = function (socket, pid, callback) { if (!utils.isNumber(pid)) { return callback(new Error('[[error:invalid-data]')); } + async.waterfall([ + function (next) { + posts.getPidsFromSet('pid:' + pid + ':replies', 0, -1, false, next); + }, + function (pids, next) { + privileges.posts.filter('read', pids, socket.uid, next); + }, + function (pids, next) { + posts.getPostsByPids(pids, socket.uid, next); + } + ], function (err, postData) { + if (err) { + return callback(err); + } - posts.getPostSummariesFromSet('pid:' + pid + ':replies', socket.uid, 0, -1, callback); + topics.addPostData(postData, socket.uid, callback); + }); };