comparison Agendas/trunk/src/Agendas.Web/Scripts/MicrosoftMvcValidation.debug.js @ 10:c62b77fc33f4

website inicial
author nelo@MTEySS.neluz.int
date Sun, 13 Mar 2011 18:51:06 -0300
parents
children
comparison
equal deleted inserted replaced
9:c90492faf268 10:c62b77fc33f4
1 //!----------------------------------------------------------
2 //! Copyright (C) Microsoft Corporation. All rights reserved.
3 //!----------------------------------------------------------
4 //! MicrosoftMvcValidation.js
5
6
7 Type.registerNamespace('Sys.Mvc');
8
9 ////////////////////////////////////////////////////////////////////////////////
10 // Sys.Mvc.Validation
11
12 Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; }
13
14
15 ////////////////////////////////////////////////////////////////////////////////
16 // Sys.Mvc.JsonValidationField
17
18 Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; }
19
20
21 ////////////////////////////////////////////////////////////////////////////////
22 // Sys.Mvc.JsonValidationOptions
23
24 Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; }
25
26
27 ////////////////////////////////////////////////////////////////////////////////
28 // Sys.Mvc.JsonValidationRule
29
30 Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; }
31
32
33 ////////////////////////////////////////////////////////////////////////////////
34 // Sys.Mvc.ValidationContext
35
36 Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; }
37
38
39 ////////////////////////////////////////////////////////////////////////////////
40 // Sys.Mvc.NumberValidator
41
42 Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() {
43 }
44 Sys.Mvc.NumberValidator.create = function Sys_Mvc_NumberValidator$create(rule) {
45 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
46 /// </param>
47 /// <returns type="Sys.Mvc.Validator"></returns>
48 return Function.createDelegate(new Sys.Mvc.NumberValidator(), new Sys.Mvc.NumberValidator().validate);
49 }
50 Sys.Mvc.NumberValidator.prototype = {
51
52 validate: function Sys_Mvc_NumberValidator$validate(value, context) {
53 /// <param name="value" type="String">
54 /// </param>
55 /// <param name="context" type="Sys.Mvc.ValidationContext">
56 /// </param>
57 /// <returns type="Object"></returns>
58 if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
59 return true;
60 }
61 var n = Number.parseLocale(value);
62 return (!isNaN(n));
63 }
64 }
65
66
67 ////////////////////////////////////////////////////////////////////////////////
68 // Sys.Mvc.FormContext
69
70 Sys.Mvc.FormContext = function Sys_Mvc_FormContext(formElement, validationSummaryElement) {
71 /// <param name="formElement" type="Object" domElement="true">
72 /// </param>
73 /// <param name="validationSummaryElement" type="Object" domElement="true">
74 /// </param>
75 /// <field name="_validationSummaryErrorCss" type="String" static="true">
76 /// </field>
77 /// <field name="_validationSummaryValidCss" type="String" static="true">
78 /// </field>
79 /// <field name="_formValidationTag" type="String" static="true">
80 /// </field>
81 /// <field name="_onClickHandler" type="Sys.UI.DomEventHandler">
82 /// </field>
83 /// <field name="_onSubmitHandler" type="Sys.UI.DomEventHandler">
84 /// </field>
85 /// <field name="_errors" type="Array">
86 /// </field>
87 /// <field name="_submitButtonClicked" type="Object" domElement="true">
88 /// </field>
89 /// <field name="_validationSummaryElement" type="Object" domElement="true">
90 /// </field>
91 /// <field name="_validationSummaryULElement" type="Object" domElement="true">
92 /// </field>
93 /// <field name="fields" type="Array" elementType="FieldContext">
94 /// </field>
95 /// <field name="_formElement" type="Object" domElement="true">
96 /// </field>
97 /// <field name="replaceValidationSummary" type="Boolean">
98 /// </field>
99 this._errors = [];
100 this.fields = new Array(0);
101 this._formElement = formElement;
102 this._validationSummaryElement = validationSummaryElement;
103 formElement[Sys.Mvc.FormContext._formValidationTag] = this;
104 if (validationSummaryElement) {
105 var ulElements = validationSummaryElement.getElementsByTagName('ul');
106 if (ulElements.length > 0) {
107 this._validationSummaryULElement = ulElements[0];
108 }
109 }
110 this._onClickHandler = Function.createDelegate(this, this._form_OnClick);
111 this._onSubmitHandler = Function.createDelegate(this, this._form_OnSubmit);
112 }
113 Sys.Mvc.FormContext._Application_Load = function Sys_Mvc_FormContext$_Application_Load() {
114 var allFormOptions = window.mvcClientValidationMetadata;
115 if (allFormOptions) {
116 while (allFormOptions.length > 0) {
117 var thisFormOptions = allFormOptions.pop();
118 Sys.Mvc.FormContext._parseJsonOptions(thisFormOptions);
119 }
120 }
121 }
122 Sys.Mvc.FormContext._getFormElementsWithName = function Sys_Mvc_FormContext$_getFormElementsWithName(formElement, name) {
123 /// <param name="formElement" type="Object" domElement="true">
124 /// </param>
125 /// <param name="name" type="String">
126 /// </param>
127 /// <returns type="Array" elementType="Object" elementDomElement="true"></returns>
128 var allElementsWithNameInForm = [];
129 var allElementsWithName = document.getElementsByName(name);
130 for (var i = 0; i < allElementsWithName.length; i++) {
131 var thisElement = allElementsWithName[i];
132 if (Sys.Mvc.FormContext._isElementInHierarchy(formElement, thisElement)) {
133 Array.add(allElementsWithNameInForm, thisElement);
134 }
135 }
136 return allElementsWithNameInForm;
137 }
138 Sys.Mvc.FormContext.getValidationForForm = function Sys_Mvc_FormContext$getValidationForForm(formElement) {
139 /// <param name="formElement" type="Object" domElement="true">
140 /// </param>
141 /// <returns type="Sys.Mvc.FormContext"></returns>
142 return formElement[Sys.Mvc.FormContext._formValidationTag];
143 }
144 Sys.Mvc.FormContext._isElementInHierarchy = function Sys_Mvc_FormContext$_isElementInHierarchy(parent, child) {
145 /// <param name="parent" type="Object" domElement="true">
146 /// </param>
147 /// <param name="child" type="Object" domElement="true">
148 /// </param>
149 /// <returns type="Boolean"></returns>
150 while (child) {
151 if (parent === child) {
152 return true;
153 }
154 child = child.parentNode;
155 }
156 return false;
157 }
158 Sys.Mvc.FormContext._parseJsonOptions = function Sys_Mvc_FormContext$_parseJsonOptions(options) {
159 /// <param name="options" type="Sys.Mvc.JsonValidationOptions">
160 /// </param>
161 /// <returns type="Sys.Mvc.FormContext"></returns>
162 var formElement = $get(options.FormId);
163 var validationSummaryElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(options.ValidationSummaryId)) ? $get(options.ValidationSummaryId) : null;
164 var formContext = new Sys.Mvc.FormContext(formElement, validationSummaryElement);
165 formContext.enableDynamicValidation();
166 formContext.replaceValidationSummary = options.ReplaceValidationSummary;
167 for (var i = 0; i < options.Fields.length; i++) {
168 var field = options.Fields[i];
169 var fieldElements = Sys.Mvc.FormContext._getFormElementsWithName(formElement, field.FieldName);
170 var validationMessageElement = (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(field.ValidationMessageId)) ? $get(field.ValidationMessageId) : null;
171 var fieldContext = new Sys.Mvc.FieldContext(formContext);
172 Array.addRange(fieldContext.elements, fieldElements);
173 fieldContext.validationMessageElement = validationMessageElement;
174 fieldContext.replaceValidationMessageContents = field.ReplaceValidationMessageContents;
175 for (var j = 0; j < field.ValidationRules.length; j++) {
176 var rule = field.ValidationRules[j];
177 var validator = Sys.Mvc.ValidatorRegistry.getValidator(rule);
178 if (validator) {
179 var validation = Sys.Mvc.$create_Validation();
180 validation.fieldErrorMessage = rule.ErrorMessage;
181 validation.validator = validator;
182 Array.add(fieldContext.validations, validation);
183 }
184 }
185 fieldContext.enableDynamicValidation();
186 Array.add(formContext.fields, fieldContext);
187 }
188 var registeredValidatorCallbacks = formElement.validationCallbacks;
189 if (!registeredValidatorCallbacks) {
190 registeredValidatorCallbacks = [];
191 formElement.validationCallbacks = registeredValidatorCallbacks;
192 }
193 registeredValidatorCallbacks.push(Function.createDelegate(null, function() {
194 return Sys.Mvc._validationUtil.arrayIsNullOrEmpty(formContext.validate('submit'));
195 }));
196 return formContext;
197 }
198 Sys.Mvc.FormContext.prototype = {
199 _onClickHandler: null,
200 _onSubmitHandler: null,
201 _submitButtonClicked: null,
202 _validationSummaryElement: null,
203 _validationSummaryULElement: null,
204 _formElement: null,
205 replaceValidationSummary: false,
206
207 addError: function Sys_Mvc_FormContext$addError(message) {
208 /// <param name="message" type="String">
209 /// </param>
210 this.addErrors([ message ]);
211 },
212
213 addErrors: function Sys_Mvc_FormContext$addErrors(messages) {
214 /// <param name="messages" type="Array" elementType="String">
215 /// </param>
216 if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {
217 Array.addRange(this._errors, messages);
218 this._onErrorCountChanged();
219 }
220 },
221
222 clearErrors: function Sys_Mvc_FormContext$clearErrors() {
223 Array.clear(this._errors);
224 this._onErrorCountChanged();
225 },
226
227 _displayError: function Sys_Mvc_FormContext$_displayError() {
228 if (this._validationSummaryElement) {
229 if (this._validationSummaryULElement) {
230 Sys.Mvc._validationUtil.removeAllChildren(this._validationSummaryULElement);
231 for (var i = 0; i < this._errors.length; i++) {
232 var liElement = document.createElement('li');
233 Sys.Mvc._validationUtil.setInnerText(liElement, this._errors[i]);
234 this._validationSummaryULElement.appendChild(liElement);
235 }
236 }
237 Sys.UI.DomElement.removeCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);
238 Sys.UI.DomElement.addCssClass(this._validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);
239 }
240 },
241
242 _displaySuccess: function Sys_Mvc_FormContext$_displaySuccess() {
243 var validationSummaryElement = this._validationSummaryElement;
244 if (validationSummaryElement) {
245 var validationSummaryULElement = this._validationSummaryULElement;
246 if (validationSummaryULElement) {
247 validationSummaryULElement.innerHTML = '';
248 }
249 Sys.UI.DomElement.removeCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryErrorCss);
250 Sys.UI.DomElement.addCssClass(validationSummaryElement, Sys.Mvc.FormContext._validationSummaryValidCss);
251 }
252 },
253
254 enableDynamicValidation: function Sys_Mvc_FormContext$enableDynamicValidation() {
255 Sys.UI.DomEvent.addHandler(this._formElement, 'click', this._onClickHandler);
256 Sys.UI.DomEvent.addHandler(this._formElement, 'submit', this._onSubmitHandler);
257 },
258
259 _findSubmitButton: function Sys_Mvc_FormContext$_findSubmitButton(element) {
260 /// <param name="element" type="Object" domElement="true">
261 /// </param>
262 /// <returns type="Object" domElement="true"></returns>
263 if (element.disabled) {
264 return null;
265 }
266 var tagName = element.tagName.toUpperCase();
267 var inputElement = element;
268 if (tagName === 'INPUT') {
269 var type = inputElement.type;
270 if (type === 'submit' || type === 'image') {
271 return inputElement;
272 }
273 }
274 else if ((tagName === 'BUTTON') && (inputElement.type === 'submit')) {
275 return inputElement;
276 }
277 return null;
278 },
279
280 _form_OnClick: function Sys_Mvc_FormContext$_form_OnClick(e) {
281 /// <param name="e" type="Sys.UI.DomEvent">
282 /// </param>
283 this._submitButtonClicked = this._findSubmitButton(e.target);
284 },
285
286 _form_OnSubmit: function Sys_Mvc_FormContext$_form_OnSubmit(e) {
287 /// <param name="e" type="Sys.UI.DomEvent">
288 /// </param>
289 var form = e.target;
290 var submitButton = this._submitButtonClicked;
291 if (submitButton && submitButton.disableValidation) {
292 return;
293 }
294 var errorMessages = this.validate('submit');
295 if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(errorMessages)) {
296 e.preventDefault();
297 }
298 },
299
300 _onErrorCountChanged: function Sys_Mvc_FormContext$_onErrorCountChanged() {
301 if (!this._errors.length) {
302 this._displaySuccess();
303 }
304 else {
305 this._displayError();
306 }
307 },
308
309 validate: function Sys_Mvc_FormContext$validate(eventName) {
310 /// <param name="eventName" type="String">
311 /// </param>
312 /// <returns type="Array" elementType="String"></returns>
313 var fields = this.fields;
314 var errors = [];
315 for (var i = 0; i < fields.length; i++) {
316 var field = fields[i];
317 if (!field.elements[0].disabled) {
318 var thisErrors = field.validate(eventName);
319 if (thisErrors) {
320 Array.addRange(errors, thisErrors);
321 }
322 }
323 }
324 if (this.replaceValidationSummary) {
325 this.clearErrors();
326 this.addErrors(errors);
327 }
328 return errors;
329 }
330 }
331
332
333 ////////////////////////////////////////////////////////////////////////////////
334 // Sys.Mvc.FieldContext
335
336 Sys.Mvc.FieldContext = function Sys_Mvc_FieldContext(formContext) {
337 /// <param name="formContext" type="Sys.Mvc.FormContext">
338 /// </param>
339 /// <field name="_hasTextChangedTag" type="String" static="true">
340 /// </field>
341 /// <field name="_hasValidationFiredTag" type="String" static="true">
342 /// </field>
343 /// <field name="_inputElementErrorCss" type="String" static="true">
344 /// </field>
345 /// <field name="_inputElementValidCss" type="String" static="true">
346 /// </field>
347 /// <field name="_validationMessageErrorCss" type="String" static="true">
348 /// </field>
349 /// <field name="_validationMessageValidCss" type="String" static="true">
350 /// </field>
351 /// <field name="_onBlurHandler" type="Sys.UI.DomEventHandler">
352 /// </field>
353 /// <field name="_onChangeHandler" type="Sys.UI.DomEventHandler">
354 /// </field>
355 /// <field name="_onInputHandler" type="Sys.UI.DomEventHandler">
356 /// </field>
357 /// <field name="_onPropertyChangeHandler" type="Sys.UI.DomEventHandler">
358 /// </field>
359 /// <field name="_errors" type="Array">
360 /// </field>
361 /// <field name="defaultErrorMessage" type="String">
362 /// </field>
363 /// <field name="elements" type="Array" elementType="Object" elementDomElement="true">
364 /// </field>
365 /// <field name="formContext" type="Sys.Mvc.FormContext">
366 /// </field>
367 /// <field name="replaceValidationMessageContents" type="Boolean">
368 /// </field>
369 /// <field name="validationMessageElement" type="Object" domElement="true">
370 /// </field>
371 /// <field name="validations" type="Array" elementType="Validation">
372 /// </field>
373 this._errors = [];
374 this.elements = new Array(0);
375 this.validations = new Array(0);
376 this.formContext = formContext;
377 this._onBlurHandler = Function.createDelegate(this, this._element_OnBlur);
378 this._onChangeHandler = Function.createDelegate(this, this._element_OnChange);
379 this._onInputHandler = Function.createDelegate(this, this._element_OnInput);
380 this._onPropertyChangeHandler = Function.createDelegate(this, this._element_OnPropertyChange);
381 }
382 Sys.Mvc.FieldContext.prototype = {
383 _onBlurHandler: null,
384 _onChangeHandler: null,
385 _onInputHandler: null,
386 _onPropertyChangeHandler: null,
387 defaultErrorMessage: null,
388 formContext: null,
389 replaceValidationMessageContents: false,
390 validationMessageElement: null,
391
392 addError: function Sys_Mvc_FieldContext$addError(message) {
393 /// <param name="message" type="String">
394 /// </param>
395 this.addErrors([ message ]);
396 },
397
398 addErrors: function Sys_Mvc_FieldContext$addErrors(messages) {
399 /// <param name="messages" type="Array" elementType="String">
400 /// </param>
401 if (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(messages)) {
402 Array.addRange(this._errors, messages);
403 this._onErrorCountChanged();
404 }
405 },
406
407 clearErrors: function Sys_Mvc_FieldContext$clearErrors() {
408 Array.clear(this._errors);
409 this._onErrorCountChanged();
410 },
411
412 _displayError: function Sys_Mvc_FieldContext$_displayError() {
413 var validationMessageElement = this.validationMessageElement;
414 if (validationMessageElement) {
415 if (this.replaceValidationMessageContents) {
416 Sys.Mvc._validationUtil.setInnerText(validationMessageElement, this._errors[0]);
417 }
418 Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);
419 Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);
420 }
421 var elements = this.elements;
422 for (var i = 0; i < elements.length; i++) {
423 var element = elements[i];
424 Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);
425 Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);
426 }
427 },
428
429 _displaySuccess: function Sys_Mvc_FieldContext$_displaySuccess() {
430 var validationMessageElement = this.validationMessageElement;
431 if (validationMessageElement) {
432 if (this.replaceValidationMessageContents) {
433 Sys.Mvc._validationUtil.setInnerText(validationMessageElement, '');
434 }
435 Sys.UI.DomElement.removeCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageErrorCss);
436 Sys.UI.DomElement.addCssClass(validationMessageElement, Sys.Mvc.FieldContext._validationMessageValidCss);
437 }
438 var elements = this.elements;
439 for (var i = 0; i < elements.length; i++) {
440 var element = elements[i];
441 Sys.UI.DomElement.removeCssClass(element, Sys.Mvc.FieldContext._inputElementErrorCss);
442 Sys.UI.DomElement.addCssClass(element, Sys.Mvc.FieldContext._inputElementValidCss);
443 }
444 },
445
446 _element_OnBlur: function Sys_Mvc_FieldContext$_element_OnBlur(e) {
447 /// <param name="e" type="Sys.UI.DomEvent">
448 /// </param>
449 if (e.target[Sys.Mvc.FieldContext._hasTextChangedTag] || e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
450 this.validate('blur');
451 }
452 },
453
454 _element_OnChange: function Sys_Mvc_FieldContext$_element_OnChange(e) {
455 /// <param name="e" type="Sys.UI.DomEvent">
456 /// </param>
457 e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
458 },
459
460 _element_OnInput: function Sys_Mvc_FieldContext$_element_OnInput(e) {
461 /// <param name="e" type="Sys.UI.DomEvent">
462 /// </param>
463 e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
464 if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
465 this.validate('input');
466 }
467 },
468
469 _element_OnPropertyChange: function Sys_Mvc_FieldContext$_element_OnPropertyChange(e) {
470 /// <param name="e" type="Sys.UI.DomEvent">
471 /// </param>
472 if (e.rawEvent.propertyName === 'value') {
473 e.target[Sys.Mvc.FieldContext._hasTextChangedTag] = true;
474 if (e.target[Sys.Mvc.FieldContext._hasValidationFiredTag]) {
475 this.validate('input');
476 }
477 }
478 },
479
480 enableDynamicValidation: function Sys_Mvc_FieldContext$enableDynamicValidation() {
481 var elements = this.elements;
482 for (var i = 0; i < elements.length; i++) {
483 var element = elements[i];
484 if (Sys.Mvc._validationUtil.elementSupportsEvent(element, 'onpropertychange')) {
485 var compatMode = document.documentMode;
486 if (compatMode && compatMode >= 8) {
487 Sys.UI.DomEvent.addHandler(element, 'propertychange', this._onPropertyChangeHandler);
488 }
489 }
490 else {
491 Sys.UI.DomEvent.addHandler(element, 'input', this._onInputHandler);
492 }
493 Sys.UI.DomEvent.addHandler(element, 'change', this._onChangeHandler);
494 Sys.UI.DomEvent.addHandler(element, 'blur', this._onBlurHandler);
495 }
496 },
497
498 _getErrorString: function Sys_Mvc_FieldContext$_getErrorString(validatorReturnValue, fieldErrorMessage) {
499 /// <param name="validatorReturnValue" type="Object">
500 /// </param>
501 /// <param name="fieldErrorMessage" type="String">
502 /// </param>
503 /// <returns type="String"></returns>
504 var fallbackErrorMessage = fieldErrorMessage || this.defaultErrorMessage;
505 if (Boolean.isInstanceOfType(validatorReturnValue)) {
506 return (validatorReturnValue) ? null : fallbackErrorMessage;
507 }
508 if (String.isInstanceOfType(validatorReturnValue)) {
509 return ((validatorReturnValue).length) ? validatorReturnValue : fallbackErrorMessage;
510 }
511 return null;
512 },
513
514 _getStringValue: function Sys_Mvc_FieldContext$_getStringValue() {
515 /// <returns type="String"></returns>
516 var elements = this.elements;
517 return (elements.length > 0) ? elements[0].value : null;
518 },
519
520 _markValidationFired: function Sys_Mvc_FieldContext$_markValidationFired() {
521 var elements = this.elements;
522 for (var i = 0; i < elements.length; i++) {
523 var element = elements[i];
524 element[Sys.Mvc.FieldContext._hasValidationFiredTag] = true;
525 }
526 },
527
528 _onErrorCountChanged: function Sys_Mvc_FieldContext$_onErrorCountChanged() {
529 if (!this._errors.length) {
530 this._displaySuccess();
531 }
532 else {
533 this._displayError();
534 }
535 },
536
537 validate: function Sys_Mvc_FieldContext$validate(eventName) {
538 /// <param name="eventName" type="String">
539 /// </param>
540 /// <returns type="Array" elementType="String"></returns>
541 var validations = this.validations;
542 var errors = [];
543 var value = this._getStringValue();
544 for (var i = 0; i < validations.length; i++) {
545 var validation = validations[i];
546 var context = Sys.Mvc.$create_ValidationContext();
547 context.eventName = eventName;
548 context.fieldContext = this;
549 context.validation = validation;
550 var retVal = validation.validator(value, context);
551 var errorMessage = this._getErrorString(retVal, validation.fieldErrorMessage);
552 if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(errorMessage)) {
553 Array.add(errors, errorMessage);
554 }
555 }
556 this._markValidationFired();
557 this.clearErrors();
558 this.addErrors(errors);
559 return errors;
560 }
561 }
562
563
564 ////////////////////////////////////////////////////////////////////////////////
565 // Sys.Mvc.RangeValidator
566
567 Sys.Mvc.RangeValidator = function Sys_Mvc_RangeValidator(minimum, maximum) {
568 /// <param name="minimum" type="Number">
569 /// </param>
570 /// <param name="maximum" type="Number">
571 /// </param>
572 /// <field name="_minimum" type="Number">
573 /// </field>
574 /// <field name="_maximum" type="Number">
575 /// </field>
576 this._minimum = minimum;
577 this._maximum = maximum;
578 }
579 Sys.Mvc.RangeValidator.create = function Sys_Mvc_RangeValidator$create(rule) {
580 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
581 /// </param>
582 /// <returns type="Sys.Mvc.Validator"></returns>
583 var min = rule.ValidationParameters['min'];
584 var max = rule.ValidationParameters['max'];
585 return Function.createDelegate(new Sys.Mvc.RangeValidator(min, max), new Sys.Mvc.RangeValidator(min, max).validate);
586 }
587 Sys.Mvc.RangeValidator.prototype = {
588 _minimum: null,
589 _maximum: null,
590
591 validate: function Sys_Mvc_RangeValidator$validate(value, context) {
592 /// <param name="value" type="String">
593 /// </param>
594 /// <param name="context" type="Sys.Mvc.ValidationContext">
595 /// </param>
596 /// <returns type="Object"></returns>
597 if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
598 return true;
599 }
600 var n = Number.parseLocale(value);
601 return (!isNaN(n) && this._minimum <= n && n <= this._maximum);
602 }
603 }
604
605
606 ////////////////////////////////////////////////////////////////////////////////
607 // Sys.Mvc.RegularExpressionValidator
608
609 Sys.Mvc.RegularExpressionValidator = function Sys_Mvc_RegularExpressionValidator(pattern) {
610 /// <param name="pattern" type="String">
611 /// </param>
612 /// <field name="_pattern" type="String">
613 /// </field>
614 this._pattern = pattern;
615 }
616 Sys.Mvc.RegularExpressionValidator.create = function Sys_Mvc_RegularExpressionValidator$create(rule) {
617 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
618 /// </param>
619 /// <returns type="Sys.Mvc.Validator"></returns>
620 var pattern = rule.ValidationParameters['pattern'];
621 return Function.createDelegate(new Sys.Mvc.RegularExpressionValidator(pattern), new Sys.Mvc.RegularExpressionValidator(pattern).validate);
622 }
623 Sys.Mvc.RegularExpressionValidator.prototype = {
624 _pattern: null,
625
626 validate: function Sys_Mvc_RegularExpressionValidator$validate(value, context) {
627 /// <param name="value" type="String">
628 /// </param>
629 /// <param name="context" type="Sys.Mvc.ValidationContext">
630 /// </param>
631 /// <returns type="Object"></returns>
632 if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
633 return true;
634 }
635 var regExp = new RegExp(this._pattern);
636 var matches = regExp.exec(value);
637 return (!Sys.Mvc._validationUtil.arrayIsNullOrEmpty(matches) && matches[0].length === value.length);
638 }
639 }
640
641
642 ////////////////////////////////////////////////////////////////////////////////
643 // Sys.Mvc.RequiredValidator
644
645 Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() {
646 }
647 Sys.Mvc.RequiredValidator.create = function Sys_Mvc_RequiredValidator$create(rule) {
648 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
649 /// </param>
650 /// <returns type="Sys.Mvc.Validator"></returns>
651 return Function.createDelegate(new Sys.Mvc.RequiredValidator(), new Sys.Mvc.RequiredValidator().validate);
652 }
653 Sys.Mvc.RequiredValidator._isRadioInputElement = function Sys_Mvc_RequiredValidator$_isRadioInputElement(element) {
654 /// <param name="element" type="Object" domElement="true">
655 /// </param>
656 /// <returns type="Boolean"></returns>
657 if (element.tagName.toUpperCase() === 'INPUT') {
658 var inputType = (element.type).toUpperCase();
659 if (inputType === 'RADIO') {
660 return true;
661 }
662 }
663 return false;
664 }
665 Sys.Mvc.RequiredValidator._isSelectInputElement = function Sys_Mvc_RequiredValidator$_isSelectInputElement(element) {
666 /// <param name="element" type="Object" domElement="true">
667 /// </param>
668 /// <returns type="Boolean"></returns>
669 if (element.tagName.toUpperCase() === 'SELECT') {
670 return true;
671 }
672 return false;
673 }
674 Sys.Mvc.RequiredValidator._isTextualInputElement = function Sys_Mvc_RequiredValidator$_isTextualInputElement(element) {
675 /// <param name="element" type="Object" domElement="true">
676 /// </param>
677 /// <returns type="Boolean"></returns>
678 if (element.tagName.toUpperCase() === 'INPUT') {
679 var inputType = (element.type).toUpperCase();
680 switch (inputType) {
681 case 'TEXT':
682 case 'PASSWORD':
683 case 'FILE':
684 return true;
685 }
686 }
687 if (element.tagName.toUpperCase() === 'TEXTAREA') {
688 return true;
689 }
690 return false;
691 }
692 Sys.Mvc.RequiredValidator._validateRadioInput = function Sys_Mvc_RequiredValidator$_validateRadioInput(elements) {
693 /// <param name="elements" type="Array" elementType="Object" elementDomElement="true">
694 /// </param>
695 /// <returns type="Object"></returns>
696 for (var i = 0; i < elements.length; i++) {
697 var element = elements[i];
698 if (element.checked) {
699 return true;
700 }
701 }
702 return false;
703 }
704 Sys.Mvc.RequiredValidator._validateSelectInput = function Sys_Mvc_RequiredValidator$_validateSelectInput(optionElements) {
705 /// <param name="optionElements" type="DOMElementCollection">
706 /// </param>
707 /// <returns type="Object"></returns>
708 for (var i = 0; i < optionElements.length; i++) {
709 var element = optionElements[i];
710 if (element.selected) {
711 if (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value)) {
712 return true;
713 }
714 }
715 }
716 return false;
717 }
718 Sys.Mvc.RequiredValidator._validateTextualInput = function Sys_Mvc_RequiredValidator$_validateTextualInput(element) {
719 /// <param name="element" type="Object" domElement="true">
720 /// </param>
721 /// <returns type="Object"></returns>
722 return (!Sys.Mvc._validationUtil.stringIsNullOrEmpty(element.value));
723 }
724 Sys.Mvc.RequiredValidator.prototype = {
725
726 validate: function Sys_Mvc_RequiredValidator$validate(value, context) {
727 /// <param name="value" type="String">
728 /// </param>
729 /// <param name="context" type="Sys.Mvc.ValidationContext">
730 /// </param>
731 /// <returns type="Object"></returns>
732 var elements = context.fieldContext.elements;
733 if (!elements.length) {
734 return true;
735 }
736 var sampleElement = elements[0];
737 if (Sys.Mvc.RequiredValidator._isTextualInputElement(sampleElement)) {
738 return Sys.Mvc.RequiredValidator._validateTextualInput(sampleElement);
739 }
740 if (Sys.Mvc.RequiredValidator._isRadioInputElement(sampleElement)) {
741 return Sys.Mvc.RequiredValidator._validateRadioInput(elements);
742 }
743 if (Sys.Mvc.RequiredValidator._isSelectInputElement(sampleElement)) {
744 return Sys.Mvc.RequiredValidator._validateSelectInput((sampleElement).options);
745 }
746 return true;
747 }
748 }
749
750
751 ////////////////////////////////////////////////////////////////////////////////
752 // Sys.Mvc.StringLengthValidator
753
754 Sys.Mvc.StringLengthValidator = function Sys_Mvc_StringLengthValidator(minLength, maxLength) {
755 /// <param name="minLength" type="Number" integer="true">
756 /// </param>
757 /// <param name="maxLength" type="Number" integer="true">
758 /// </param>
759 /// <field name="_maxLength" type="Number" integer="true">
760 /// </field>
761 /// <field name="_minLength" type="Number" integer="true">
762 /// </field>
763 this._minLength = minLength;
764 this._maxLength = maxLength;
765 }
766 Sys.Mvc.StringLengthValidator.create = function Sys_Mvc_StringLengthValidator$create(rule) {
767 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
768 /// </param>
769 /// <returns type="Sys.Mvc.Validator"></returns>
770 var minLength = (rule.ValidationParameters['min'] || 0);
771 var maxLength = (rule.ValidationParameters['max'] || Number.MAX_VALUE);
772 return Function.createDelegate(new Sys.Mvc.StringLengthValidator(minLength, maxLength), new Sys.Mvc.StringLengthValidator(minLength, maxLength).validate);
773 }
774 Sys.Mvc.StringLengthValidator.prototype = {
775 _maxLength: 0,
776 _minLength: 0,
777
778 validate: function Sys_Mvc_StringLengthValidator$validate(value, context) {
779 /// <param name="value" type="String">
780 /// </param>
781 /// <param name="context" type="Sys.Mvc.ValidationContext">
782 /// </param>
783 /// <returns type="Object"></returns>
784 if (Sys.Mvc._validationUtil.stringIsNullOrEmpty(value)) {
785 return true;
786 }
787 return (this._minLength <= value.length && value.length <= this._maxLength);
788 }
789 }
790
791
792 ////////////////////////////////////////////////////////////////////////////////
793 // Sys.Mvc._validationUtil
794
795 Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() {
796 }
797 Sys.Mvc._validationUtil.arrayIsNullOrEmpty = function Sys_Mvc__validationUtil$arrayIsNullOrEmpty(array) {
798 /// <param name="array" type="Array" elementType="Object">
799 /// </param>
800 /// <returns type="Boolean"></returns>
801 return (!array || !array.length);
802 }
803 Sys.Mvc._validationUtil.stringIsNullOrEmpty = function Sys_Mvc__validationUtil$stringIsNullOrEmpty(value) {
804 /// <param name="value" type="String">
805 /// </param>
806 /// <returns type="Boolean"></returns>
807 return (!value || !value.length);
808 }
809 Sys.Mvc._validationUtil.elementSupportsEvent = function Sys_Mvc__validationUtil$elementSupportsEvent(element, eventAttributeName) {
810 /// <param name="element" type="Object" domElement="true">
811 /// </param>
812 /// <param name="eventAttributeName" type="String">
813 /// </param>
814 /// <returns type="Boolean"></returns>
815 return (eventAttributeName in element);
816 }
817 Sys.Mvc._validationUtil.removeAllChildren = function Sys_Mvc__validationUtil$removeAllChildren(element) {
818 /// <param name="element" type="Object" domElement="true">
819 /// </param>
820 while (element.firstChild) {
821 element.removeChild(element.firstChild);
822 }
823 }
824 Sys.Mvc._validationUtil.setInnerText = function Sys_Mvc__validationUtil$setInnerText(element, innerText) {
825 /// <param name="element" type="Object" domElement="true">
826 /// </param>
827 /// <param name="innerText" type="String">
828 /// </param>
829 var textNode = document.createTextNode(innerText);
830 Sys.Mvc._validationUtil.removeAllChildren(element);
831 element.appendChild(textNode);
832 }
833
834
835 ////////////////////////////////////////////////////////////////////////////////
836 // Sys.Mvc.ValidatorRegistry
837
838 Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() {
839 /// <field name="validators" type="Object" static="true">
840 /// </field>
841 }
842 Sys.Mvc.ValidatorRegistry.getValidator = function Sys_Mvc_ValidatorRegistry$getValidator(rule) {
843 /// <param name="rule" type="Sys.Mvc.JsonValidationRule">
844 /// </param>
845 /// <returns type="Sys.Mvc.Validator"></returns>
846 var creator = Sys.Mvc.ValidatorRegistry.validators[rule.ValidationType];
847 return (creator) ? creator(rule) : null;
848 }
849 Sys.Mvc.ValidatorRegistry._getDefaultValidators = function Sys_Mvc_ValidatorRegistry$_getDefaultValidators() {
850 /// <returns type="Object"></returns>
851 return { required: Function.createDelegate(null, Sys.Mvc.RequiredValidator.create), length: Function.createDelegate(null, Sys.Mvc.StringLengthValidator.create), regex: Function.createDelegate(null, Sys.Mvc.RegularExpressionValidator.create), range: Function.createDelegate(null, Sys.Mvc.RangeValidator.create), number: Function.createDelegate(null, Sys.Mvc.NumberValidator.create) };
852 }
853
854
855 Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator');
856 Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext');
857 Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext');
858 Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator');
859 Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator');
860 Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator');
861 Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator');
862 Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil');
863 Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry');
864 Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors';
865 Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid';
866 Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation';
867 Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged';
868 Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired';
869 Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error';
870 Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid';
871 Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error';
872 Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid';
873 Sys.Mvc.ValidatorRegistry.validators = Sys.Mvc.ValidatorRegistry._getDefaultValidators();
874
875 // ---- Do not remove this footer ----
876 // Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
877 // -----------------------------------
878
879 // register validation
880 Sys.Application.add_load(function() {
881 Sys.Application.remove_load(arguments.callee);
882 Sys.Mvc.FormContext._Application_Load();
883 });