diff --git a/services/web/public/coffee/track-changes/ChangeListView.coffee b/services/web/public/coffee/track-changes/ChangeListView.coffee index 36b190ee5f..ac8e918622 100644 --- a/services/web/public/coffee/track-changes/ChangeListView.coffee +++ b/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? diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index 99265838ee..62a7aaf524 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/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()