diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index f47108c7e1..eb64299dde 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -168,22 +168,16 @@ define('forum/topic/events', [ } function togglePostFavourite(data) { - var favBtn = $('[data-pid="' + data.post.pid + '"] .favourite'); + var favBtn = $('[data-pid="' + data.post.pid + '"] [component="post/favourite"]'); + if (!favBtn.length) { return; } - favBtn.addClass('btn-warning') - .attr('data-favourited', data.isFavourited); + favBtn.attr('data-favourited', data.isFavourited); - var icon = favBtn.find('i'); - var className = icon.attr('class'); - if (!className) { - return; - } - if (data.isFavourited ? className.indexOf('-o') !== -1 : className.indexOf('-o') === -1) { - icon.attr('class', data.isFavourited ? className.replace('-o', '') : className + '-o'); - } + favBtn.find('[component="post/favourite/on"]').toggleClass('hidden', !data.isFavourited); + favBtn.find('[component="post/favourite/off"]').toggleClass('hidden', data.isFavourited); } function togglePostVote(data) { @@ -192,7 +186,6 @@ define('forum/topic/events', [ post.find('[component="post/downvote"]').toggleClass('downvoted', data.downvote); } - function onNewNotification(data) { var tid = ajaxify.variables.get('topic_id'); if (data && data.tid && parseInt(data.tid, 10) === parseInt(tid, 10)) { diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index 46a20d19b9..6cf70b112c 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -9,20 +9,13 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'comp ThreadTools.init = function(tid, threadState) { ThreadTools.threadState = threadState; - if (threadState.locked) { - ThreadTools.setLockedState({tid: tid, isLocked: true}); - } - - if (threadState.deleted) { - ThreadTools.setDeleteState({tid: tid, isDelete: true}); - } - - if (threadState.pinned) { - ThreadTools.setPinnedState({tid: tid, isPinned: true}); - } - components.get('topic/delete').on('click', function() { - topicCommand(threadState.deleted ? 'restore' : 'delete', tid); + topicCommand('delete', tid); + return false; + }); + + components.get('topic/restore').on('click', function() { + topicCommand('restore', tid); return false; }); @@ -32,19 +25,29 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'comp }); components.get('topic/lock').on('click', function() { - socket.emit(threadState.locked ? 'topics.unlock' : 'topics.lock', {tids: [tid], cid: ajaxify.variables.get('category_id')}); + socket.emit('topics.lock', {tids: [tid], cid: ajaxify.variables.get('category_id')}); + return false; + }); + + components.get('topic/unlock').on('click', function() { + socket.emit('topics.unlock', {tids: [tid], cid: ajaxify.variables.get('category_id')}); return false; }); components.get('topic/pin').on('click', function() { - socket.emit(threadState.pinned ? 'topics.unpin' : 'topics.pin', {tids: [tid], cid: ajaxify.variables.get('category_id')}); + socket.emit('topics.pin', {tids: [tid], cid: ajaxify.variables.get('category_id')}); + return false; + }); + + components.get('topic/unpin').on('click', function() { + socket.emit('topics.unpin', {tids: [tid], cid: ajaxify.variables.get('category_id')}); return false; }); components.get('topic/mark-unread-for-all').on('click', function() { var btn = $(this); socket.emit('topics.markAsUnreadForAll', [tid], function(err) { - if(err) { + if (err) { return app.alertError(err.message); } app.alertSuccess('[[topic:markAsUnreadForAll.success]]'); @@ -60,12 +63,13 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'comp fork.init(); - components.get('topic').on('click', '[component="topic/follow"]', follow); + components.get('topic').on('click', '[component="topic/follow"], [component="topic/unfollow"]', follow); components.get('topic/follow').off('click').on('click', follow); + components.get('topic/unfollow').off('click').on('click', follow); function follow() { socket.emit('topics.toggleFollow', tid, function(err, state) { - if(err) { + if (err) { return app.alert({ type: 'danger', alert_id: 'topic_follow', @@ -101,21 +105,20 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'comp ThreadTools.setLockedState = function(data) { var threadEl = components.get('topic'); - if (parseInt(data.tid, 10) === parseInt(threadEl.attr('data-tid'), 10)) { - var isLocked = data.isLocked && !app.user.isAdmin; - - components.get('topic/lock').translateHtml(' [[topic:thread_tools.' + (data.isLocked ? 'un': '') + 'lock]]'); - - translator.translate(isLocked ? '[[topic:locked]]' : '[[topic:reply]]', function(translated) { - var className = isLocked ? 'fa-lock' : 'fa-reply'; - threadEl.find('[component="post/reply"]').html(' ' + translated).attr('disabled', isLocked); - $('[component="topic/reply"]').attr('disabled', isLocked).html(isLocked ? ' ' + translated : translated); - }); - - threadEl.find('[component="post/quote"], [component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked); - $('[component="post/header"] i.fa-lock').toggleClass('hide', !data.isLocked); - ThreadTools.threadState.locked = data.isLocked; + if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) { + return; } + + var isLocked = data.isLocked && !app.user.isAdmin; + + components.get('topic/lock').toggleClass('hidden', data.isLocked); + components.get('topic/unlock').toggleClass('hidden', !data.isLocked); + components.get('topic/reply').toggleClass('hidden', isLocked); + components.get('topic/reply/locked').toggleClass('hidden', !isLocked); + + threadEl.find('[component="post/reply"], [component="post/quote"], [component="post/edit"], [component="post/delete"]').toggleClass('hidden', isLocked); + $('[component="post/header"] i.fa-lock').toggleClass('hidden', !data.isLocked); + ThreadTools.threadState.locked = data.isLocked; }; ThreadTools.setDeleteState = function(data) { @@ -124,48 +127,30 @@ define('forum/topic/threadTools', ['forum/topic/fork', 'forum/topic/move', 'comp return; } - components.get('topic/delete').translateHtml(' [[topic:thread_tools.' + (data.isDelete ? 'restore' : 'delete') + ']]'); + components.get('topic/delete').toggleClass('hidden', data.isDelete); + components.get('topic/restore').toggleClass('hidden', !data.isDelete); + components.get('topic/purge').toggleClass('hidden', !data.isDelete); + components.get('topic/deleted/message').toggleClass('hidden', !data.isDelete); threadEl.toggleClass('deleted', data.isDelete); ThreadTools.threadState.deleted = data.isDelete; - - components.get('topic/purge').toggleClass('hidden', !data.isDelete); - - if (data.isDelete) { - translator.translate('[[topic:deleted_message]]', function(translated) { - $('