From 5c27ff44304038fcf668ad70f05837242019ef68 Mon Sep 17 00:00:00 2001 From: James Allen Date: Fri, 6 Jun 2014 14:24:45 +0100 Subject: [PATCH] Don't show diffs of deleted docs (much simpler) --- .../Features/Docstore/DocstoreManager.coffee | 9 ++++- .../Project/ProjectEntityHandler.coffee | 9 +++-- services/web/app/views/templates.jade | 11 ++++-- .../coffee/track-changes/DiffView.coffee | 39 +++++++++++-------- .../track-changes/TrackChangesManager.coffee | 2 - .../public/stylesheets/less/trackchanges.less | 13 ++++--- .../Docstore/DocstoreManagerTests.coffee | 16 ++++++++ .../Project/ProjectEntityHandlerTests.coffee | 6 +-- 8 files changed, 69 insertions(+), 36 deletions(-) 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", ->