New tests.
[mono.git] / mcs / class / System.Web / resources / WebUIValidation_2.0.js
1 /*\r
2  * WebUIValidation.js\r
3  *\r
4  * Authors:\r
5  *   Chris Toshok (toshok@ximian.com)\r
6  *\r
7  * (c) 2005 Novell, Inc. (http://www.novell.com)\r
8  *\r
9  * Permission is hereby granted, free of charge, to any person obtaining\r
10  * a copy of this software and associated documentation files (the\r
11  * "Software"), to deal in the Software without restriction, including\r
12  * without limitation the rights to use, copy, modify, merge, publish,\r
13  * distribute, sublicense, and/or sell copies of the Software, and to\r
14  * permit persons to whom the Software is furnished to do so, subject to\r
15  * the following conditions:\r
16  *\r
17  * The above copyright notice and this permission notice shall be\r
18  * included in all copies or substantial portions of the Software.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
24  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
25  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
26  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
27  */\r
28 \r
29 var have_validation_summaries = false;\r
30 \r
31 function ValidatorOnLoad ()\r
32 {\r
33         if (typeof (Page_ValidationSummaries) != 'undefined' && Page_ValidationSummaries != null) {\r
34                 have_validation_summaries = true;\r
35             for (var v in Page_ValidationSummaries) {\r
36                     var vs = Page_ValidationSummaries [v];\r
37                     if (vs.getAttribute ("validationgroup") == null)\r
38                             vs.setAttribute ("validationgroup", "");\r
39             }\r
40         }\r
41 \r
42         for (var v in Page_Validators) {\r
43                 var vo = Page_Validators [v];\r
44                 var funcname = vo.getAttribute ("evaluationfunction");\r
45 \r
46                 func = this[funcname];\r
47 \r
48                 vo["evaluationfunction"] = func;\r
49 \r
50                 if (vo.getAttribute ("isvalid") == null)\r
51                         vo.setAttribute ("isvalid", "true");\r
52 \r
53                 if (vo.getAttribute ("enabled") == null)\r
54                         vo.setAttribute ("enabled", "true");\r
55 \r
56                 if (vo.getAttribute ("validationgroup") == null)\r
57                         vo.setAttribute ("validationgroup", "");\r
58 \r
59                 func = vo ["evaluationfunction"];\r
60         }\r
61 \r
62         Page_ValidationActive = true;\r
63 }\r
64 \r
65 var validation_result = true;\r
66 \r
67 function ValidationSummaryOnSubmit (group)\r
68 {\r
69         /* handle validation summaries here */\r
70         if (validation_result == false && have_validation_summaries) {\r
71 \r
72                 for (var vi in Page_ValidationSummaries)  {\r
73                         var vs = Page_ValidationSummaries[vi];\r
74                     \r
75                     if(IsValidationGroupMatch(vs, group)) {\r
76 \r
77                             var header = vs.getAttribute ("headertext");\r
78                             if (header == null)\r
79                                     header = "";\r
80 \r
81                             attr = vs.getAttribute ("showsummary");\r
82                             if (attr == null || attr.toLowerCase() == "true") {\r
83                                     var displaymode = vs.getAttribute ("displaymode");\r
84                                     if (displaymode == null) displaymode = "Bulleted";\r
85 \r
86                                     var html = "";\r
87 \r
88                                     if (displaymode == "List") {\r
89                                             list_pre = "";\r
90                                             list_post = "";\r
91                                             item_pre = "";\r
92                                             item_post = "<br>";\r
93                                     }\r
94                                     else if (displaymode == "SingleParagraph") {\r
95                                             list_pre = "";\r
96                                             list_post = "<br>";\r
97                                             item_pre = "";\r
98                                             item_post = " ";\r
99                                     }\r
100                                     else {\r
101                                             list_pre = "<ul>";\r
102                                             list_post = "</ul>";\r
103                                             item_pre = "\n<li>";\r
104                                             item_post = "</li>";\r
105                                     }\r
106 \r
107                                     html += header;\r
108                                     html += list_pre;\r
109                                     for (var v in Page_Validators) {\r
110                                             var vo = Page_Validators [v];\r
111 \r
112                                             if (vo.getAttribute ("isvalid").toLowerCase() == "false") {\r
113                                                     var text = ValidatorGetErrorMessage (vo);\r
114                                                     if (text != null && text != "") {\r
115                                                             html += item_pre + text + item_post;\r
116                                                     }\r
117                                             }\r
118                                     }\r
119                                     html += list_post;\r
120 \r
121                                     vs.innerHTML = html;\r
122                                     vs.style.display = "block";\r
123                             }\r
124 \r
125                             attr = vs.getAttribute ("showmessagebox");\r
126                             if (attr != null && attr.toLowerCase() == "true") {\r
127                                     var v_contents = "";\r
128 \r
129                                     for (var v in Page_Validators) {\r
130                                             var vo = Page_Validators [v];\r
131 \r
132                                             if (vo.getAttribute ("isvalid").toLowerCase() == "false") {\r
133                                                     var text = ValidatorGetErrorMessage (vo);\r
134                                                     if (text != null && text != "") {\r
135                                                             v_contents += "-" + text + "\n";\r
136                                                     }\r
137                                             }\r
138                                     }\r
139 \r
140                                     var alert_header = header;\r
141                                     if (alert_header != "")\r
142                                             alert_header += "\n";\r
143                                     summary_contents = alert_header + v_contents;\r
144                                     alert (summary_contents);\r
145                             }\r
146                         }\r
147                 }\r
148         }\r
149 }\r
150 \r
151 function ValidatorCommonOnSubmit ()\r
152 {\r
153         rv = validation_result;\r
154         validation_result = true;\r
155         return rv;\r
156 }\r
157 \r
158 function ValidatorGetValue (controlname)\r
159 {\r
160         var el = GetElement (controlname);\r
161 \r
162         /* if the element has a 'value' attribute, return it */\r
163         if (typeof (el.value) != 'undefined' && el.value != null) {\r
164                 return el.value;\r
165         }\r
166 \r
167         /* if it's a select, loop over the options looking for the\r
168          * selected one. */\r
169         if (typeof (el.selectedIndex) != 'undefined') {\r
170                 return el.options[el.selectedIndex].value;\r
171         }\r
172 }\r
173 \r
174 function ValidatorTrim (s)\r
175 {\r
176         s = s.replace (/^\s+/g, "");\r
177         s = s.replace (/\s+$/g, "");\r
178 \r
179         return s;\r
180 }\r
181 \r
182 function Page_ClientValidate(group)\r
183 {\r
184         validation_result = true;\r
185 \r
186         /* clear out the existing text from all our summaries */\r
187         if (have_validation_summaries) {\r
188                 for (var vi in Page_ValidationSummaries) {\r
189                         var vs = Page_ValidationSummaries[vi];\r
190                         vs.style.display = "none";\r
191                         vs.innerHTML = "";\r
192                 }\r
193         }\r
194 \r
195         for (var v in Page_Validators) {\r
196                 var vo = Page_Validators [v];\r
197                 var evalfunc = vo["evaluationfunction"];\r
198                 var result = false;\r
199 \r
200                 if (vo.getAttribute ("enabled").toLowerCase() == "false" || !IsValidationGroupMatch(vo, group)) {\r
201                         result = true;\r
202                         ValidatorSucceeded (vo);\r
203                 }\r
204                 else {\r
205                         result = evalfunc (vo);\r
206                 }\r
207 \r
208                 if (!result)\r
209                         validation_result = false;\r
210 \r
211                 vo.setAttribute("isvalid", result ? "true" : "false");\r
212         }\r
213     ValidationSummaryOnSubmit(group);\r
214         return validation_result;\r
215 }\r
216 \r
217 function IsValidationGroupMatch(vo, group) {\r
218     var valGroup = vo.getAttribute ("validationgroup");\r
219     if ((typeof(group) == "undefined") || (group == null)) {\r
220         return (valGroup == "");\r
221     }\r
222     return (valGroup == group);\r
223 }\r
224 \r
225 /*******************/\r
226 /* type converters */\r
227 \r
228 function ToInteger (s)\r
229 {\r
230         if ((v = parseInt(s, 10)) != s - 0)\r
231                 return null;\r
232         else\r
233                 return v;\r
234 }\r
235 \r
236 function ToString (s)\r
237 {\r
238         return s;\r
239 }\r
240 \r
241 function ToDouble (s)\r
242 {\r
243         if ((v = parseFloat(s)) != s - 0)\r
244                 return null;\r
245         else\r
246                 return v;\r
247 }\r
248 \r
249 function ToDate (s)\r
250 {\r
251         /* NYI */\r
252         return null;\r
253 }\r
254 \r
255 function ToCurrency (s)\r
256 {\r
257         /* NYI */\r
258         return null;\r
259 }\r
260 \r
261 /*******************/\r
262 /* validators     */\r
263 \r
264 function CompareValidatorEvaluateIsValid (validator)\r
265 {\r
266         var ControlToCompare = validator.getAttribute ("controltocompare");\r
267         var ValueToCompare = validator.getAttribute ("valuetocompare");\r
268         var Operator = validator.getAttribute ("operator").toLowerCase();\r
269         var ControlToValidate = validator.getAttribute ("controltovalidate");\r
270         var DataType = validator.getAttribute ("datatype");\r
271 \r
272         var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));\r
273         var compare = (ControlToCompare != null && ControlToCompare != "") ? ValidatorTrim (ValidatorGetValue (ControlToCompare)) : ValueToCompare;\r
274 \r
275         var left = Convert (ctrl_value, DataType);\r
276         if (left == null) {\r
277                 ValidatorFailed (validator);\r
278                 return false;\r
279         }\r
280       \r
281         var right = Convert (compare, DataType);\r
282         if (right == null) {\r
283                 ValidatorSucceeded (validator);\r
284                  return true;\r
285         }\r
286 \r
287         var result = false;\r
288    \r
289         if (Operator == "equal") {\r
290                 result = (left == right);\r
291         }\r
292         else if (Operator == "notequal") {\r
293                 result = (left != right);\r
294         }\r
295         else if (Operator == "lessthan") {\r
296                 result = (left < right);\r
297         }\r
298         else if (Operator == "lessthanequal") {\r
299                 result = (left <= right);\r
300         }\r
301         else if (Operator == "greaterthan") {\r
302                 result = (left > right);\r
303         }\r
304         else if (Operator == "greaterthanequal") {\r
305                 result = (left >= right);\r
306         }\r
307 \r
308         if (result == false) {\r
309                 ValidatorFailed (validator);\r
310                 return false;\r
311         }\r
312         else {\r
313                 ValidatorSucceeded (validator);\r
314                 return true;\r
315         }\r
316 }\r
317 \r
318 function RangeValidatorEvaluateIsValid (validator)\r
319 {\r
320         var MinimumValue = parseInt (validator.getAttribute ("minimumvalue"));\r
321         var MaximumValue = parseInt (validator.getAttribute ("maximumvalue"));\r
322         var ControlToValidate = validator.getAttribute ("controltovalidate");\r
323         var DataType = validator.getAttribute ("datatype");\r
324 \r
325         var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));\r
326 \r
327         if (ctrl_value == "") {\r
328                 ValidatorSucceeded (validator);\r
329                 return true;\r
330         }\r
331 \r
332         var val = Convert (ctrl_value, DataType);\r
333         if (val == null || val < MinimumValue || val > MaximumValue) {\r
334                 ValidatorFailed (validator);\r
335                 return false;\r
336         }\r
337         else {\r
338                 ValidatorSucceeded (validator);\r
339                 return true;\r
340         }\r
341 }\r
342 \r
343 function RegularExpressionValidatorEvaluateIsValid (validator)\r
344 {\r
345         var ValidationExpression = validator.getAttribute ("validationexpression");\r
346         var ControlToValidate = validator.getAttribute ("controltovalidate");\r
347 \r
348         var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));\r
349 \r
350         if (ctrl_value == "") {\r
351                 ValidatorSucceeded (validator);\r
352                 return true;\r
353         }\r
354 \r
355         var r = new RegExp (ValidationExpression);\r
356         match = r.exec (ctrl_value);\r
357         if (match == null || match[0] == "") {\r
358                 ValidatorFailed (validator);\r
359                 return false;\r
360         }\r
361         else {\r
362                 ValidatorSucceeded (validator);\r
363                 return true;\r
364         }\r
365 }\r
366 \r
367 function RequiredFieldValidatorEvaluateIsValid (validator)\r
368 {\r
369         var InitialValue = validator.getAttribute ("initialvalue");\r
370         var ControlToValidate = validator.getAttribute ("controltovalidate");\r
371 \r
372         var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));\r
373 \r
374         if (ctrl_value == ValidatorTrim (InitialValue)) {\r
375                 ValidatorFailed (validator);\r
376                 return false;\r
377         }\r
378         else {\r
379                 ValidatorSucceeded (validator);\r
380                 return true;\r
381         }\r
382 }\r
383 \r
384 function CustomValidatorEvaluateIsValid (validator)\r
385 {\r
386         var InitialValue = validator.getAttribute ("initialvalue");\r
387         var ControlToValidate = validator.getAttribute ("controltovalidate");\r
388 \r
389         if (!ControlToValidate) {\r
390                 ValidatorSucceeded (validator);\r
391                 return true;\r
392         }\r
393 \r
394         var evaluationfunc = validator.getAttribute ("clientvalidationfunction");\r
395 \r
396         var ctrl_value = ValidatorTrim (ValidatorGetValue (ControlToValidate));\r
397 \r
398         var result = true;\r
399 \r
400         if (evaluationfunc && evaluationfunc != "") {\r
401                 args = {Value:ctrl_value, IsValid:false};\r
402                 eval (evaluationfunc + "(validator, args)");\r
403                 result = args.IsValid;\r
404         }\r
405 \r
406         if (result) {\r
407                 ValidatorSucceeded (validator);\r
408                 return true;\r
409         }\r
410         else {\r
411                 ValidatorFailed (validator);\r
412                 return false;\r
413         }\r
414 }\r
415 \r
416 /*********************/\r
417 /* utility functions */\r
418 \r
419 function Convert (s, ty)\r
420 {\r
421         var cvt = this ["To" + ty];\r
422         if (typeof (cvt) == 'function')\r
423                 return cvt (s);\r
424         else\r
425                 return null;\r
426 }\r
427 \r
428 function ValidatorUpdateDisplay (v, valid)\r
429 {\r
430         var display = v.getAttribute ("display");\r
431 \r
432         /* for validators that aren't displayed, do nothing */\r
433         if (display == "None") {\r
434                 return;\r
435         }\r
436 \r
437         v.style.visibility = (valid ? "hidden" : "visible");\r
438         if (display == "Dynamic") {\r
439                 v.style.display = (valid ? "none" : "inline");\r
440         }\r
441 }\r
442 \r
443 function ValidatorGetErrorMessage (v)\r
444 {\r
445         var text = v.getAttribute ("errormessage");\r
446         if (text == null || text == "")\r
447                 text = v.getAttribute ("text"); \r
448         if (text == null)\r
449                 text = "";\r
450         return text;\r
451 }\r
452 \r
453 function ValidatorGetText (v)\r
454 {\r
455         var text = v.getAttribute ("text");     \r
456         if (text == null || text == "")\r
457                 text = v.getAttribute ("errormessage");\r
458         if (text == null)\r
459                 text = "";\r
460         return text;\r
461 }\r
462 \r
463 function ValidatorFailed (v)\r
464 {\r
465         var text = ValidatorGetText (v);\r
466         v.innerHTML = text;\r
467 \r
468         ValidatorUpdateDisplay (v, false);\r
469 }\r
470 \r
471 function ValidatorSucceeded (v)\r
472 {\r
473         v.innerHTML = "";\r
474 \r
475         ValidatorUpdateDisplay (v, true);\r
476 }\r
477 \r
478 function GetElement(id)\r
479 {\r
480         var x = document.getElementById ? document.getElementById (id) :\r
481                                           ((document.all) ? document.all [id] : null);\r
482         return x;\r
483 }\r