James Allen 13 лет назад
Родитель
Сommit
dab2781e87
1 измененных файлов с 5 добавлено и 31 удалено
  1. 5 31
      services/track-changes/app/coffee/ConcatManager.coffee

+ 5 - 31
services/track-changes/app/coffee/ConcatManager.coffee

@@ -19,7 +19,7 @@ module.exports = ConcatManager =
 		for update in rawUpdates
 		for update in rawUpdates
 			lastCompressedUpdate = firstPass.pop()
 			lastCompressedUpdate = firstPass.pop()
 			if lastCompressedUpdate?
 			if lastCompressedUpdate?
-				firstPass = firstPass.concat ConcatManager._concatTwoUpdatesOfTheSameType lastCompressedUpdate, update
+				firstPass = firstPass.concat ConcatManager._concatTwoUpdates lastCompressedUpdate, update, false
 			else
 			else
 				firstPass.push rawUpdate
 				firstPass.push rawUpdate
 
 
@@ -28,7 +28,7 @@ module.exports = ConcatManager =
 		for update in firstPass
 		for update in firstPass
 			lastCompressedUpdate = secondPass.pop()
 			lastCompressedUpdate = secondPass.pop()
 			if lastCompressedUpdate?
 			if lastCompressedUpdate?
-				secondPass = secondPass.concat ConcatManager._cancelOppositeInsertsAndDeletes lastCompressedUpdate, update
+				secondPass = secondPass.concat ConcatManager._concatTwoUpdates lastCompressedUpdate, update, true
 			else
 			else
 				secondPass.push update
 				secondPass.push update
 
 
@@ -36,7 +36,7 @@ module.exports = ConcatManager =
 
 
 	MAX_TIME_BETWEEN_UPDATES: oneMinute = 60 * 1000
 	MAX_TIME_BETWEEN_UPDATES: oneMinute = 60 * 1000
 
 
-	_concatTwoUpdatesOfTheSameType: (firstUpdate, secondUpdate) ->
+	_concatTwoUpdates: (firstUpdate, secondUpdate, mergeInsertsAndDeletes) ->
 		firstUpdate =
 		firstUpdate =
 			op: firstUpdate.op
 			op: firstUpdate.op
 			meta:
 			meta:
@@ -82,34 +82,8 @@ module.exports = ConcatManager =
 					d: strInject(secondOp.d, firstOp.p - secondOp.p, firstOp.d)
 					d: strInject(secondOp.d, firstOp.p - secondOp.p, firstOp.d)
 				]
 				]
 			]
 			]
-		else
-			return [firstUpdate, secondUpdate]
-
-	_cancelOppositeInsertsAndDeletes: (firstUpdate, secondUpdate) ->
-		firstUpdate =
-			op: firstUpdate.op
-			meta:
-				user_id:  firstUpdate.meta.user_id or null
-				start_ts: firstUpdate.meta.start_ts or firstUpdate.meta.ts
-				end_ts:   firstUpdate.meta.end_ts   or firstUpdate.meta.ts
-		secondUpdate =
-			op: secondUpdate.op
-			meta:
-				user_id:  secondUpdate.meta.user_id or null
-				start_ts: secondUpdate.meta.start_ts or secondUpdate.meta.ts
-				end_ts:   secondUpdate.meta.end_ts   or secondUpdate.meta.ts
-
-		if firstUpdate.meta.user_id != secondUpdate.meta.user_id
-			return [firstUpdate, secondUpdate]
-
-		if secondUpdate.meta.start_ts - firstUpdate.meta.end_ts > ConcatManager.MAX_TIME_BETWEEN_UPDATES
-			return [firstUpdate, secondUpdate]
-
-		firstOp = firstUpdate.op[0]
-		secondOp = secondUpdate.op[0]
-
 		# An insert and then a delete
 		# An insert and then a delete
-		if firstOp.i? and secondOp.d? and firstOp.p <= secondOp.p <= (firstOp.p + firstOp.i.length)
+		if mergeInsertsAndDeletes and firstOp.i? and secondOp.d? and firstOp.p <= secondOp.p <= (firstOp.p + firstOp.i.length)
 			offset = secondOp.p - firstOp.p
 			offset = secondOp.p - firstOp.p
 			insertedText = firstOp.i.slice(offset, offset + secondOp.d.length)
 			insertedText = firstOp.i.slice(offset, offset + secondOp.d.length)
 			if insertedText == secondOp.d
 			if insertedText == secondOp.d
@@ -128,7 +102,7 @@ module.exports = ConcatManager =
 			else
 			else
 				# This shouldn't be possible!
 				# This shouldn't be possible!
 				return [firstUpdate, secondUpdate]
 				return [firstUpdate, secondUpdate]
-		else if firstOp.d? and secondOp.i? and firstOp.p  == secondOp.p
+		else if mergeInsertsAndDeletes and firstOp.d? and secondOp.i? and firstOp.p  == secondOp.p
 			offset = firstOp.d.indexOf(secondOp.i)
 			offset = firstOp.d.indexOf(secondOp.i)
 			if offset == -1
 			if offset == -1
 				return [firstUpdate, secondUpdate]
 				return [firstUpdate, secondUpdate]