mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	interim commit to thread moving
This commit is contained in:
		| @@ -23,8 +23,7 @@ body { | ||||
| 	background: #fdfdfd; | ||||
| } | ||||
|  | ||||
| // havent really decided what makes more sense tbh | ||||
| .none, .hide { | ||||
| .none { | ||||
| 	display: none !important; | ||||
| } | ||||
|  | ||||
| @@ -373,27 +372,66 @@ footer.footer { | ||||
| } | ||||
|  | ||||
| .category-purple { | ||||
| 	background: #ab1290; | ||||
| 	@color: #ab1290; | ||||
| 	background: @color; | ||||
| 	color: white; | ||||
|  | ||||
| 	&:hover { | ||||
| 		background: lighten(@color, 10%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| .category-darkblue { | ||||
| 	background: #004C66; | ||||
| 	@color: #004C66; | ||||
| 	background: @color; | ||||
| 	color: white; | ||||
|  | ||||
| 	&:hover { | ||||
| 		background: lighten(@color, 10%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| .category-blue { | ||||
| 	background: #0059B2; | ||||
| 	@color: #0059B2; | ||||
| 	background: @color; | ||||
| 	color: white; | ||||
|  | ||||
| 	&:hover { | ||||
| 		background: lighten(@color, 10%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| .category-darkgreen { | ||||
| 	background: #004000; | ||||
| 	@color: #004000; | ||||
| 	background: @color; | ||||
| 	color: white; | ||||
|  | ||||
| 	&:hover { | ||||
| 		background: lighten(@color, 10%); | ||||
| 	} | ||||
| } | ||||
| .category-orange { | ||||
| 	@color: #FF7A4D; | ||||
| 	color: white; | ||||
| 	background: #FF7A4D; | ||||
| 	background: @color; | ||||
|  | ||||
| 	&:hover { | ||||
| 		background: lighten(@color, 10%); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| .category-list { | ||||
| 	li { | ||||
| 		.inline-block; | ||||
| 		.pointer; | ||||
| 		padding: 0.5em 0; | ||||
| 		text-align: center; | ||||
| 		margin: 0.5em; | ||||
| 		-webkit-border-radius: 5px; | ||||
| 		-moz-border-radius: 5px; | ||||
| 		border-radius: 5px; | ||||
| 		padding: 0.5em; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| .hero-unit { | ||||
|   | ||||
| @@ -43,9 +43,29 @@ | ||||
| 		<li><a href="#" id="pin_thread"><i class="icon-pushpin"></i> Pin Thread</a></li> | ||||
| 		<li><a href="#" id="lock_thread"><i class="icon-lock"></i> Lock Thread</a></li> | ||||
| 		<li class="divider"></li> | ||||
| 		<li><a href="#" id="move_thread"><i class="icon-move"></i> Move Thread</a></li> | ||||
| 		<li class="divider"></li> | ||||
| 		<li><a href="#" id="delete_thread"><span class="text-error"><i class="icon-trash"></i> Delete Thread</span></a></li> | ||||
| 	</ul> | ||||
| </div> | ||||
| <div id="move_thread_modal" class="modal hide fade"> | ||||
| 	<div class="modal-header"> | ||||
| 		<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> | ||||
| 		<h3>Move Thread</h3> | ||||
| 	</div> | ||||
| 	<div class="modal-body"> | ||||
| 		<p id="categories-loading"><i class="icon-spin icon-refresh"></i> Loading Categories</p> | ||||
| 		<ul class="category-list"></ul> | ||||
| 		<div id="move-confirm" style="display: none;"> | ||||
| 			<hr /> | ||||
| 			<div class="alert">This topic will be moved to the category <strong><span id="confirm-category-name"></span></strong></div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| 	<div class="modal-footer"> | ||||
| 		<button type="button" class="btn" data-dismiss="modal" id="move_thread_cancel">Close</a> | ||||
| 		<button type="button" class="btn btn-primary" id="move_thread_commit" disabled>Move</a> | ||||
| 	</div> | ||||
| </div> | ||||
|  | ||||
|  | ||||
| <script type="text/javascript"> | ||||
| @@ -72,7 +92,9 @@ | ||||
| 			if (expose_tools === '1') { | ||||
| 				var deleteThreadEl = document.getElementById('delete_thread'), | ||||
| 					lockThreadEl = document.getElementById('lock_thread'), | ||||
| 					pinThreadEl = document.getElementById('pin_thread'); | ||||
| 					pinThreadEl = document.getElementById('pin_thread'), | ||||
| 					moveThreadEl = document.getElementById('move_thread'), | ||||
| 					moveThreadModal = $('#move_thread_modal'); | ||||
|  | ||||
| 				adminTools.style.visibility = 'inherit'; | ||||
|  | ||||
| @@ -88,7 +110,7 @@ | ||||
| 							socket.emit('api:topic.restore', { tid: tid }); | ||||
| 						} | ||||
| 					} | ||||
| 				}); | ||||
| 				}, false); | ||||
|  | ||||
| 				lockThreadEl.addEventListener('click', function(e) { | ||||
| 					e.preventDefault(); | ||||
| @@ -97,7 +119,7 @@ | ||||
| 					} else { | ||||
| 						socket.emit('api:topic.unlock', { tid: tid }); | ||||
| 					} | ||||
| 				}); | ||||
| 				}, false); | ||||
|  | ||||
| 				pinThreadEl.addEventListener('click', function(e) { | ||||
| 					e.preventDefault(); | ||||
| @@ -106,6 +128,83 @@ | ||||
| 					} else { | ||||
| 						socket.emit('api:topic.unpin', { tid: tid }); | ||||
| 					} | ||||
| 				}, false); | ||||
|  | ||||
| 				moveThreadEl.addEventListener('click', function(e) { | ||||
| 					e.preventDefault(); | ||||
| 					moveThreadModal.modal('show'); | ||||
| 				}, false); | ||||
| 				moveThreadModal.on('shown', function() { | ||||
| 					var loadingEl = document.getElementById('categories-loading'); | ||||
| 					if (loadingEl) { | ||||
| 						socket.once('api:categories.get', function(data) { | ||||
| 							// Render categories | ||||
| 							var	categoriesFrag = document.createDocumentFragment(), | ||||
| 								categoryEl = document.createElement('li'), | ||||
| 								numCategories = data.categories.length, | ||||
| 								modalBody = moveThreadModal.find('.modal-body'), | ||||
| 								categoriesEl = modalBody[0].getElementsByTagName('ul')[0], | ||||
| 								confirmDiv = document.getElementById('move-confirm'), | ||||
| 								confirmCat = confirmDiv.getElementsByTagName('span')[0], | ||||
| 								commitEl = document.getElementById('move_thread_commit'), | ||||
| 								cancelEl = document.getElementById('move_thread_cancel'), | ||||
| 								x, info, targetCid, targetCatLabel; | ||||
|  | ||||
| 							categoriesEl.className = 'category-list'; | ||||
| 							for(x=0;x<numCategories;x++) { | ||||
| 								info = data.categories[x]; | ||||
| 								categoryEl.className = info.blockclass; | ||||
| 								categoryEl.innerHTML = '<i class="' + info.icon + '"></i> ' + info.name; | ||||
| 								categoryEl.setAttribute('data-cid', info.cid); | ||||
| 								categoriesFrag.appendChild(categoryEl.cloneNode(true)); | ||||
| 							} | ||||
| 							categoriesEl.appendChild(categoriesFrag); | ||||
| 							modalBody[0].removeChild(loadingEl); | ||||
|  | ||||
| 							categoriesEl.addEventListener('click', function(e) { | ||||
| 								if (e.target.nodeName === 'LI') { | ||||
| 									confirmCat.innerHTML = e.target.innerHTML; | ||||
| 									confirmDiv.style.display = 'block'; | ||||
| 									targetCid = e.target.getAttribute('data-cid'); | ||||
| 									targetCatLabel = e.target.innerHTML; | ||||
| 									commitEl.disabled = false; | ||||
| 								} | ||||
| 							}, false); | ||||
|  | ||||
| 							commitEl.addEventListener('click', function() { | ||||
| 								if (!commitEl.disabled && targetCid) { | ||||
| 									commitEl.disabled = true; | ||||
| 									$(cancelEl).fadeOut(250); | ||||
| 									$(moveThreadModal).find('.modal-header button').fadeOut(250); | ||||
| 									commitEl.innerHTML = 'Moving <i class="icon-spin icon-refresh"></i>'; | ||||
|  | ||||
| 									socket.once('api:topic.move', function(data) { | ||||
| 										console.log(data); | ||||
| 										moveThreadModal.modal('hide'); | ||||
| 										if (data.status === 'ok') { | ||||
| 											app.alert({ | ||||
| 												'alert_id': 'thread_move', | ||||
| 												type: 'success', | ||||
| 												title: 'Topic Successfully Moved', | ||||
| 												message: 'This topic has been successfully moved to ' + targetCatLabel, | ||||
| 												timeout: 5000 | ||||
| 											}); | ||||
| 										} else { | ||||
| 											app.alert({ | ||||
| 												'alert_id': 'thread_move', | ||||
| 												type: 'error', | ||||
| 												title: 'Unable to Move Topic', | ||||
| 												message: 'This topic could not be moved to ' + targetCatLabel + '.<br />Please try again later', | ||||
| 												timeout: 5000 | ||||
| 											}); | ||||
| 										} | ||||
| 									}); | ||||
| 									socket.emit('api:topic.move', { tid: tid, cid: targetCid }); | ||||
| 								} | ||||
| 							}); | ||||
| 						}); | ||||
| 						socket.emit('api:categories.get'); | ||||
| 					} | ||||
| 				}); | ||||
| 			} | ||||
| 		}); | ||||
|   | ||||
| @@ -34,7 +34,7 @@ var	RDB = require('./redis.js'), | ||||
| 					'user_rep' : user_data[uid].reputation || 0, | ||||
| 					'gravatar' : user_data[uid].picture, | ||||
| 					'fav_star_class' : vote_data[pid] ? 'icon-star' : 'icon-star-empty', | ||||
| 					'display_moderator_tools' : uid == current_user ? 'show' : 'hide' | ||||
| 					'display_moderator_tools' : uid == current_user ? 'show' : 'none' | ||||
| 				}); | ||||
| 			} | ||||
|  | ||||
|   | ||||
| @@ -83,10 +83,10 @@ var	RDB = require('./redis.js'), | ||||
| 								'relativeTime': utils.relativeTime(timestamp[i]), | ||||
| 								'slug' : slug[i], | ||||
| 								'post_count' : postcount[i], | ||||
| 								'lock-icon': locked[i] === '1' ? 'icon-lock' : 'hide', | ||||
| 								'lock-icon': locked[i] === '1' ? 'icon-lock' : 'none', | ||||
| 								'deleted': deleted[i], | ||||
| 								'pinned': parseInt(pinned[i] || 0),	// For sorting purposes | ||||
| 								'pin-icon': pinned[i] === '1' ? 'icon-pushpin' : 'hide' | ||||
| 								'pin-icon': pinned[i] === '1' ? 'icon-pushpin' : 'none' | ||||
| 							}); | ||||
| 						} | ||||
|  | ||||
| @@ -287,4 +287,10 @@ var	RDB = require('./redis.js'), | ||||
| 			} | ||||
| 		}); | ||||
| 	} | ||||
|  | ||||
| 	Topics.move = function(tid, cid, socket) { | ||||
| 		moved = true;	// nibstayla | ||||
| 		if (moved) socket.emit('api:topic.move', { status: 'ok' }); | ||||
| 		else socket.emit('api:topic.move', { status: 'error' }); | ||||
| 	} | ||||
| }(exports)); | ||||
| @@ -200,6 +200,16 @@ var	SocketIO = require('socket.io').listen(global.server,{log:false}), | ||||
| 		socket.on('api:topic.unpin', function(data) { | ||||
| 			modules.topics.unpin(data.tid, uid, socket); | ||||
| 		}); | ||||
|  | ||||
| 		socket.on('api:categories.get', function() { | ||||
| 			modules.categories.get(function(categories) { | ||||
| 				socket.emit('api:categories.get', categories); | ||||
| 			}); | ||||
| 		}); | ||||
|  | ||||
| 		socket.on('api:topic.move', function(data) { | ||||
| 			modules.topics.move(data.tid, data.cid, socket); | ||||
| 		}); | ||||
| 	}); | ||||
| 	 | ||||
| }(SocketIO)); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user