Просмотр исходного кода

Merge branch 'master' into master-redesign

James Allen 12 лет назад
Родитель
Сommit
99705ebb4f

+ 1 - 1
services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee

@@ -9,7 +9,7 @@ module.exports =
 			title:"Reset Password"
 			title:"Reset Password"
 
 
 	requestReset: (req, res)->
 	requestReset: (req, res)->
-		email = req.body.email.trim()
+		email = req.body.email.trim().toLowerCase()
 		opts = 
 		opts = 
 			endpointName:"auto_compile"
 			endpointName:"auto_compile"
 			timeInterval:60
 			timeInterval:60

+ 0 - 4
services/web/app/coffee/router.coffee

@@ -293,10 +293,6 @@ module.exports = class Router
 				AuthorizationManager.ensureClientCanEditProject client, (error, project_id) =>
 				AuthorizationManager.ensureClientCanEditProject client, (error, project_id) =>
 					EditorController.setRootDoc(project_id, newRootDocID, callback)
 					EditorController.setRootDoc(project_id, newRootDocID, callback)
 
 
-			client.on 'deleteProject', (callback)->
-				AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) =>
-					EditorController.deleteProject(project_id, callback)
-
 			client.on 'setPublicAccessLevel', (newAccessLevel, callback)->
 			client.on 'setPublicAccessLevel', (newAccessLevel, callback)->
 				AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) =>
 				AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) =>
 					EditorController.setPublicAccessLevel(project_id, newAccessLevel, callback)
 					EditorController.setPublicAccessLevel(project_id, newAccessLevel, callback)

+ 4 - 0
services/web/public/coffee/file-tree/DeletedDocsFolderView.coffee

@@ -24,6 +24,10 @@ define [
 		hideToggle: () ->
 		hideToggle: () ->
 			@$(".js-toggle").hide()
 			@$(".js-toggle").hide()
 
 
+		makeReadOnly: () ->
+
+		makeReadWrite: () ->
+
 		
 		
 
 
 
 

+ 12 - 8
services/web/public/coffee/file-tree/EntityView.coffee

@@ -23,7 +23,8 @@ define [
 		render: () ->
 		render: () ->
 			@$el.append(Mustache.to_html @entityTemplate, @model.attributes)
 			@$el.append(Mustache.to_html @entityTemplate, @model.attributes)
 			@_bindToDomElements()
 			@_bindToDomElements()
-			@_makeEditable()
+			@_initializeRenameBox()
+			@_initializeDrag()
 			return @
 			return @
 
 
 		_bindToDomElements: () ->
 		_bindToDomElements: () ->
@@ -32,12 +33,6 @@ define [
 			@$entityListItemEl = @$el.children(".entity-list-item")
 			@$entityListItemEl = @$el.children(".entity-list-item")
 			@$labelEl = @$entityListItemEl.children(".entity-label")
 			@$labelEl = @$entityListItemEl.children(".entity-label")
 
 
-		_makeEditable: () ->
-			if @ide.isAllowedToDoIt "readAndWrite"
-				@_initializeRenameBox()
-				@_initializeDrag()
-			@hideRenameBox()
-
 		bindToModel: () ->
 		bindToModel: () ->
 			@model.on "change:name", (model) =>
 			@model.on "change:name", (model) =>
 				@$nameEl.text(model.get("name"))
 				@$nameEl.text(model.get("name"))
@@ -84,7 +79,7 @@ define [
 		onDoubleClick: (e) ->
 		onDoubleClick: (e) ->
 			e.preventDefault()
 			e.preventDefault()
 			e.stopPropagation()
 			e.stopPropagation()
-			if @ide.isAllowedToDoIt "readAndWrite"
+			if !@readonly
 				@startRename()
 				@startRename()
 
 
 		showContextMenuFromCaret: (e) ->
 		showContextMenuFromCaret: (e) ->
@@ -121,6 +116,7 @@ define [
 				delete @contextMenu
 				delete @contextMenu
 
 
 		getContextMenuEntries: () ->
 		getContextMenuEntries: () ->
+			return null if @readonly
 			return [{
 			return [{
 				text: "Rename"
 				text: "Rename"
 				onClick: () =>
 				onClick: () =>
@@ -171,5 +167,13 @@ define [
 			@manager.renameEntity(@model, name)
 			@manager.renameEntity(@model, name)
 			@hideRenameBox()
 			@hideRenameBox()
 
 
+		makeReadOnly: () ->
+			@$entityListItemEl.draggable("disable")
+			@readonly = true
+
+		makeReadWrite: () ->
+			@$entityListItemEl.draggable("enable")
+			delete @readonly
+
 			
 			
 
 

+ 15 - 0
services/web/public/coffee/file-tree/FileTreeManager.coffee

@@ -17,6 +17,7 @@ define [
 			@multiSelectedEntities = []
 			@multiSelectedEntities = []
 			@ide.on "afterJoinProject", (@project) =>
 			@ide.on "afterJoinProject", (@project) =>
 				@populateFileTree()
 				@populateFileTree()
+				@makeReadWriteIfAllowed()
 				@project_id = @project.id
 				@project_id = @project.id
 				if @ide.editor?.current_doc_id?
 				if @ide.editor?.current_doc_id?
 					@openDoc(@ide.editor.current_doc_id)
 					@openDoc(@ide.editor.current_doc_id)
@@ -312,3 +313,17 @@ define [
 
 
 		hideDeletedDocs: () ->
 		hideDeletedDocs: () ->
 			@deletedDocsView.$el.hide()
 			@deletedDocsView.$el.hide()
+
+		makeReadOnly: () ->
+			for id, view of @views or []
+				view.makeReadOnly?()
+
+		makeReadWrite: () ->
+			for id, view of @views or []
+				view.makeReadWrite?()
+
+		makeReadWriteIfAllowed: () ->
+			if @ide.isAllowedToDoIt("readAndWrite")
+				@makeReadWrite()
+			else
+				@makeReadOnly()

+ 1 - 0
services/web/public/coffee/file-tree/FolderView.coffee

@@ -123,6 +123,7 @@ define [
 				@showEntries()
 				@showEntries()
 
 
 		getContextMenuEntries: (args...) ->
 		getContextMenuEntries: (args...) ->
+			return null if @readonly
 			entries = EntityView::getContextMenuEntries.apply(this, args)
 			entries = EntityView::getContextMenuEntries.apply(this, args)
 			entries.push {
 			entries.push {
 				divider: true
 				divider: true

+ 9 - 4
services/web/public/coffee/file-tree/RootFolderView.coffee

@@ -36,8 +36,7 @@ define [
 				type: "project"
 				type: "project"
 			})
 			})
 			@_bindToDomElements()
 			@_bindToDomElements()
-			if @ide.isAllowedToDoIt("readAndWrite")
-				@renderActions()
+			@renderActions()
 			@hideRenameBox()
 			@hideRenameBox()
 			@hideToggle()
 			@hideToggle()
 			@renderEntries()
 			@renderEntries()
@@ -45,8 +44,8 @@ define [
 			return @
 			return @
 
 
 		renderActions: () ->
 		renderActions: () ->
-			actions = $(@actionsTemplate)
-			actions.insertAfter(@$entityListItemEl)
+			@$actions = $(@actionsTemplate)
+			@$actions.insertAfter(@$entityListItemEl)
 			@$(".js-new-entity-menu > a").dropdown()
 			@$(".js-new-entity-menu > a").dropdown()
 
 
 		onClick: () ->
 		onClick: () ->
@@ -61,6 +60,12 @@ define [
 		hideToggle: () ->
 		hideToggle: () ->
 			@$(".js-toggle").hide()
 			@$(".js-toggle").hide()
 
 
+		makeReadOnly: () ->
+			@$actions.hide()
+
+		makeReadWrite: () ->
+			@$actions.show()
+
 		
 		
 
 
 
 

+ 2 - 2
services/web/public/coffee/models/Project.coffee

@@ -36,11 +36,11 @@ define [
 			owner.set("privileges", "owner")
 			owner.set("privileges", "owner")
 			members.add owner
 			members.add owner
  
  
-			for rawMember in rawAttributes.members
+			for rawMember in rawAttributes.members or []
 				member = User.findOrBuild rawMember._id, rawMember
 				member = User.findOrBuild rawMember._id, rawMember
 				members.add member
 				members.add member
 
 
-			for doc in rawAttributes.deletedDocs
+			for doc in rawAttributes.deletedDocs or []
 				doc.deleted = true
 				doc.deleted = true
 
 
 			attributes.deletedDocs = new Folder({
 			attributes.deletedDocs = new Folder({

+ 3 - 7
services/web/public/coffee/pdf/PdfManager.coffee

@@ -125,11 +125,6 @@ define [
 					@_refreshPdfWhenProjectIsLoaded(opts)
 					@_refreshPdfWhenProjectIsLoaded(opts)
 
 
 		_refreshPdfWhenProjectIsLoaded: (opts = {}) ->
 		_refreshPdfWhenProjectIsLoaded: (opts = {}) ->
-			doneCompiling = _.once =>
-				@compiling = false
-				@view.doneCompiling()
-				@syncButtonsView?.show()
-			setTimeout doneCompiling, 1000 * 60
 
 
 			if !@ide.project.get("rootDoc_id")?
 			if !@ide.project.get("rootDoc_id")?
 				new Modal
 				new Modal
@@ -145,8 +140,9 @@ define [
 				@compiling = true
 				@compiling = true
 				@_doCompile opts, (error, status, outputFiles) =>
 				@_doCompile opts, (error, status, outputFiles) =>
 					@compiling = false
 					@compiling = false
-					doneCompiling()
-
+					@view.doneCompiling()
+					@syncButtonsView?.show()
+					
 					if error?
 					if error?
 						@view.updateLog(systemError: true)
 						@view.updateLog(systemError: true)
 						@view.unsetPdf()
 						@view.unsetPdf()

+ 8 - 3
services/web/public/coffee/settings/SettingsManager.coffee

@@ -38,9 +38,14 @@ define [
 			$("#deleteProject").click (event)=>
 			$("#deleteProject").click (event)=>
 				event.preventDefault()
 				event.preventDefault()
 				self = @
 				self = @
-				deleteProject = ->
-					self.ide.socket.emit 'deleteProject', ->
-						window.location = '/'
+				deleteProject = =>
+					$.ajax
+						url: "/Project/#{@ide.project_id}",
+						type: 'DELETE'
+						data:
+							_csrf: window.csrfToken
+						success: ->
+							window.location = '/'
 				modalOptions =
 				modalOptions =
 					templateId:'deleteEntityModal'
 					templateId:'deleteEntityModal'
 					isStatic: false
 					isStatic: false

+ 1 - 1
services/web/public/coffee/track-changes/DiffView.coffee

@@ -279,7 +279,7 @@ define [
 			@aceEditor.scrollToLine(@firstHiddenChangeAfter.range.end.row, true, false)
 			@aceEditor.scrollToLine(@firstHiddenChangeAfter.range.end.row, true, false)
 
 
 		resize: () ->
 		resize: () ->
-			@aceEditor.resize()
+			@aceEditor?.resize()
 
 
 	return DiffView
 	return DiffView
 
 

+ 9 - 1
services/web/public/coffee/track-changes/TrackChangesManager.coffee

@@ -72,6 +72,7 @@ define [
 			@ide.editor.disable()
 			@ide.editor.disable()
 			@ide.fileViewManager.disable()
 			@ide.fileViewManager.disable()
 
 
+			@ide.fileTreeManager.makeReadOnly()
 			@ide.fileTreeManager.showDeletedDocs()
 			@ide.fileTreeManager.showDeletedDocs()
 
 
 			@enable()
 			@enable()
@@ -93,9 +94,16 @@ define [
 			@ide.editor.enable()
 			@ide.editor.enable()
 			@ide.fileViewManager.enable()
 			@ide.fileViewManager.enable()
 			@disable()
 			@disable()
-			@ide.fileTreeManager.openDoc(@doc_id)
+
+			doc = @ide.fileTreeManager.getEntity(@doc_id, include_deleted: true)
+			if doc? and doc.get("deleted")
+				@ide.fileTreeManager.openDoc(@ide.project.get("rootDoc_id"))
+			else
+				@ide.fileTreeManager.openDoc(@doc_id)
+
 			@ide.tabManager.show "code"
 			@ide.tabManager.show "code"
 			@resetLabels()
 			@resetLabels()
+			@ide.fileTreeManager.makeReadWriteIfAllowed()
 			@ide.fileTreeManager.hideDeletedDocs()
 			@ide.fileTreeManager.hideDeletedDocs()
 
 
 		autoSelectDiff: () ->
 		autoSelectDiff: () ->

+ 11 - 0
services/web/test/UnitTests/coffee/PasswordReset/PasswordResetControllerTests.coffee

@@ -63,6 +63,17 @@ describe "PasswordResetController", ->
 				done()
 				done()
 			@PasswordResetController.requestReset @req, @res
 			@PasswordResetController.requestReset @req, @res
 
 
+		it "should lowercase the email address", (done)->
+			@email = "UPerCaseEMAIL@example.Com"
+			@req.body.email = @email
+			@RateLimiter.addCount.callsArgWith(1, null, true)
+			@PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1)
+			@res.send = (code)=>
+				code.should.equal 200
+				@PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.toLowerCase()).should.equal true
+				done()
+			@PasswordResetController.requestReset @req, @res
+
 	describe "setNewUserPassword", ->
 	describe "setNewUserPassword", ->
 
 
 		it "should tell the user handler to reset the password", (done)->
 		it "should tell the user handler to reset the password", (done)->