2018-02-05 11:56:52 -05:00
|
|
|
define [
|
|
|
|
"base"
|
|
|
|
], (App) ->
|
2018-02-06 06:09:02 -05:00
|
|
|
|
|
|
|
# copied from app/coffee/Features/Project/SafePath.coffee
|
|
|
|
|
|
|
|
BADCHAR_RX = ///
|
|
|
|
[
|
|
|
|
\/ # no slashes
|
|
|
|
\* # no asterisk
|
|
|
|
\u0000-\u001F # no control characters (0-31)
|
|
|
|
\u007F # no delete
|
|
|
|
\u0080-\u009F # no unicode control characters (C1)
|
|
|
|
\uD800-\uDFFF # no unicode surrogate characters
|
|
|
|
]
|
|
|
|
///g
|
|
|
|
|
|
|
|
BADFILE_RX = ///
|
|
|
|
(^\.$) # reject . as a filename
|
|
|
|
| (^\.\.$) # reject .. as a filename
|
|
|
|
| (^\s+) # reject leading space
|
|
|
|
| (\s+$) # reject trailing space
|
|
|
|
///g
|
|
|
|
|
|
|
|
MAX_PATH = 1024 # Maximum path length, in characters. This is fairly arbitrary.
|
|
|
|
|
2018-02-05 11:56:52 -05:00
|
|
|
App.directive "validFile", () ->
|
|
|
|
return {
|
|
|
|
require: 'ngModel'
|
|
|
|
link: (scope, element, attrs, ngModelCtrl) ->
|
2018-02-06 06:09:02 -05:00
|
|
|
ngModelCtrl.$validators.validFile = (filename) ->
|
|
|
|
isValid = filename.length > 0 && filename.length < MAX_PATH &&
|
|
|
|
not filename.match(BADCHAR_RX) &&
|
|
|
|
not filename.match(BADFILE_RX)
|
2018-02-05 11:56:52 -05:00
|
|
|
return isValid
|
|
|
|
}
|