Jelajahi Sumber

Show deleted documents when viewing history

James Allen 12 tahun lalu
induk
melakukan
cabaf1ae1a

+ 1 - 0
services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee

@@ -15,6 +15,7 @@ module.exports = ProjectEditorHandler =
 			description: project.description
 			description: project.description
 			spellCheckLanguage: project.spellCheckLanguage
 			spellCheckLanguage: project.spellCheckLanguage
 			deletedByExternalDataSource : project.deletedByExternalDataSource || false
 			deletedByExternalDataSource : project.deletedByExternalDataSource || false
+			deletedDocs: project.deletedDocs
 
 
 		if options.includeUsers
 		if options.includeUsers
 			result.features =
 			result.features =

+ 21 - 3
services/web/public/coffee/file-tree/FileTreeManager.coffee

@@ -3,11 +3,12 @@ define [
 	"models/File"
 	"models/File"
 	"models/Folder"
 	"models/Folder"
 	"file-tree/FileTreeView"
 	"file-tree/FileTreeView"
+	"file-tree/FolderView"
 	"utils/Effects"
 	"utils/Effects"
 	"utils/Modal"
 	"utils/Modal"
 	"libs/backbone"
 	"libs/backbone"
 	"libs/jquery.storage"
 	"libs/jquery.storage"
-], (Doc, File, Folder, FileTreeView, Effects, Modal) ->
+], (Doc, File, Folder, FileTreeView, FolderView, Effects, Modal) ->
 	class FileTreeManager
 	class FileTreeManager
 		constructor: (@ide) ->
 		constructor: (@ide) ->
 			_.extend(@, Backbone.Events)
 			_.extend(@, Backbone.Events)
@@ -37,6 +38,10 @@ define [
 
 
 		populateFileTree: () ->
 		populateFileTree: () ->
 			@view.bindToRootFolder(@project.get("rootFolder"))
 			@view.bindToRootFolder(@project.get("rootFolder"))
+			@deletedDocsView = new FolderView(model: @project.get("deletedDocs"), manager: @)
+			@deletedDocsView.render()
+			$("#sections").append(@deletedDocsView.$el)
+			@hideDeletedDocs()
 
 
 		listenForUpdates: () ->
 		listenForUpdates: () ->
 			@ide.socket.on 'reciveNewDoc', (folder_id, doc) =>
 			@ide.socket.on 'reciveNewDoc', (folder_id, doc) =>
@@ -100,8 +105,12 @@ define [
 			@ide.sideBarView.deselectAll()
 			@ide.sideBarView.deselectAll()
 			@views[entity_id]?.select()
 			@views[entity_id]?.select()
 
 
-		getEntity: (entity_id) ->
-			@views[entity_id]?.model
+		getEntity: (entity_id, options = {include_deleted: false}) ->
+			model = @views[entity_id]?.model
+			if !model? or (model.get("deleted") and !options.include_deleted)
+				return
+			else
+				return model
 
 
 		getSelectedEntity: () -> @getEntity(@selected_entity_id)
 		getSelectedEntity: () -> @getEntity(@selected_entity_id)
 		getSelectedEntityId: () -> @getSelectedEntity()?.id
 		getSelectedEntityId: () -> @getSelectedEntity()?.id
@@ -275,6 +284,8 @@ define [
 
 
 		_doDelete: (entity) ->
 		_doDelete: (entity) ->
 			@ide.socket.emit 'deleteEntity', entity.id, entity.get("type")
 			@ide.socket.emit 'deleteEntity', entity.id, entity.get("type")
+			if entity.get("type") == "doc"
+				@project.get("deletedDocs").get("children").add entity
 			@onDeleteEntity entity.id
 			@onDeleteEntity entity.id
 
 
 		onDeleteEntity: (entity_id) ->
 		onDeleteEntity: (entity_id) ->
@@ -286,3 +297,10 @@ define [
 			
 			
 		setLabels: (labels) ->
 		setLabels: (labels) ->
 			@view.setLabels(labels)
 			@view.setLabels(labels)
+			@deletedDocsView.setLabels(labels)
+
+		showDeletedDocs: () ->
+			@deletedDocsView.$el.show()
+
+		hideDeletedDocs: () ->
+			@deletedDocsView.$el.hide()

+ 1 - 0
services/web/public/coffee/models/Doc.coffee

@@ -9,3 +9,4 @@ define [
 			attributes =
 			attributes =
 				id: rawAttributes._id
 				id: rawAttributes._id
 				name: rawAttributes.name
 				name: rawAttributes.name
+				deleted: !!rawAttributes.deleted

+ 3 - 3
services/web/public/coffee/models/Folder.coffee

@@ -20,11 +20,11 @@ define [
 				id: rawAttributes._id
 				id: rawAttributes._id
 				name: rawAttributes.name
 				name: rawAttributes.name
 			children = []
 			children = []
-			for childFolder in rawAttributes.folders
+			for childFolder in rawAttributes.folders or []
 				children.push new Folder(childFolder, parse: true)
 				children.push new Folder(childFolder, parse: true)
-			for file in rawAttributes.fileRefs
+			for file in rawAttributes.fileRefs or []
 				children.push new File(file, parse: true)
 				children.push new File(file, parse: true)
-			for doc in rawAttributes.docs
+			for doc in rawAttributes.docs or []
 				children.push new Doc(doc, parse: true)
 				children.push new Doc(doc, parse: true)
 			attributes.children = new FolderChildren(children)
 			attributes.children = new FolderChildren(children)
 			return attributes
 			return attributes

+ 11 - 1
services/web/public/coffee/models/Project.coffee

@@ -2,8 +2,9 @@ define [
 	"models/User"
 	"models/User"
 	"models/ProjectMemberList"
 	"models/ProjectMemberList"
 	"models/Folder"
 	"models/Folder"
+	"models/Doc"
 	"libs/backbone"
 	"libs/backbone"
-], (User, ProjectMemberList, Folder) ->
+], (User, ProjectMemberList, Folder, Doc) ->
 	Project = Backbone.Model.extend
 	Project = Backbone.Model.extend
 		initialize: ->
 		initialize: ->
 			@on "change:ide", (project, ide) =>
 			@on "change:ide", (project, ide) =>
@@ -39,6 +40,15 @@ define [
 				member = User.findOrBuild rawMember._id, rawMember
 				member = User.findOrBuild rawMember._id, rawMember
 				members.add member
 				members.add member
 
 
+			for doc in rawAttributes.deletedDocs
+				doc.deleted = true
+
+			attributes.deletedDocs = new Folder({
+				_id: "deleted-docs-folder"
+				name: "Deleted documents"
+				docs: rawAttributes.deletedDocs
+			}, parse: true)
+
 			return attributes
 			return attributes
 	
 	
 		bindToRootDocId: ->
 		bindToRootDocId: ->

+ 4 - 0
services/web/public/coffee/track-changes/TrackChangesManager.coffee

@@ -71,6 +71,9 @@ define [
 			@ide.mainAreaManager.change "trackChanges"
 			@ide.mainAreaManager.change "trackChanges"
 			@ide.editor.disable()
 			@ide.editor.disable()
 			@ide.fileViewManager.disable()
 			@ide.fileViewManager.disable()
+
+			@ide.fileTreeManager.showDeletedDocs()
+
 			@enable()
 			@enable()
 
 
 		showUpgradeView: () ->
 		showUpgradeView: () ->
@@ -93,6 +96,7 @@ define [
 			@ide.fileTreeManager.openDoc(@doc_id)
 			@ide.fileTreeManager.openDoc(@doc_id)
 			@ide.tabManager.show "code"
 			@ide.tabManager.show "code"
 			@resetLabels()
 			@resetLabels()
+			@ide.fileTreeManager.hideDeletedDocs()
 
 
 		autoSelectDiff: () ->
 		autoSelectDiff: () ->
 			if @changes.models.length == 0
 			if @changes.models.length == 0

+ 1 - 1
services/web/public/coffee/track-changes/models/Change.coffee

@@ -21,6 +21,6 @@ define [
 					toV: data.toV
 					toV: data.toV
 					# TODO: We should not use a global reference here, but 
 					# TODO: We should not use a global reference here, but 
 					# it's hard to get @ide into Backbone at this point.
 					# it's hard to get @ide into Backbone at this point.
-					entity: ide.fileTreeManager.getEntity(doc_id)
+					entity: ide.fileTreeManager.getEntity(doc_id, include_deleted: true)
 
 
 			return model
 			return model

+ 8 - 0
services/web/test/UnitTests/coffee/Project/ProjectEditorHandlerTests.coffee

@@ -55,6 +55,10 @@ describe "ProjectEditorHandler", ->
 				last_name  : "Write"
 				last_name  : "Write"
 				email      : "read-write@sharelatex.com"
 				email      : "read-write@sharelatex.com"
 			}]
 			}]
+			deletedDocs: [{
+				_id: "deleted-doc-id"
+				name: "main.tex"
+			}]
 		@handler = SandboxedModule.require modulePath
 		@handler = SandboxedModule.require modulePath
 
 
 	describe "buildProjectModelView", ->
 	describe "buildProjectModelView", ->
@@ -85,6 +89,10 @@ describe "ProjectEditorHandler", ->
 				@result.owner.first_name.should.equal "Owner"
 				@result.owner.first_name.should.equal "Owner"
 				@result.owner.last_name.should.equal "ShareLaTeX"
 				@result.owner.last_name.should.equal "ShareLaTeX"
 				@result.owner.privileges.should.equal "owner"
 				@result.owner.privileges.should.equal "owner"
+
+			it "should include the deletedDocs", ->
+				should.exist @result.deletedDocs
+				@result.deletedDocs.should.equal @project.deletedDocs
 				
 				
 			it "should gather readOnly_refs and collaberators_refs into a list of members", ->
 			it "should gather readOnly_refs and collaberators_refs into a list of members", ->
 				findMember = (id) =>
 				findMember = (id) =>