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 fe4f8871f0..a08e8a93cb 100644 --- a/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee +++ b/services/web/public/coffee/ide/review-panel/controllers/ReviewPanelController.coffee @@ -225,6 +225,7 @@ define [ changed = false + # Assume we'll delete everything until we see it, then we'll remove it from this object delete_changes = {} for change_id, change of entries @@ -233,23 +234,40 @@ define [ for change_id, change of resolvedComments delete_changes[change_id] = true + potential_aggregate = false + prev_insertion = null + for change in rangesTracker.changes changed = true + aggregate_entry = false delete delete_changes[change.id] entries[change.id] ?= {} - - # Update in place to avoid a full DOM redraw via angular - metadata = {} - metadata[key] = value for key, value of change.metadata + + if potential_aggregate and change.op.d and change.op.p == prev_insertion.op.p + prev_insertion.op.i.length + aggregate_entry = true + new_entry = { type: if change.op.i then "insert" else "delete" content: change.op.i or change.op.d offset: change.op.p metadata: change.metadata } + + if aggregate_entry + new_entry.type = "agg-change" + new_entry.metadata.agg_op = entries[prev_insertion.id] + delete entries[prev_insertion.id] + for key, value of new_entry entries[change.id][key] = value + if change.op.i + potential_aggregate = true + prev_insertion = change + else + potential_aggregate = false + prev_insertion = null + if !$scope.users[change.metadata.user_id]? refreshChangeUsers(change.metadata.user_id) diff --git a/services/web/public/coffee/ide/review-panel/directives/aggregateChangeEntry.coffee b/services/web/public/coffee/ide/review-panel/directives/aggregateChangeEntry.coffee index dc3b79b840..46689193b2 100644 --- a/services/web/public/coffee/ide/review-panel/directives/aggregateChangeEntry.coffee +++ b/services/web/public/coffee/ide/review-panel/directives/aggregateChangeEntry.coffee @@ -13,7 +13,7 @@ define [ onIndicatorClick: "&" onBodyClick: "&" link: (scope, element, attrs) -> - scope.contentLimit = 40 + scope.contentLimit = 35 scope.isCollapsed = true scope.needsCollapsing = false @@ -26,5 +26,5 @@ define [ $timeout () -> scope.$emit "review-panel:layout" - # scope.$watch "entry.content.length", (contentLength) -> - # scope.needsCollapsing = contentLength > scope.contentLimit \ No newline at end of file + scope.$watch "entry.content.length + entry.metadata.agg_op.content.length", (contentLength) -> + scope.needsCollapsing = contentLength > scope.contentLimit \ No newline at end of file