Эх сурвалжийг харах

Automatically show a sensible diff to start

James Allen 12 жил өмнө
parent
commit
05443b85da

+ 15 - 16
services/web/public/coffee/track-changes/ChangeListView.coffee

@@ -7,7 +7,7 @@ define [
 		template: $("#changeListTemplate").html()
 
 		events:
-			"scroll" : "loadUntilFull"
+			"scroll" : () -> @loadUntilFull()
 
 		initialize: () ->
 			@itemViews = []
@@ -39,20 +39,13 @@ define [
 			view.$el.insertBefore(elementAtIndex)
 
 			view.on "click", (e, v) =>
-				@selectedToIndex = index
-				@selectedFromIndex = index
-				@resetAllSelectors()
-				@triggerChangeDiff()
+				@setSelectionRange(index, index)
 
 			view.on "selected:to", (e, v) =>
-				@selectedToIndex = index
-				@resetAllSelectors()
-				@triggerChangeDiff()
+				@setSelectionRange(@selectedFromIndex, index)
 
 			view.on "selected:from", (e, v) =>
-				@selectedFromIndex = index
-				@resetAllSelectors()
-				@triggerChangeDiff()
+				@setSelectionRange(index, @selectedToIndex)
 
 			view.on "mouseenter:to", (e) =>
 				@hoverToIndex = index
@@ -75,6 +68,12 @@ define [
 
 			view.resetSelector(index, @selectedFromIndex, @selectedToIndex)
 
+		setSelectionRange: (fromIndex, toIndex) ->
+			@selectedFromIndex = fromIndex
+			@selectedToIndex = toIndex
+			@resetAllSelectors()
+			@triggerChangeDiff()
+
 		resetAllSelectors: () ->
 			for view, i in @itemViews
 				view.resetSelector(i, @selectedFromIndex, @selectedToIndex)
@@ -102,23 +101,23 @@ define [
 		atEndOfListView: ->
 			@$el.scrollTop() + @$el.height() >= @$(".change-list").height() - 30
 
-		loadUntilFull: (e, callback) ->
+		loadUntilFull: (callback = (error) ->) ->
 			if (@listShorterThanContainer() or @atEndOfListView()) and not @atEndOfCollection and not @loading
 				@showLoading()
 				@hideEmptyMessage()
 				@collection.fetchNextBatch
-					error: =>
+					error: (error) =>
 						@hideLoading()
 						@showEmptyMessageIfCollectionEmpty()
-						callback() if callback?
+						callback(error)
 					success: (collection, response) =>
 						@hideLoading()
 						if response.updates.length == @collection.batchSize
-							@loadUntilFull(e, callback)
+							@loadUntilFull(callback)
 						else
 							@atEndOfCollection = true
 							@showEmptyMessageIfCollectionEmpty()
-							callback() if callback?
+							callback()
 							
 			else
 				callback() if callback?

+ 36 - 12
services/web/public/coffee/track-changes/TrackChangesManager.coffee

@@ -31,26 +31,50 @@ define [
 				el         : @$el.find(".change-list-area")
 			)
 			@changeListView.render()
-			@changeListView.loadUntilFull()
+			@changeListView.loadUntilFull (error) =>
+				@autoSelectDiff()
 
 			@changeListView.on "change_diff", (fromModel, toModel) =>
-				@diff = new Diff({
-					project_id: @project_id
-					doc_id: @doc_id
-					from: fromModel.get("fromVersion")
-					to:   toModel.get("toVersion")
-				})
-				@diffView = new DiffView(
-					model: @diff
-					el:    @$el.find(".track-changes-diff")
-				)
-				@diff.fetch()
+				@showDiff(fromModel, toModel)
 
 			@changeListView.on "restore", (change) =>
 				@restore(change)
 
 			@showEl()
 
+		autoSelectDiff: () ->
+			if @changes.models.length == 0
+				return
+
+			# Find all change until the last one we made
+			fromIndex = null
+			for change, i in @changes.models
+				if ide.user in change.get("users")
+					if i > 0
+						fromIndex = i - 1
+					else
+						fromIndex = 0
+					break
+			fromIndex = 0 if !fromIndex
+
+			toChange = @changes.models[0]
+			fromChange = @changes.models[fromIndex]
+			@showDiff(fromChange, toChange)
+			@changeListView.setSelectionRange(fromIndex, 0)
+
+		showDiff: (fromModel, toModel) ->
+			@diff = new Diff({
+				project_id: @project_id
+				doc_id: @doc_id
+				from: fromModel.get("fromVersion")
+				to:   toModel.get("toVersion")
+			})
+			@diffView = new DiffView(
+				model: @diff
+				el:    @$el.find(".track-changes-diff")
+			)
+			@diff.fetch()
+
 		showEl: ->
 			@ide.editor.hide()
 			@$el.show()