From 687d29a44b7c276706c7359964a8cf6b5c976bc4 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Dec 2015 12:08:10 +0200 Subject: [PATCH] closes #2134 --- public/language/en_GB/topic.json | 2 + public/src/client/topic/delete-posts.js | 105 ++++++++++++++++++++++++ public/src/client/topic/fork.js | 81 +++++------------- public/src/client/topic/threadTools.js | 9 +- public/src/modules/postSelect.js | 59 +++++++++++++ src/socket.io/posts/tools.js | 18 ++++ 6 files changed, 214 insertions(+), 60 deletions(-) create mode 100644 public/src/client/topic/delete-posts.js create mode 100644 public/src/modules/postSelect.js diff --git a/public/language/en_GB/topic.json b/public/language/en_GB/topic.json index eb7a39030f..697db40556 100644 --- a/public/language/en_GB/topic.json +++ b/public/language/en_GB/topic.json @@ -59,6 +59,7 @@ "thread_tools.move_all": "Move All", "thread_tools.fork": "Fork Topic", "thread_tools.delete": "Delete Topic", + "thread_tools.delete-posts": "Delete Posts", "thread_tools.delete_confirm": "Are you sure you want to delete this topic?", "thread_tools.restore": "Restore Topic", "thread_tools.restore_confirm": "Are you sure you want to restore this topic?", @@ -90,6 +91,7 @@ "fork_topic_instruction": "Click the posts you want to fork", "fork_no_pids": "No posts selected!", "fork_success": "Successfully forked topic! Click here to go to the forked topic.", + "delete_posts_instruction": "Click the posts you want to delete/purge", "composer.title_placeholder": "Enter your topic title here...", "composer.handle_placeholder": "Name", diff --git a/public/src/client/topic/delete-posts.js b/public/src/client/topic/delete-posts.js new file mode 100644 index 0000000000..1a7ce5221b --- /dev/null +++ b/public/src/client/topic/delete-posts.js @@ -0,0 +1,105 @@ +'use strict'; + +/* globals define, app, ajaxify, socket, templates, translator */ + +define('forum/topic/delete-posts', ['components', 'postSelect'], function(components, postSelect) { + + var DeletePosts = {}, + modal, + deleteBtn, + purgeBtn; + + DeletePosts.init = function() { + $('.topic').on('click', '[component="topic/delete/posts"]', onDeletePostsClicked); + }; + + function onDeletePostsClicked() { + parseModal(function(html) { + modal = $(html); + + modal.on('hidden.bs.modal', function() { + modal.remove(); + }); + + deleteBtn = modal.find('#delete_posts_confirm'); + purgeBtn = modal.find('#purge_posts_confirm'); + + showModal(); + + modal.find('.close,#delete_posts_cancel').on('click', closeModal); + + postSelect.init(function() { + checkButtonEnable(); + showPostsSelected(); + }); + showPostsSelected(); + + deleteBtn.on('click', function() { + deletePosts(deleteBtn, 'posts.deletePosts'); + }); + purgeBtn.on('click', function() { + deletePosts(purgeBtn, 'posts.purgePosts'); + }); + }); + } + + function parseModal(callback) { + templates.parse('partials/delete_posts_modal', {}, function(html) { + translator.translate(html, callback); + }); + } + + function showModal() { + modal.modal({backdrop: false, show: true}) + .css('position', 'fixed') + .css('left', Math.max(0, (($(window).width() - modal.outerWidth()) / 2) + $(window).scrollLeft()) + 'px') + .css('top', '0px') + .css('z-index', '2000'); + } + + function deletePosts(btn, command) { + btn.attr('disabled', true); + socket.emit(command, { + tid: ajaxify.data.tid, + pids: postSelect.pids + }, function(err) { + btn.removeAttr('disabled'); + if (err) { + return app.alertError(err.message); + } + + closeModal(); + }); + } + + function showPostsSelected() { + if (postSelect.pids.length) { + modal.find('#pids').text(postSelect.pids.join(', ')); + } else { + modal.find('#pids').translateHtml('[[topic:fork_no_pids]]'); + } + } + + function checkButtonEnable() { + if (postSelect.pids.length) { + deleteBtn.removeAttr('disabled'); + purgeBtn.removeAttr('disabled'); + } else { + deleteBtn.attr('disabled', true); + purgeBtn.attr('disabled', true); + } + } + + function closeModal() { + postSelect.pids.forEach(function(pid) { + components.get('post', 'pid', pid).css('opacity', 1); + }); + + modal.modal('hide'); + + components.get('topic').off('click', '[data-pid]'); + postSelect.enableClicksOnPosts(); + } + + return DeletePosts; +}); diff --git a/public/src/client/topic/fork.js b/public/src/client/topic/fork.js index 4f6fa3ae9f..a55b45220c 100644 --- a/public/src/client/topic/fork.js +++ b/public/src/client/topic/fork.js @@ -2,29 +2,16 @@ /* globals define, app, ajaxify, socket, templates, translator */ -define('forum/topic/fork', ['components'], function(components) { +define('forum/topic/fork', ['components', 'postSelect'], function(components, postSelect) { var Fork = {}, forkModal, - forkCommit, - pids = []; + forkCommit; Fork.init = function() { $('.topic').on('click', '[component="topic/fork"]', onForkThreadClicked); }; - function disableClicks() { - return false; - } - - function disableClicksOnPosts() { - components.get('post').on('click', 'button,a', disableClicks); - } - - function enableClicksOnPosts() { - components.get('post').off('click', 'button,a', disableClicks); - } - function onForkThreadClicked() { parseModal(function(html) { forkModal = $(html); @@ -34,21 +21,19 @@ define('forum/topic/fork', ['components'], function(components) { }); forkCommit = forkModal.find('#fork_thread_commit'); - pids.length = 0; showForkModal(); - showNoPostsSelected(); forkModal.find('.close,#fork_thread_cancel').on('click', closeForkModal); forkModal.find('#fork-title').on('change', checkForkButtonEnable); - components.get('topic').on('click', '[data-pid]', function() { - togglePostSelection($(this)); - }); - disableClicksOnPosts(); + postSelect.init(function() { + checkForkButtonEnable(); + showPostsSelected(); + }); + showPostsSelected(); forkCommit.on('click', createTopicFromPosts); - }); } @@ -70,7 +55,7 @@ define('forum/topic/fork', ['components'], function(components) { forkCommit.attr('disabled', true); socket.emit('topics.createTopicFromPosts', { title: forkModal.find('#fork-title').val(), - pids: pids + pids: postSelect.pids }, function(err, newTopic) { function fadeOutAndRemove(pid) { components.get('post', 'pid', pid).fadeOut(500, function() { @@ -92,46 +77,24 @@ define('forum/topic/fork', ['components'], function(components) { } }); - for(var i=0; i