diff --git a/services/web/app/coffee/Features/Docstore/DocstoreManager.coffee b/services/web/app/coffee/Features/Docstore/DocstoreManager.coffee
index 44433d0f14..9a35e43c8b 100644
--- a/services/web/app/coffee/Features/Docstore/DocstoreManager.coffee
+++ b/services/web/app/coffee/Features/Docstore/DocstoreManager.coffee
@@ -30,9 +30,14 @@ module.exports = DocstoreManager =
logger.error err: error, project_id: project_id, "error getting all docs from docstore"
callback(error)
- getDoc: (project_id, doc_id, callback = (error, lines, rev) ->) ->
- logger.log project_id: project_id, doc_id: doc_id, "getting doc in docstore api"
+ getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev) ->) ->
+ if typeof(options) == "function"
+ callback = options
+ options = {}
+ logger.log project_id: project_id, doc_id: doc_id, options: options, "getting doc in docstore api"
url = "#{settings.apis.docstore.url}/project/#{project_id}/doc/#{doc_id}"
+ if options.include_deleted
+ url += "?include_deleted=true"
request.get {
url: url
json: true
diff --git a/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee b/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee
index ac9119d748..8559e1f64c 100644
--- a/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee
+++ b/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee
@@ -111,8 +111,11 @@ module.exports = ProjectEntityHandler =
logger.log sl_req_id: sl_req_id, project_id: project_id, "removing root doc"
Project.update {_id:project_id}, {$unset: {rootDoc_id: true}}, {}, callback
- getDoc: (project_id, doc_id, callback = (error, lines, rev) ->) ->
- DocstoreManager.getDoc project_id, doc_id, callback
+ getDoc: (project_id, doc_id, options = {}, callback = (error, lines, rev) ->) ->
+ if typeof(options) == "function"
+ callback = options
+ options = {}
+ DocstoreManager.getDoc project_id, doc_id, options, callback
addDoc: (project_or_id, folder_id, docName, docLines, sl_req_id, callback = (error, doc, folder_id) ->)=>
{callback, sl_req_id} = slReqIdHelper.getCallbackAndReqId(callback, sl_req_id)
@@ -138,7 +141,7 @@ module.exports = ProjectEntityHandler =
restoreDoc: (project_id, doc_id, name, callback = (error, doc, folder_id) ->) ->
# getDoc will return the deleted doc's lines, but we don't actually remove
# the deleted doc, just create a new one from its lines.
- ProjectEntityHandler.getDoc project_id, doc_id, (error, lines) ->
+ ProjectEntityHandler.getDoc project_id, doc_id, include_deleted: true, (error, lines) ->
return callback(error) if error?
ProjectEntityHandler.addDoc project_id, null, name, lines, callback
diff --git a/services/web/app/views/templates.jade b/services/web/app/views/templates.jade
index 81f3d12dc5..fc6b623590 100644
--- a/services/web/app/views/templates.jade
+++ b/services/web/app/views/templates.jade
@@ -470,11 +470,14 @@
script(type='text/template')#trackChangesDiffTemplate
.track-changes-diff-toolbar.btn-toolbar
- .number-of-changes {{ changes }} in {{ name }}
- a(href="#").restore.btn.btn-small.btn-danger Restore to before these changes
+ .change-info
+ .number-of-changes {{ changes }} in {{ name }}
+ a(href="#").restore.btn.btn-small.btn-danger Restore to before these changes
.deleted-info(style="display:none;")
- span This file has been deleted
- a(href="#").restore-deleted.btn.btn-small.btn-success Restore
+ strong {{ name }}
+ .controls
+ span This file has been deleted
+ a(href="#").restore-deleted.btn.btn-small.btn-success Restore
.track-changes-diff-editor
script(type='text/template')#changeListItemTemplate
diff --git a/services/web/public/coffee/track-changes/DiffView.coffee b/services/web/public/coffee/track-changes/DiffView.coffee
index 58e444f72f..d704ae6bb0 100644
--- a/services/web/public/coffee/track-changes/DiffView.coffee
+++ b/services/web/public/coffee/track-changes/DiffView.coffee
@@ -20,12 +20,13 @@ define [
@trigger "restore-deleted"
initialize: () ->
- @model.on "change:diff", () => @render()
+ if !@model.get("doc").get("deleted")
+ @model.on "change:diff", () => @render()
+ @model.fetch()
+ else
+ @render()
render: ->
- diff = @model.get("diff")
- return unless diff?
-
changes = @getNumberOfChanges()
html = Mustache.to_html @template, {
changes: "#{changes} change#{if changes == 1 then "" else "s"}"
@@ -33,22 +34,26 @@ define [
}
@$el.html(html)
- if !@model.get("from")? or !@model.get("to")? or changes == 0
- @$(".restore").hide()
-
if @model.get("doc").get("deleted")
- @$(".restore").hide()
+ @$(".change-info").hide()
@$(".deleted-info").show()
+ else
+ diff = @model.get("diff")
+ return unless diff?
+
+ if !@model.get("from")? or !@model.get("to")? or changes == 0
+ @$(".restore").hide()
+
+ @createAceEditor()
+ @aceEditor.setValue(@getPlainDiffContent())
+ @aceEditor.clearSelection()
+ @$ace = $(@aceEditor.renderer.container).find(".ace_scroller")
+ @insertMarkers()
+ @insertNameTag()
+ @insertMoreChangeLabels()
+ @bindToScrollEvents()
+ @scrollToFirstChange()
- @createAceEditor()
- @aceEditor.setValue(@getPlainDiffContent())
- @aceEditor.clearSelection()
- @$ace = $(@aceEditor.renderer.container).find(".ace_scroller")
- @insertMarkers()
- @insertNameTag()
- @insertMoreChangeLabels()
- @bindToScrollEvents()
- @scrollToFirstChange()
return @
remove: () ->
diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee
index 63cbaa871e..0c45197047 100644
--- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee
+++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee
@@ -184,8 +184,6 @@ define [
@ide.fileTreeManager.openDoc(doc_id)
, 1000
- @diff.fetch()
-
@ide.fileTreeManager.selectEntity(@doc_id)
diff --git a/services/web/public/stylesheets/less/trackchanges.less b/services/web/public/stylesheets/less/trackchanges.less
index 963e58fb16..1b8444686a 100644
--- a/services/web/public/stylesheets/less/trackchanges.less
+++ b/services/web/public/stylesheets/less/trackchanges.less
@@ -30,7 +30,7 @@
background-color: #282828;
color: white;
border-right: 1px solid white;
- .number-of-changes, .restore, .deleted-info {
+ .number-of-changes, .restore {
position: absolute;
}
.number-of-changes {
@@ -43,10 +43,13 @@
padding: 3px 9px;
}
.deleted-info {
- right: 10px;
- bottom: 5px;
- a {
- padding: 3px 9px;
+ .controls {
+ position: absolute;
+ right: 10px;
+ bottom: 5px;
+ a {
+ padding: 3px 9px;
+ }
}
}
}
diff --git a/services/web/test/UnitTests/coffee/Docstore/DocstoreManagerTests.coffee b/services/web/test/UnitTests/coffee/Docstore/DocstoreManagerTests.coffee
index 164a5f656f..c9eda7d1df 100644
--- a/services/web/test/UnitTests/coffee/Docstore/DocstoreManagerTests.coffee
+++ b/services/web/test/UnitTests/coffee/Docstore/DocstoreManagerTests.coffee
@@ -131,6 +131,22 @@ describe "DocstoreManager", ->
}, "error getting doc from docstore")
.should.equal true
+ describe "with include_deleted=true", ->
+ beforeEach ->
+ @request.get = sinon.stub().callsArgWith(1, null, statusCode: 204, @doc)
+ @DocstoreManager.getDoc @project_id, @doc_id, include_deleted: true, @callback
+
+ it "should get the doc from the docstore api (including deleted)", ->
+ @request.get
+ .calledWith({
+ url: "#{@settings.apis.docstore.url}/project/#{@project_id}/doc/#{@doc_id}?include_deleted=true"
+ json: true
+ })
+ .should.equal true
+
+ it "should call the callback with the lines, version and rev", ->
+ @callback.calledWith(null, @lines, @rev).should.equal true
+
describe "getAllDocs", ->
describe "with a successful response code", ->
beforeEach ->
diff --git a/services/web/test/UnitTests/coffee/Project/ProjectEntityHandlerTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectEntityHandlerTests.coffee
index 5145e4d64a..b16c7e1a03 100644
--- a/services/web/test/UnitTests/coffee/Project/ProjectEntityHandlerTests.coffee
+++ b/services/web/test/UnitTests/coffee/Project/ProjectEntityHandlerTests.coffee
@@ -286,7 +286,7 @@ describe 'ProjectEntityHandler', ->
beforeEach ->
@lines = ["mock", "doc", "lines"]
@rev = 5
- @DocstoreManager.getDoc = sinon.stub().callsArgWith(2, null, @lines, @rev)
+ @DocstoreManager.getDoc = sinon.stub().callsArgWith(3, null, @lines, @rev)
@ProjectEntityHandler.getDoc project_id, doc_id, @callback
it "should call the docstore", ->
@@ -346,14 +346,14 @@ describe 'ProjectEntityHandler', ->
@doc = { "mock": "doc" }
@folder_id = "mock-folder-id"
@callback = sinon.stub()
- @ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(2, null, @lines)
+ @ProjectEntityHandler.getDoc = sinon.stub().callsArgWith(3, null, @lines)
@ProjectEntityHandler.addDoc = sinon.stub().callsArgWith(4, null, @doc, @folder_id)
@ProjectEntityHandler.restoreDoc project_id, doc_id, @name, @callback
it 'should get the doc lines', ->
@ProjectEntityHandler.getDoc
- .calledWith(project_id, doc_id)
+ .calledWith(project_id, doc_id, include_deleted: true)
.should.equal true
it "should add a new doc with these doc lines", ->