| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* globals define, app, translator, templates, socket, bootbox */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define(['composer'], function(composer) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var PostTools = {}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	PostTools.init = function(tid, threadState) { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var topic_name = templates.get('topic_name'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('.topic').on('click', '.post_reply', function() { | 
					
						
							|  |  |  | 			var selectionText = '', | 
					
						
							|  |  |  | 				selection = window.getSelection ? window.getSelection() : document.selection.createRange(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if ($(selection.baseNode).parents('.post-content').length > 0) { | 
					
						
							|  |  |  | 				var snippet = selection.toString(); | 
					
						
							|  |  |  | 				if (snippet.length > 0) { | 
					
						
							|  |  |  | 					selectionText = '> ' + snippet.replace(/\n/g, '\n> '); | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			var username = getUserName($(this)) + ' ', | 
					
						
							|  |  |  | 				pid = getPid($(this)); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			if (threadState.locked !== '1') { | 
					
						
							|  |  |  | 				composer.newReply(tid, pid, topic_name, selectionText.length > 0 ? selectionText + '\n\n' + username : '' + username); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.quote', function() { | 
					
						
							|  |  |  | 			if (threadState.locked !== '1') { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 				var username = getUserName($(this)), | 
					
						
							|  |  |  | 					pid = getPid($(this)); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				socket.emit('posts.getRawPost', pid, function(err, post) { | 
					
						
							|  |  |  | 					if(err) { | 
					
						
							|  |  |  | 						return app.alertError(err.message); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					var quoted = ''; | 
					
						
							|  |  |  | 					if(post) { | 
					
						
							|  |  |  | 						quoted = '> ' + post.replace(/\n/g, '\n> ') + '\n\n'; | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 					if($('.composer').length) { | 
					
						
							|  |  |  | 						composer.addQuote(tid, pid, topic_name, username, quoted); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 					} else { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 						composer.newReply(tid, pid, topic_name, username + ' said:\n' + quoted); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 		$('#post-container').on('click', '.favourite', function() { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 			var method = $(this).attr('data-favourited') === 'false' ? 'posts.favourite' : 'posts.unfavourite'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			socket.emit(method, { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 				pid: getPid($(this)), | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 				room_id: app.currentRoom | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.upvote', function() { | 
					
						
							|  |  |  | 			var post = $(this).parents('.post-row'), | 
					
						
							|  |  |  | 				upvoted = post.find('.upvoted').length; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			socket.emit(upvoted ? 'posts.unvote' : 'posts.upvote' , { | 
					
						
							|  |  |  | 				pid: post.attr('data-pid'), | 
					
						
							|  |  |  | 				room_id: app.currentRoom | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.downvote', function() { | 
					
						
							|  |  |  | 			var post = $(this).parents('.post-row'), | 
					
						
							|  |  |  | 				downvoted = post.find('.downvoted').length; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			socket.emit(downvoted ? 'posts.unvote' : 'posts.downvote', { | 
					
						
							|  |  |  | 				pid: post.attr('data-pid'), | 
					
						
							|  |  |  | 				room_id: app.currentRoom | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.flag', function() { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			flagPost(getPid($(this))); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('shown.bs.dropdown', '.share-dropdown', function() { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			var pid = getPid($(this)); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 			$('#post_' + pid + '_link').val(window.location.protocol + '//' + window.location.host + window.location.pathname + '#' + pid); | 
					
						
							|  |  |  | 			// without the setTimeout can't select the text in the input
 | 
					
						
							|  |  |  | 			setTimeout(function() { | 
					
						
							|  |  |  | 				$('#post_' + pid + '_link').putCursorAtEnd().select(); | 
					
						
							|  |  |  | 			}, 50); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.post-link', function(e) { | 
					
						
							|  |  |  | 			e.preventDefault(); | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.twitter-share', function () { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			window.open('https://twitter.com/intent/tweet?url=' + encodeURIComponent(window.location.href + '#' + getPid($(this))) + '&text=' + topic_name, '_blank', 'width=550,height=420,scrollbars=no,status=no'); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.facebook-share', function () { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(window.location.href + '#' + getPid($(this))), '_blank', 'width=626,height=436,scrollbars=no,status=no'); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.google-share', function () { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			window.open('https://plus.google.com/share?url=' + encodeURIComponent(window.location.href + '#' + getPid($(this))), '_blank', 'width=500,height=570,scrollbars=no,status=no'); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.edit', function(e) { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			composer.editPost(getPid($(this))); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.delete', function(e) { | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 			deletePost($(this), tid); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.move', function(e) { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			openMovePostModal($(this)); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$('#post-container').on('click', '.chat', function(e) { | 
					
						
							|  |  |  | 			var post = $(this).parents('li.post-row'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			app.openChat(post.attr('data-username'), post.attr('data-uid')); | 
					
						
							|  |  |  | 			$(this).parents('.btn-group').find('.dropdown-toggle').click(); | 
					
						
							|  |  |  | 			return false; | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 	function getPid(button) { | 
					
						
							|  |  |  | 		return button.parents('.post-row').attr('data-pid'); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function getUserName(button) { | 
					
						
							|  |  |  | 		var username = '', | 
					
						
							|  |  |  | 			post = button.parents('li[data-pid]'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		if (post.length) { | 
					
						
							|  |  |  | 			username = '@' + post.attr('data-username').replace(/\s/g, '-'); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return username; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 	function deletePost(button, tid) { | 
					
						
							|  |  |  | 		var pid = getPid(button), | 
					
						
							|  |  |  | 			postEl = $(document.querySelector('#post-container li[data-pid="' + pid + '"]')), | 
					
						
							|  |  |  | 			action = !postEl.hasClass('deleted') ? 'delete' : 'restore'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		bootbox.confirm('Are you sure you want to ' + action + ' this post?', function(confirm) { | 
					
						
							|  |  |  | 			if (confirm) { | 
					
						
							|  |  |  | 				socket.emit('posts.' + action, { | 
					
						
							|  |  |  | 					pid: pid, | 
					
						
							|  |  |  | 					tid: tid | 
					
						
							|  |  |  | 				}, function(err) { | 
					
						
							|  |  |  | 					if(err) { | 
					
						
							|  |  |  | 						return app.alertError('Can\'t ' + action + ' post!'); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 	function openMovePostModal(button) { | 
					
						
							|  |  |  | 		var moveModal = $('#move-post-modal'), | 
					
						
							|  |  |  | 			moveBtn = moveModal.find('#move_post_commit'), | 
					
						
							|  |  |  | 			topicId = moveModal.find('#topicId'), | 
					
						
							|  |  |  | 			post = button.parents('.post-row'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		moveModal.removeClass('hide'); | 
					
						
							|  |  |  | 		moveModal.css("position", "fixed") | 
					
						
							|  |  |  | 			.css("left", Math.max(0, (($(window).width() - $(moveModal).outerWidth()) / 2) + $(window).scrollLeft()) + "px") | 
					
						
							|  |  |  | 			.css("top", "0px") | 
					
						
							|  |  |  | 			.css("z-index", "2000"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		moveModal.find('.close,#move_post_cancel').on('click', function() { | 
					
						
							|  |  |  | 			moveModal.addClass('hide'); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		topicId.on('change', function() { | 
					
						
							|  |  |  | 			if(topicId.val().length) { | 
					
						
							|  |  |  | 				moveBtn.removeAttr('disabled'); | 
					
						
							|  |  |  | 			} else { | 
					
						
							|  |  |  | 				moveBtn.attr('disabled', true); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		moveBtn.on('click', function() { | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 			movePost(post, getPid(button), topicId.val()); | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 	function movePost(post, pid, tid) { | 
					
						
							|  |  |  | 		socket.emit('topics.movePost', {pid: pid, tid: tid}, function(err) { | 
					
						
							|  |  |  | 			$('#move-post-modal').addClass('hide'); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 			if(err) { | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 				$('#topicId').val(''); | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 				return app.alertError(err.message); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 			post.fadeOut(500, function() { | 
					
						
							|  |  |  | 				post.remove(); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2014-03-19 15:04:56 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			$('#topicId').val(''); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			app.alertSuccess('Post moved!'); | 
					
						
							| 
									
										
										
										
											2014-03-19 14:53:31 -04:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function flagPost(pid) { | 
					
						
							|  |  |  | 		bootbox.confirm('Are you sure you want to flag this post?', function(confirm) { | 
					
						
							|  |  |  | 			if (confirm) { | 
					
						
							|  |  |  | 				socket.emit('posts.flag', pid, function(err) { | 
					
						
							|  |  |  | 					if(err) { | 
					
						
							|  |  |  | 						return app.alertError(err.message); | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					app.alertSuccess('This post has been flagged for moderation.'); | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-03-19 14:29:55 -04:00
										 |  |  | 	return PostTools; | 
					
						
							|  |  |  | }); |