Sfoglia il codice sorgente

Refactor accept and reject methods to support multiple changes; support bulk actions events.

Paulo Reis 9 anni fa
parent
commit
7f3c0ed5ac

+ 32 - 25
services/web/public/coffee/ide/editor/directives/aceEditor/track-changes/TrackChangesManager.coffee

@@ -27,10 +27,16 @@ define [
 				@selectLineIfNoSelection()
 			
 			@$scope.$on "change:accept", (e, change_id) =>
-				@acceptChangeId(change_id)
+				@acceptChangeIds([ change_id ])
 			
 			@$scope.$on "change:reject", (e, change_id) =>
-				@rejectChangeId(change_id)
+				@rejectChangeIds([ change_id ])
+
+			@$scope.$on "change:bulk-accept", (e, change_ids) =>
+				@acceptChangeIds(change_ids)
+
+			@$scope.$on "change:bulk-reject", (e, change_ids) =>
+				@rejectChangeIds(change_ids)
 			
 			@$scope.$on "comment:remove", (e, comment_id) =>
 				@removeCommentId(comment_id)
@@ -207,31 +213,32 @@ define [
 			if @editor.selection.isEmpty()
 				@editor.selection.selectLine()
 		
-		acceptChangeId: (change_id) ->
-			@rangesTracker.removeChangeId(change_id)
+		acceptChangeIds: (change_ids) ->
+			@rangesTracker.removeChangeIds(change_ids)
 			@updateAnnotations()
-		
-		rejectChangeId: (change_id) ->
-			change = @rangesTracker.getChange(change_id)
-			return if !change?
+
+		rejectChangeIds: (change_ids) ->
+			changes = @rangesTracker.getChanges(change_ids)
+			return if changes.length == 0
 			session = @editor.getSession()
-			if change.op.d?
-				content = change.op.d
-				position = @_shareJsOffsetToAcePosition(change.op.p)
-				session.$fromReject = true # Tell track changes to cancel out delete
-				session.insert(position, content)
-				session.$fromReject = false
-			else if change.op.i?
-				start = @_shareJsOffsetToAcePosition(change.op.p)
-				end = @_shareJsOffsetToAcePosition(change.op.p + change.op.i.length)
-				editor_text = session.getDocument().getTextRange({start, end})
-				if editor_text != change.op.i
-					throw new Error("Op to be removed (#{JSON.stringify(change.op)}), does not match editor text, '#{editor_text}'")
-				session.$fromReject = true
-				session.remove({start, end})
-				session.$fromReject = false
-			else
-				throw new Error("unknown change: #{JSON.stringify(change)}")
+			for change in changes
+				if change.op.d?
+					content = change.op.d
+					position = @_shareJsOffsetToAcePosition(change.op.p)
+					session.$fromReject = true # Tell track changes to cancel out delete
+					session.insert(position, content)
+					session.$fromReject = false
+				else if change.op.i?
+					start = @_shareJsOffsetToAcePosition(change.op.p)
+					end = @_shareJsOffsetToAcePosition(change.op.p + change.op.i.length)
+					editor_text = session.getDocument().getTextRange({start, end})
+					if editor_text != change.op.i
+						throw new Error("Op to be removed (#{JSON.stringify(change.op)}), does not match editor text, '#{editor_text}'")
+					session.$fromReject = true
+					session.remove({start, end})
+					session.$fromReject = false
+				else
+					throw new Error("unknown change: #{JSON.stringify(change)}")
 
 		removeCommentId: (comment_id) ->
 			@rangesTracker.removeCommentId(comment_id)

+ 8 - 0
services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee

@@ -76,6 +76,14 @@ define [
 				$scope.$broadcast "change:accept", change_id
 			updateEntries(doc_id)
 			$scope.$apply () ->
+
+		ide.socket.on "accept-changes", (doc_id, change_ids) ->
+			if doc_id != $scope.editor.open_doc_id
+				getChangeTracker(doc_id).removeChangeIds(change_ids)
+			else
+				$scope.$broadcast "change:bulk-accept", change_ids
+			updateEntries(doc_id)
+			$scope.$apply () ->
 		
 		ide.socket.on "resolve-thread", (thread_id, user) ->
 			_onCommentResolved(thread_id, user)