From a3c529d23f3757ffd54171b27d741158a0706a63 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Mon, 8 May 2017 16:10:08 +0100 Subject: [PATCH 1/4] Update range tracker with new bulk method. --- .../coffee/ide/review-panel/RangesTracker.coffee | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee index 14193f628d..f589098440 100644 --- a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee +++ b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee @@ -100,6 +100,21 @@ load = () -> change = @getChange(change_id) return if !change? @_removeChange(change) + + removeChangeIds: (change_to_remove_ids) -> + return if !change_to_remove_ids?.length > 0 + i = @changes.length + remove_change_id = {} + for change_id in change_to_remove_ids + remove_change_id[change_id] = true + + while (i--) + if remove_change_id[@changes[i].id] + delete remove_change_id[@changes[i].id] + removed_change = @changes.splice(i, 1)[0] + @_markAsDirty removed_change, "change", "removed" + if Object.keys(remove_change_id).length == 0 + break validate: (text) -> for change in @changes From ac99422c26c5be3f0df99e752bb0041175f244d1 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Thu, 11 May 2017 11:32:12 +0100 Subject: [PATCH 2/4] Update ranges tracker. --- .../ide/review-panel/RangesTracker.coffee | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee index f589098440..4174dcdab0 100644 --- a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee +++ b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee @@ -108,13 +108,16 @@ load = () -> for change_id in change_to_remove_ids remove_change_id[change_id] = true - while (i--) - if remove_change_id[@changes[i].id] - delete remove_change_id[@changes[i].id] - removed_change = @changes.splice(i, 1)[0] - @_markAsDirty removed_change, "change", "removed" - if Object.keys(remove_change_id).length == 0 - break + remaining_changes = [] + + for change in @changes + if remove_change_id[change.id] + delete remove_change_id[change.id] + @_markAsDirty change, "change", "removed" + else + remaining_changes.push change + + @changes = remaining_changes validate: (text) -> for change in @changes From 36b4a8e6c2b38733eba10c9c1cb33f8c545e4fb7 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Mon, 15 May 2017 11:11:28 +0100 Subject: [PATCH 3/4] Update ranges tracker. --- .../coffee/ide/review-panel/RangesTracker.coffee | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee index 4174dcdab0..869d63159b 100644 --- a/services/web/public/coffee/ide/review-panel/RangesTracker.coffee +++ b/services/web/public/coffee/ide/review-panel/RangesTracker.coffee @@ -96,6 +96,20 @@ load = () -> break return change + getChanges: (change_ids) -> + changes_response = [] + ids_map = {} + + for change_id in change_ids + ids_map[change_id] = true + + for change in @changes + if ids_map[change.id] + delete ids_map[change.id] + changes_response.push change + + return changes_response + removeChangeId: (change_id) -> change = @getChange(change_id) return if !change? From 7f3c0ed5ac82569dbca2a1cfffb9c3ac99a1d738 Mon Sep 17 00:00:00 2001 From: Paulo Reis Date: Tue, 16 May 2017 14:27:06 +0100 Subject: [PATCH 4/4] 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)