merged cont.
[opensuse:yast-rest-service.git] / webservice / public / javascripts / validation.js
1 /*
2 #--
3 # Webyast Webservice framework
4 #
5 # Copyright (C) 2009, 2010 Novell, Inc. 
6 #   This library is free software; you can redistribute it and/or modify
7 # it only under the terms of version 2.1 of the GNU Lesser General Public
8 # License as published by the Free Software Foundation. 
9 #
10 #   This library is distributed in the hope that it will be useful, but WITHOUT
11 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
13 # details. 
14 #
15 #   You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software 
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 #++
19 */
20
21 var protocol = "(http|https|ftp)";
22
23 var host = "([a-zA-Z0-9](([\\.\\-]?[a-zA-Z0-9]+){0,61}[a-zA-Z0-9]))+[a-zA-Z0-9]*";
24
25 var fqdn = "([a-zA-Z0-9]([a-zA-Z0-9\\-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,6}";
26 var port ="(:[0-9]{1,5}|)";
27
28 var ipv4 = "^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$";
29 var ipv6 = "(^(([0-9A-Fa-f]{1,4}(((:[0-9A-Fa-f]{1,4}){5}::[0-9A-Fa-f]{1,4})|((:[0-9A-Fa-f]{1,4}){4}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,1})|((:[0-9A-Fa-f]{1,4}){3}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,2})|((:[0-9A-Fa-f]{1,4}){2}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,3})|(:[0-9A-Fa-f]{1,4}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,4})|(::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,5})|(:[0-9A-Fa-f]{1,4}){7}))$|^(::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,6})$)|^::$)|^((([0-9A-Fa-f]{1,4}(((:[0-9A-Fa-f]{1,4}){3}::([0-9A-Fa-f]{1,4}){1})|((:[0-9A-Fa-f]{1,4}){2}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,1})|((:[0-9A-Fa-f]{1,4}){1}::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,2})|(::[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,3})|((:[0-9A-Fa-f]{1,4}){0,5})))|([:]{2}[0-9A-Fa-f]{1,4}(:[0-9A-Fa-f]{1,4}){0,4})):|::)((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{0,2})\\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{0,2})$$";
30
31 var mail = "[A-Za-z0-9](([\\_\\.\\-]?[a-zA-Z0-9]+)*)";
32
33 var subnetmask = "^\/([12]?[0-9]|3[0-2])$";
34 var default_route = "^(0\\.0\\.0\\.0)$";
35
36 var time = "^(([0-1][0-9])|([2][0-3])):([0-5][0-9]):([0-5][0-9])$";
37 var date = "^[0,1]?\d{1}\/(([0-2]?\d{1})|([3][0,1]{1}))\/(([1]{1}[9]{1}[9]{1}\d{1})|([2-9]{1}\d{3}))$";
38
39 function getElementsByClass(searchClass, domNode, tagName) {
40   var elements = [];
41   var parent = document.getElementById(domNode);
42
43   var tags = parent.getElementsByTagName(tagName);
44   var tcl = " "+searchClass+" ";
45   for(i=0,j=0; i<tags.length; i++) {
46     var test = " " + tags[i].className + " ";
47     if (test.indexOf(tcl) != -1) { elements[j++] = tags[i]; }
48   }
49   return elements;
50 }
51
52 function validateDomainName(domain) {
53   jQuery.validator.addMethod(domain, function(value, element) {
54     var regExp = new RegExp("^"+fqdn+"$");
55     var ip4 = new RegExp(ipv4);
56     var ip6 = new RegExp(ipv6);
57     return this.optional(element) || regExp.test(value) || ip4.test(value) || ip6.test(value);
58   });
59 }
60
61 // Search domains validation (bnc#607103) - accept several domain names separated through whitespace
62 // new RegExp("^"+host+"$") replaced through -> new RegExp("^(" + host + ")(\\ "+ host +")*$");
63
64 function validateDomainNameWithAndWithoutTLD(domain) {
65   jQuery.validator.addMethod(domain,function(value,element){
66     var regExp=new RegExp("^("+host+")(\\ "+host+")*$");
67     return this.optional(element)||regExp.test(value);
68   });
69 }
70
71 function validateDomainNameWithPortNumber(domain) {
72   jQuery.validator.addMethod(domain, function(value, element) {
73     var regExp = new RegExp("^"+fqdn+port+"$");
74     var ip4 = new RegExp(ipv4);
75     var ip6 = new RegExp(ipv6);
76     return this.optional(element) || regExp.test(value) || ip4.test(value) || ip6.test(value);
77   });
78 }
79
80 function validateIPv4(ip) {
81   jQuery.validator.addMethod(ip, function(value, element) {
82     var ip4 = new RegExp(ipv4);
83     return this.optional(element) || ip4.test(value);
84   });
85 }
86
87 // Name servers field should accept several ip separated through whitespace
88 function validateNameservers(ip) {
89   jQuery.validator.addMethod(ip, function(value, element) {
90     var ip = "(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])";
91     var regExp = new RegExp("^("+ip+")(\\ "+ip+")*$");
92     return this.optional(element) || regExp.test(value);
93   });
94 }
95
96
97 function validateSubnetMask(netmask) {
98   jQuery.validator.addMethod(netmask, function(value, element) {
99     var ip4 = new RegExp(ipv4);
100     var smask = new RegExp(subnetmask); 
101     return this.optional(element) || ip4.test(value)  || smask.test(value);
102   });
103 }
104
105 function validateDefaultRoute(ip) {
106   jQuery.validator.addMethod(ip, function(value, element) {
107     var ip4 = new RegExp(ipv4);
108     var def_route = new RegExp(default_route);
109     return this.optional(element) || ip4.test(value) || def_route.test(value);
110   });
111 }
112
113
114 //Devel build 9.32 has messed networking configuration in webyast (bnc#694283)
115 //RFC-952 and RFC-1123.
116 var rfc = "([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])*";
117
118 function validateHostName(hostname) {
119   jQuery.validator.addMethod(hostname, function(value, element) {
120     var regExp = new RegExp("^"+rfc+"$");
121     return this.optional(element) || regExp.test(value); 
122   });
123 }
124
125 function validateURL(url) {
126   jQuery.validator.addMethod(url, function(value, element) {
127     var regExp = new RegExp("^"+protocol+"://"+fqdn+"$");
128     return this.optional(element) || regExp.test(value);
129   });
130 }
131
132 function validateEmail(email)
133 {
134   jQuery.validator.addMethod(email, function(value, element) {
135     var regExp = new RegExp("^"+mail+"@"+fqdn+"$");
136     return this.optional(element) || regExp.test(value);
137   });
138 }
139
140 function validateTime(ctime) {
141   jQuery.validator.addMethod(ctime, function(value, element) {
142     var regExp = new RegExp(time);
143     return this.optional(element) || regExp.test(value);
144   });
145 }
146
147 function validateDate(cdate) {
148   jQuery.validator.addMethod(cdate, function(value, element) {
149     var regExp = new RegExp(date);
150     return this.optional(element) || regExp.test(value);
151   });
152 }