Automatically show a sensible diff to start

This commit is contained in:
James Allen
2014-03-12 17:09:11 +00:00
parent e0da6da4c6
commit 05443b85da
2 changed files with 51 additions and 28 deletions
@@ -7,7 +7,7 @@ define [
template: $("#changeListTemplate").html() template: $("#changeListTemplate").html()
events: events:
"scroll" : "loadUntilFull" "scroll" : () -> @loadUntilFull()
initialize: () -> initialize: () ->
@itemViews = [] @itemViews = []
@@ -39,20 +39,13 @@ define [
view.$el.insertBefore(elementAtIndex) view.$el.insertBefore(elementAtIndex)
view.on "click", (e, v) => view.on "click", (e, v) =>
@selectedToIndex = index @setSelectionRange(index, index)
@selectedFromIndex = index
@resetAllSelectors()
@triggerChangeDiff()
view.on "selected:to", (e, v) => view.on "selected:to", (e, v) =>
@selectedToIndex = index @setSelectionRange(@selectedFromIndex, index)
@resetAllSelectors()
@triggerChangeDiff()
view.on "selected:from", (e, v) => view.on "selected:from", (e, v) =>
@selectedFromIndex = index @setSelectionRange(index, @selectedToIndex)
@resetAllSelectors()
@triggerChangeDiff()
view.on "mouseenter:to", (e) => view.on "mouseenter:to", (e) =>
@hoverToIndex = index @hoverToIndex = index
@@ -75,6 +68,12 @@ define [
view.resetSelector(index, @selectedFromIndex, @selectedToIndex) view.resetSelector(index, @selectedFromIndex, @selectedToIndex)
setSelectionRange: (fromIndex, toIndex) ->
@selectedFromIndex = fromIndex
@selectedToIndex = toIndex
@resetAllSelectors()
@triggerChangeDiff()
resetAllSelectors: () -> resetAllSelectors: () ->
for view, i in @itemViews for view, i in @itemViews
view.resetSelector(i, @selectedFromIndex, @selectedToIndex) view.resetSelector(i, @selectedFromIndex, @selectedToIndex)
@@ -102,23 +101,23 @@ define [
atEndOfListView: -> atEndOfListView: ->
@$el.scrollTop() + @$el.height() >= @$(".change-list").height() - 30 @$el.scrollTop() + @$el.height() >= @$(".change-list").height() - 30
loadUntilFull: (e, callback) -> loadUntilFull: (callback = (error) ->) ->
if (@listShorterThanContainer() or @atEndOfListView()) and not @atEndOfCollection and not @loading if (@listShorterThanContainer() or @atEndOfListView()) and not @atEndOfCollection and not @loading
@showLoading() @showLoading()
@hideEmptyMessage() @hideEmptyMessage()
@collection.fetchNextBatch @collection.fetchNextBatch
error: => error: (error) =>
@hideLoading() @hideLoading()
@showEmptyMessageIfCollectionEmpty() @showEmptyMessageIfCollectionEmpty()
callback() if callback? callback(error)
success: (collection, response) => success: (collection, response) =>
@hideLoading() @hideLoading()
if response.updates.length == @collection.batchSize if response.updates.length == @collection.batchSize
@loadUntilFull(e, callback) @loadUntilFull(callback)
else else
@atEndOfCollection = true @atEndOfCollection = true
@showEmptyMessageIfCollectionEmpty() @showEmptyMessageIfCollectionEmpty()
callback() if callback? callback()
else else
callback() if callback? callback() if callback?
@@ -31,26 +31,50 @@ define [
el : @$el.find(".change-list-area") el : @$el.find(".change-list-area")
) )
@changeListView.render() @changeListView.render()
@changeListView.loadUntilFull() @changeListView.loadUntilFull (error) =>
@autoSelectDiff()
@changeListView.on "change_diff", (fromModel, toModel) => @changeListView.on "change_diff", (fromModel, toModel) =>
@diff = new Diff({ @showDiff(fromModel, toModel)
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()
@changeListView.on "restore", (change) => @changeListView.on "restore", (change) =>
@restore(change) @restore(change)
@showEl() @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: -> showEl: ->
@ide.editor.hide() @ide.editor.hide()
@$el.show() @$el.show()