mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	feat: #8626, new move posts modal
This commit is contained in:
		| @@ -1,7 +1,5 @@ | ||||
| { | ||||
| 	"topic": "Topic", | ||||
| 	"topic_id": "Topic ID", | ||||
| 	"topic_id_placeholder": "Enter topic ID", | ||||
|  | ||||
| 	"no_topics_found": "No topics found!", | ||||
| 	"no_posts_found": "No posts found!", | ||||
| @@ -116,6 +114,9 @@ | ||||
| 	"fork_topic": "Fork Topic", | ||||
| 	"fork_topic_instruction": "Click the posts you want to fork", | ||||
| 	"fork_no_pids": "No posts selected!", | ||||
| 	"no-posts-selected": "No posts selected!", | ||||
| 	"x-posts-selected": "%1 post(s) selected", | ||||
| 	"x-posts-will-be-moved-to-y": "%1 post(s) will be moved to \"%2\"", | ||||
| 	"fork_pid_count": "%1 post(s) 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", | ||||
| @@ -124,7 +125,7 @@ | ||||
| 	"merge-options": "Merge options", | ||||
| 	"merge-select-main-topic": "Select the main topic", | ||||
| 	"merge-new-title-for-topic": "New title for topic", | ||||
| 	"move_posts_instruction": "Click the posts you want to move", | ||||
| 	"move_posts_instruction": "Click the posts you want to move then go to target topic and click move.", | ||||
| 	"change_owner_instruction": "Click the posts you want to assign to another user", | ||||
|  | ||||
| 	"composer.title_placeholder": "Enter your topic title here...", | ||||
|   | ||||
							
								
								
									
										12
									
								
								public/less/modals.less
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								public/less/modals.less
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| .tool-modal { | ||||
| 	position: fixed; | ||||
| 	bottom: 10%; | ||||
| 	right: 2rem; | ||||
| 	z-index: 1; | ||||
| } | ||||
|  | ||||
| @media screen and (min-width: @screen-sm-min) { | ||||
| 	.tool-modal { | ||||
| 		max-width: 33%; | ||||
| 	} | ||||
| } | ||||
| @@ -1,17 +1,21 @@ | ||||
| 'use strict'; | ||||
|  | ||||
|  | ||||
| define('forum/topic/move-post', ['components', 'postSelect'], function (components, postSelect) { | ||||
| define('forum/topic/move-post', [ | ||||
| 	'components', 'postSelect', 'translator', | ||||
| ], function (components, postSelect, translator) { | ||||
| 	var MovePost = {}; | ||||
|  | ||||
| 	var moveModal; | ||||
| 	var moveCommit; | ||||
| 	var fromTid; | ||||
|  | ||||
| 	MovePost.init = function (postEl) { | ||||
| 		if (moveModal) { | ||||
| 			return; | ||||
| 		} | ||||
| 		app.parseAndTranslate('partials/move_post_modal', {}, function (html) { | ||||
| 		fromTid = ajaxify.data.tid; | ||||
| 		app.parseAndTranslate('modals/move-post', {}, function (html) { | ||||
| 			moveModal = html; | ||||
|  | ||||
| 			moveCommit = moveModal.find('#move_posts_confirm'); | ||||
| @@ -19,7 +23,6 @@ define('forum/topic/move-post', ['components', 'postSelect'], function (componen | ||||
| 			$('body').append(moveModal); | ||||
|  | ||||
| 			moveModal.find('.close,#move_posts_cancel').on('click', closeMoveModal); | ||||
| 			moveModal.find('#topicId').on('keyup', checkMoveButtonEnable); | ||||
| 			postSelect.init(onPostToggled); | ||||
| 			showPostsSelected(); | ||||
|  | ||||
| @@ -27,6 +30,9 @@ define('forum/topic/move-post', ['components', 'postSelect'], function (componen | ||||
| 				postSelect.togglePostSelection(postEl, postEl.attr('data-pid')); | ||||
| 			} | ||||
|  | ||||
| 			$(window).off('action:axajify.end', checkMoveButtonEnable) | ||||
| 				.on('action:ajaxify.end', checkMoveButtonEnable); | ||||
|  | ||||
| 			moveCommit.on('click', function () { | ||||
| 				movePosts(); | ||||
| 			}); | ||||
| @@ -34,29 +40,45 @@ define('forum/topic/move-post', ['components', 'postSelect'], function (componen | ||||
| 	}; | ||||
|  | ||||
| 	function showPostsSelected() { | ||||
| 		if (!moveModal) { | ||||
| 			return; | ||||
| 		} | ||||
| 		if (postSelect.pids.length) { | ||||
| 			moveModal.find('#pids').translateHtml('[[topic:fork_pid_count, ' + postSelect.pids.length + ']]'); | ||||
| 			if (ajaxify.data.template.topic && ajaxify.data.tid && ajaxify.data.tid !== fromTid) { | ||||
| 				var translateStr = translator.compile('topic:x-posts-will-be-moved-to-y', postSelect.pids.length, ajaxify.data.title); | ||||
| 				moveModal.find('#pids').translateHtml(translateStr); | ||||
| 			} else { | ||||
| 				moveModal.find('#pids').translateHtml('[[topic:x-posts-selected, ' + postSelect.pids.length + ']]'); | ||||
| 			} | ||||
| 		} else { | ||||
| 			moveModal.find('#pids').translateHtml('[[topic:fork_no_pids]]'); | ||||
| 			moveModal.find('#pids').translateHtml('[[topic:no-posts-selected]]'); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	function checkMoveButtonEnable() { | ||||
| 		if (moveModal.find('#topicId').val().length && postSelect.pids.length) { | ||||
| 		if (!moveModal) { | ||||
| 			return; | ||||
| 		} | ||||
|  | ||||
| 		if (postSelect.pids.length && ajaxify.data.tid && | ||||
| 			ajaxify.data.template.topic && ajaxify.data.tid !== fromTid | ||||
| 		) { | ||||
| 			moveCommit.removeAttr('disabled'); | ||||
| 		} else { | ||||
| 			moveCommit.attr('disabled', true); | ||||
| 		} | ||||
| 		showPostsSelected(); | ||||
| 	} | ||||
|  | ||||
| 	function onPostToggled() { | ||||
| 		checkMoveButtonEnable(); | ||||
| 		showPostsSelected(); | ||||
| 	} | ||||
|  | ||||
| 	function movePosts() { | ||||
| 		var tid = moveModal.find('#topicId').val(); | ||||
| 		socket.emit('posts.movePosts', { pids: postSelect.pids, tid: tid }, function (err) { | ||||
| 		if (!ajaxify.data.template.topic || !ajaxify.data.tid) { | ||||
| 			return; | ||||
| 		} | ||||
| 		socket.emit('posts.movePosts', { pids: postSelect.pids, tid: ajaxify.data.tid }, function (err) { | ||||
| 			if (err) { | ||||
| 				return app.alertError(err.message); | ||||
| 			} | ||||
|   | ||||
| @@ -32,6 +32,7 @@ var buildImports = { | ||||
| 			'@import "../../public/less/generics.less";', | ||||
| 			'@import "../../public/less/mixins.less";', | ||||
| 			'@import "../../public/less/global.less";', | ||||
| 			'@import "../../public/less/modals.less";', | ||||
| 		].map(function (str) { | ||||
| 			return str.replace(/\//g, path.sep); | ||||
| 		}).join('\n'); | ||||
|   | ||||
							
								
								
									
										20
									
								
								src/views/modals/move-post.tpl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								src/views/modals/move-post.tpl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| <div class="panel panel-primary tool-modal"> | ||||
| 	<div class="panel-heading"> | ||||
| 		<h3 class="panel-title">[[topic:thread_tools.move-posts]]</h3> | ||||
| 	</div> | ||||
| 	<div class="panel-body"> | ||||
| 		<p> | ||||
|     		<strong><span id="pids"></span></strong> | ||||
|         </p> | ||||
|         <p class="help-block"> | ||||
|             [[topic:move_posts_instruction]] | ||||
|         </p> | ||||
| 	</div> | ||||
| 	<div class="panel-footer"> | ||||
| 		  | ||||
| 		<div class="btn-group pull-right"> | ||||
| 			<button class="btn btn-link btn-xs" id="move_posts_cancel">[[global:buttons.close]]</button> | ||||
| 			<button class="btn btn-primary btn-xs" id="move_posts_confirm" disabled>[[topic:move]]</button> | ||||
| 		</div> | ||||
| 	</div> | ||||
| </div> | ||||
		Reference in New Issue
	
	Block a user