/MvcMusicStore/Scripts/MicrosoftMvcValidation.debug.js
JavaScript | 883 lines | 553 code | 78 blank | 252 comment | 87 complexity | 5a78037822565117b4e7b1f4625cf244 MD5 | raw file
1//!---------------------------------------------------------- 2//! Copyright (C) Microsoft Corporation. All rights reserved. 3//!---------------------------------------------------------- 4//! MicrosoftMvcValidation.js 5 6 7Type.registerNamespace('Sys.Mvc'); 8 9//////////////////////////////////////////////////////////////////////////////// 10// Sys.Mvc.Validation 11 12Sys.Mvc.$create_Validation = function Sys_Mvc_Validation() { return {}; } 13 14 15//////////////////////////////////////////////////////////////////////////////// 16// Sys.Mvc.JsonValidationField 17 18Sys.Mvc.$create_JsonValidationField = function Sys_Mvc_JsonValidationField() { return {}; } 19 20 21//////////////////////////////////////////////////////////////////////////////// 22// Sys.Mvc.JsonValidationOptions 23 24Sys.Mvc.$create_JsonValidationOptions = function Sys_Mvc_JsonValidationOptions() { return {}; } 25 26 27//////////////////////////////////////////////////////////////////////////////// 28// Sys.Mvc.JsonValidationRule 29 30Sys.Mvc.$create_JsonValidationRule = function Sys_Mvc_JsonValidationRule() { return {}; } 31 32 33//////////////////////////////////////////////////////////////////////////////// 34// Sys.Mvc.ValidationContext 35 36Sys.Mvc.$create_ValidationContext = function Sys_Mvc_ValidationContext() { return {}; } 37 38 39//////////////////////////////////////////////////////////////////////////////// 40// Sys.Mvc.NumberValidator 41 42Sys.Mvc.NumberValidator = function Sys_Mvc_NumberValidator() { 43} 44Sys.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} 50Sys.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 70Sys.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} 113Sys.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} 122Sys.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} 138Sys.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} 144Sys.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} 158Sys.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} 198Sys.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 336Sys.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} 382Sys.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 567Sys.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} 579Sys.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} 587Sys.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 609Sys.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} 616Sys.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} 623Sys.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 645Sys.Mvc.RequiredValidator = function Sys_Mvc_RequiredValidator() { 646} 647Sys.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} 653Sys.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} 665Sys.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} 674Sys.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} 692Sys.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} 704Sys.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} 718Sys.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} 724Sys.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 754Sys.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} 766Sys.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} 774Sys.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 795Sys.Mvc._validationUtil = function Sys_Mvc__validationUtil() { 796} 797Sys.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} 803Sys.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} 809Sys.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} 817Sys.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} 824Sys.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 838Sys.Mvc.ValidatorRegistry = function Sys_Mvc_ValidatorRegistry() { 839 /// <field name="validators" type="Object" static="true"> 840 /// </field> 841} 842Sys.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} 849Sys.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 855Sys.Mvc.NumberValidator.registerClass('Sys.Mvc.NumberValidator'); 856Sys.Mvc.FormContext.registerClass('Sys.Mvc.FormContext'); 857Sys.Mvc.FieldContext.registerClass('Sys.Mvc.FieldContext'); 858Sys.Mvc.RangeValidator.registerClass('Sys.Mvc.RangeValidator'); 859Sys.Mvc.RegularExpressionValidator.registerClass('Sys.Mvc.RegularExpressionValidator'); 860Sys.Mvc.RequiredValidator.registerClass('Sys.Mvc.RequiredValidator'); 861Sys.Mvc.StringLengthValidator.registerClass('Sys.Mvc.StringLengthValidator'); 862Sys.Mvc._validationUtil.registerClass('Sys.Mvc._validationUtil'); 863Sys.Mvc.ValidatorRegistry.registerClass('Sys.Mvc.ValidatorRegistry'); 864Sys.Mvc.FormContext._validationSummaryErrorCss = 'validation-summary-errors'; 865Sys.Mvc.FormContext._validationSummaryValidCss = 'validation-summary-valid'; 866Sys.Mvc.FormContext._formValidationTag = '__MVC_FormValidation'; 867Sys.Mvc.FieldContext._hasTextChangedTag = '__MVC_HasTextChanged'; 868Sys.Mvc.FieldContext._hasValidationFiredTag = '__MVC_HasValidationFired'; 869Sys.Mvc.FieldContext._inputElementErrorCss = 'input-validation-error'; 870Sys.Mvc.FieldContext._inputElementValidCss = 'input-validation-valid'; 871Sys.Mvc.FieldContext._validationMessageErrorCss = 'field-validation-error'; 872Sys.Mvc.FieldContext._validationMessageValidCss = 'field-validation-valid'; 873Sys.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 880Sys.Application.add_load(function() { 881 Sys.Application.remove_load(arguments.callee); 882 Sys.Mvc.FormContext._Application_Load(); 883});