From 7f3c0ed5ac82569dbca2a1cfffb9c3ac99a1d738 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Tue, 16 May 2017 14:27:06 +0100 Subject: [PATCH] Refactor accept and reject methods to support multiple changes; support bulk actions events. --- .../track-changes/TrackChangesManager.coffee | 57 +++++++++++-------- .../controllers/ReviewPanelController.coffee | 8 +++ 2 files changed, 40 insertions(+), 25 deletions(-) diff --git a/services/web/public/coffee/ide/editor/directives/aceEditor/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/ide/editor/directives/aceEditor/track-changes/TrackChangesManager.coffee index 0dd6a9f06b..e759b9c236 100644 --- a/services/web/public/coffee/ide/editor/directives/aceEditor/track-changes/TrackChangesManager.coffee +++ b/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) diff --git a/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee b/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee index cb17d53e04..46eb75aba0 100644 --- a/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee +++ b/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)