@@ -39,25 +39,70 @@ require(['jquery'],
39
39
} ) ;
40
40
41
41
/**
42
- * Validation for URL
42
+ * Validation for form
43
43
*/
44
44
require ( [ 'jquery' ] ,
45
45
function ( $ ) {
46
- $ ( '#url' ) . on ( 'input' , function ( ) {
47
- var generalPattern = "\\/([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)\\/?(?:tree|blob)\\/([^/]+)(?:\\/(.+\\.cwl))$" ;
48
- var githubPattern = "^https?:\\/\\/github\\.com" + generalPattern ;
49
- var gitlabPattern = "^https?:\\/\\/gitlab\\.com" + generalPattern ;
50
- var gitPattern = "((git|ssh|http(s)?)|(git@[\\w\\.]+))(:(//)?)([\\w\\.@\\:/\\-~]+)(\\.git)(/)?" ;
46
+ var generalPattern = "\\/([A-Za-z0-9_.-]+)\\/([A-Za-z0-9_.-]+)\\/?(?:tree|blob)\\/([^/]+)(?:\\/(.+\\.cwl))$" ;
47
+ var githubPattern = new RegExp ( "^https?:\\/\\/github\\.com" + generalPattern ) ;
48
+ var gitlabPattern = new RegExp ( "^https?:\\/\\/gitlab\\.com" + generalPattern ) ;
49
+ var gitPattern = new RegExp ( "((git|ssh|http(s)?)|(git@[\\w\\.]+))(:(//)?)([\\w\\.@\\:/\\-~]+)(\\.git)(/)?" ) ;
51
50
52
- var input = $ ( this ) . text ( ) ;
53
- if ( input . search ( githubPattern ) > 0 || input . search ( gitlabPattern ) > 0 ) {
54
- $ ( "#extraInputs" ) . fadeOut ( ) ;
55
- $ ( this ) . closest ( ".form-group" ) . addClass ( "has-success" ) ;
56
- } else if ( input . search ( gitPattern ) > 0 ) {
51
+ /**
52
+ * Show extra details in form if generic git repository
53
+ */
54
+ $ ( "#url" ) . on ( 'change keyup paste' , function ( ) {
55
+ var input = $ ( this ) . val ( ) ;
56
+ if ( gitPattern . test ( input ) ) {
57
57
$ ( "#extraInputs" ) . fadeIn ( ) ;
58
+ } else {
59
+ $ ( "#extraInputs" ) . fadeOut ( ) ;
58
60
}
61
+ } ) ;
59
62
60
- //$(this).closest(".form-group").addClass("has-warning");
61
- //$(".validateMessage").text("Git repository URL must be HTTP or HTTPS");
63
+ /**
64
+ * Clear warnings when fields change
65
+ */
66
+ $ ( "input" ) . keyup ( function ( ) {
67
+ var field = $ ( this ) ;
68
+ field . parent ( ) . removeClass ( "has-error" ) ;
69
+ field . next ( ) . text ( "" ) ;
62
70
} ) ;
71
+
72
+ /**
73
+ * Validate form before submit
74
+ */
75
+ $ ( '#add' ) . submit ( function ( ) {
76
+ var pathPattern = new RegExp ( "^\\/?(\\w+\\/)*\\w+\\.cwl$" ) ;
77
+ var input = $ ( "#url" ) . val ( ) ;
78
+ if ( gitPattern . test ( input ) ) {
79
+ var success = true ;
80
+ if ( ! $ ( "#branch" ) . val ( ) ) {
81
+ addWarning ( "branch" , "You must provide a branch name for the workflow" ) ;
82
+ success = false ;
83
+ }
84
+ if ( ! $ ( "#path" ) . val ( ) ) {
85
+ addWarning ( "path" , "You must provide a path to the workflow" ) ;
86
+ success = false ;
87
+ } else if ( ! pathPattern . test ( $ ( "#path" ) . val ( ) ) ) {
88
+ addWarning ( "path" , "Must be a valid path from the root to a .cwl workflow" ) ;
89
+ success = false ;
90
+ }
91
+ return success ;
92
+ } else if ( ! githubPattern . test ( input ) && ! gitlabPattern . test ( input ) ) {
93
+ addWarning ( "url" , "Must be a URL to a workflow on Gitlab or Github, or a Git repository URL" ) ;
94
+ return false ;
95
+ }
96
+ } ) ;
97
+
98
+ /**
99
+ * Adds warning state and message to the a field
100
+ * @param id The ID of the field
101
+ * @param message The message to be displayed on the form element
102
+ */
103
+ function addWarning ( id , message ) {
104
+ var field = $ ( "#" + id ) ;
105
+ field . parent ( ) . addClass ( "has-error" ) ;
106
+ field . next ( ) . text ( message ) ;
107
+ }
63
108
} ) ;
0 commit comments