ソースを参照

Allow root doc to be set

James Allen 12 年 前
親
コミット
2b85ebf8ec

+ 8 - 0
services/web/app/views/project/editor/left-menu.jade

@@ -68,6 +68,14 @@ aside#left-menu.full-size(
 					option(value='latex') LaTeX
 					option(value='latex') LaTeX
 					option(value='xelatex') XeLaTeX
 					option(value='xelatex') XeLaTeX
 					option(value='lualatex') LuaLaTeX
 					option(value='lualatex') LuaLaTeX
+					
+			.form-controls
+				label(for="rootDoc_id") Main document
+				select(
+					name="rootDoc_id",
+					ng-model="project.rootDoc_id",
+					ng-options="doc.doc.id as doc.path for doc in docs"
+				)
 
 
 			.form-controls
 			.form-controls
 				label(for="spellCheckLanguage") Spell Check
 				label(for="spellCheckLanguage") Spell Check

+ 35 - 5
services/web/public/coffee/ide/file-tree/FileTreeManager.coffee

@@ -13,6 +13,10 @@ define [
 				@loadRootFolder()
 				@loadRootFolder()
 				@loadDeletedDocs()
 				@loadDeletedDocs()
 				@$scope.$emit "file-tree:initialized"
 				@$scope.$emit "file-tree:initialized"
+				
+			@$scope.$watch "rootFolder", (rootFolder) =>
+				if rootFolder?
+					@recalculateDocList()
 
 
 			@_bindToSocketEvents()
 			@_bindToSocketEvents()
 
 
@@ -116,17 +120,21 @@ define [
 						return @_findEntityByPathInFolder(entity, rest)
 						return @_findEntityByPathInFolder(entity, rest)
 			return null
 			return null
 
 
-		forEachEntity: (callback = (entity, parent_folder) ->) ->
-			@_forEachEntityInFolder(@$scope.rootFolder, callback)
+		forEachEntity: (callback = (entity, parent_folder, path) ->) ->
+			@_forEachEntityInFolder(@$scope.rootFolder, null, callback)
 
 
 			for entity in @$scope.deletedDocs or []
 			for entity in @$scope.deletedDocs or []
 				callback(entity)
 				callback(entity)
 
 
-		_forEachEntityInFolder: (folder, callback) ->
+		_forEachEntityInFolder: (folder, path, callback) ->
 			for entity in folder.children or []
 			for entity in folder.children or []
-				callback(entity, folder)
+				if path?
+					childPath = path + "/" + entity.name
+				else
+					childPath = entity.name
+				callback(entity, folder, childPath)
 				if entity.children?
 				if entity.children?
-					@_forEachEntityInFolder(entity, callback)
+					@_forEachEntityInFolder(entity, childPath, callback)
 
 
 		getEntityPath: (entity) ->
 		getEntityPath: (entity) ->
 			@_getEntityPathInFolder @$scope.rootFolder, entity
 			@_getEntityPathInFolder @$scope.rootFolder, entity
@@ -195,6 +203,28 @@ define [
 					type: "doc"
 					type: "doc"
 					deleted: true
 					deleted: true
 				}
 				}
+				
+		recalculateDocList: () ->
+			@$scope.docs = []
+			@forEachEntity (entity, parentFolder, path) =>
+				if entity.type == "doc" and !entity.deleted
+					@$scope.docs.push {
+						doc:  entity
+						path: path
+					}
+			
+		getEntityPath: (entity) ->
+			@_getEntityPathInFolder @$scope.rootFolder, entity
+
+		_getEntityPathInFolder: (folder, entity) ->
+			for child in folder.children or []
+				if child == entity
+					return entity.name
+				else if child.type == "folder"
+					path = @_getEntityPathInFolder(child, entity)
+					if path?
+						return child.name + "/" + path
+			return null
 
 
 		getCurrentFolder: () ->
 		getCurrentFolder: () ->
 			# Return the root folder if nothing is selected
 			# Return the root folder if nothing is selected

+ 6 - 0
services/web/public/coffee/ide/settings/controllers/SettingsController.coffee

@@ -40,6 +40,12 @@ define [
 			if oldCompiler? and compiler != oldCompiler
 			if oldCompiler? and compiler != oldCompiler
 				settings.saveProjectSettings({compiler: compiler})
 				settings.saveProjectSettings({compiler: compiler})
 
 
+		$scope.$watch "project.rootDoc_id", (rootDoc_id, oldRootDoc_id) =>
+			return if @ignoreUpdates
+			if oldRootDoc_id? and rootDoc_id != oldRootDoc_id
+				settings.saveProjectSettings({rootDocId: rootDoc_id})
+
+
 		ide.socket.on "compilerUpdated", (compiler) =>
 		ide.socket.on "compilerUpdated", (compiler) =>
 			@ignoreUpdates = true
 			@ignoreUpdates = true
 			$scope.$apply () =>
 			$scope.$apply () =>