/src/Samples/Fubu/src/WebTest/Scripts/MicrosoftMvcValidation.debug.js

https://github.com/tyronegroves/mvcturbine · JavaScript · 881 lines · 551 code · 78 blank · 252 comment · 84 complexity · 9960dfbd4af49dfa100dbefa298d3945 MD5 · raw file

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