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

add valid-file directive for front-end

Brian Gough 8 лет назад
Родитель
Сommit
ddf1d6e65e

+ 6 - 4
services/web/app/views/project/editor/file-tree.pug

@@ -119,6 +119,7 @@ script(type='text/ng-template', id='entityListItemTemplate')
 						ng-blur="finishRenaming()",
 						select-name-when="entity.renaming",
 						on-enter="finishRenaming()"
+						valid-file
 					)
 
 				span.dropdown.entity-menu-toggle(
@@ -207,6 +208,7 @@ script(type='text/ng-template', id='entityListItemTemplate')
 							ng-blur="finishRenaming()",
 							select-name-when="entity.renaming",
 							on-enter="finishRenaming()"
+							valid-file
 						)
 
 					span.dropdown.entity-menu-toggle(
@@ -316,10 +318,10 @@ script(type='text/ng-template', id='newDocModalTemplate')
 				ng-model="inputs.name",
 				on-enter="create()",
 				select-name-on="open",
-				ng-pattern="validFileRegex",
+				valid-file,
 				name="name"
 			)
-			.text-danger.row-spaced-small(ng-show="newDocForm.name.$error.pattern")
+			.text-danger.row-spaced-small(ng-show="newDocForm.name.$error.validFile")
 				| #{translate('files_cannot_include_invalid_characters')}
 	.modal-footer
 		button.btn.btn-default(
@@ -347,10 +349,10 @@ script(type='text/ng-template', id='newFolderModalTemplate')
 				ng-model="inputs.name",
 				on-enter="create()",
 				select-name-on="open",
-				ng-pattern="validFileRegex",
+				valid-file,
 				name="name"
 			)
-			.text-danger.row-spaced-small(ng-show="newFolderForm.name.$error.pattern")
+			.text-danger.row-spaced-small(ng-show="newFolderForm.name.$error.validFile")
 				| #{translate('files_cannot_include_invalid_characters')}
 	.modal-footer
 		button.btn.btn-default(

+ 1 - 0
services/web/public/coffee/ide.coffee

@@ -20,6 +20,7 @@ define [
 	"ide/hotkeys/index"
 	"ide/wordcount/index"
 	"ide/directives/layout"
+	"ide/directives/validFile"
 	"ide/services/ide"
 	"__IDE_CLIENTSIDE_INCLUDES__"
 	"analytics/AbTestingManager"

+ 12 - 0
services/web/public/coffee/ide/directives/validFile.coffee

@@ -0,0 +1,12 @@
+define [
+	"base"
+], (App) ->
+	App.directive "validFile", () ->
+		return {
+			require: 'ngModel'
+			link: (scope, element, attrs, ngModelCtrl) ->
+				ngModelCtrl.$validators.validFile = (modelValue) ->
+					validFileRegex = /^[^\*\/]*$/ # Don't allow * and /
+					isValid = modelValue.match validFileRegex
+					return isValid
+		}

+ 0 - 4
services/web/public/coffee/ide/file-tree/controllers/FileTreeController.coffee

@@ -44,8 +44,6 @@ define [
 	App.controller "NewDocModalController", [
 		"$scope", "ide", "$modalInstance", "$timeout", "parent_folder",
 		($scope,   ide,   $modalInstance,   $timeout,   parent_folder) ->
-			$scope.validFileRegex = ide.validFileRegex
-			
 			$scope.inputs = 
 				name: "name.tex"
 			$scope.state =
@@ -78,8 +76,6 @@ define [
 	App.controller "NewFolderModalController", [
 		"$scope", "ide", "$modalInstance", "$timeout", "parent_folder",
 		($scope,   ide,   $modalInstance,   $timeout,   parent_folder) ->
-			$scope.validFileRegex = ide.validFileRegex
-
 			$scope.inputs = 
 				name: "name"
 			$scope.state =

+ 3 - 2
services/web/public/coffee/ide/file-tree/controllers/FileTreeEntityController.coffee

@@ -32,8 +32,9 @@ define [
 			return if !$scope.entity.renaming
 
 			name = $scope.inputs.name
-			
-			if !name.match(new RegExp(ide.validFileRegex))
+
+			# validator will set name to undefined for invalid filenames
+			if !name?
 				# Showing the modal blurs the rename box which calls us again
 				# so track this with the invalidModalShowing flag
 				return if invalidModalShowing