/* * WebUIValidation.js * * Authors: * Chris Toshok (toshok@ximian.com) * * (c) 2005-2009 Novell, Inc. (http://www.novell.com) * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ function WebFormValidation_Initialize(webForm) { webForm.have_validation_summaries = false; webForm.HaveRegexp = function () { if (window.RegExp) return true; return false; } webForm.ValidatorOnLoad = function () { if (typeof (webForm.Page_ValidationSummaries) != 'undefined' && webForm.Page_ValidationSummaries != null) { webForm.have_validation_summaries = true; } if (typeof (webForm.Page_Validators) != 'undefined' || webForm.Page_Validators != null) { for (var v = 0; v < webForm.Page_Validators.length; v++) { var vo = webForm.Page_Validators [v]; if (typeof(vo.isvalid) == "string" && vo.isvalid == "False") vo._isvalid = false; else vo._isvalid = true; if (typeof(vo.enabled) == "string" && vo.enabled == "False") vo._enabled = false; else vo._enabled = true; if (typeof(vo.evaluationfunction) == "string") vo.evaluationfunction = webForm [vo.evaluationfunction]; } } webForm.Page_ValidationActive = true; } webForm.validation_result = true; webForm.ValidationSummaryOnSubmit = function (group) { /* handle validation summaries here */ if (webForm.validation_result == false && webForm.have_validation_summaries) { for (var vi = 0; vi < webForm.Page_ValidationSummaries.length; vi++) { var vs = webForm.Page_ValidationSummaries[vi]; if(webForm.IsValidationGroupMatch(vs, group)) { var header = ""; if(typeof(vs.headertext)=="string") header = vs.headertext; if (vs.showsummary != "False") { if (typeof(vs.displaymode) != "string") vs.displaymode = "BulletList"; var html = ""; if (vs.displaymode == "List") { list_pre = ""; list_post = ""; item_pre = ""; item_post = "
"; } else if (vs.displaymode == "SingleParagraph") { list_pre = ""; list_post = "
"; item_pre = ""; item_post = " "; } else { list_pre = ""; item_pre = "\n
  • "; item_post = "
  • "; } html += header; html += list_pre; for (var v = 0; v < webForm.Page_Validators.length; v++) { var vo = webForm.Page_Validators [v]; if (!vo._isvalid) { var text = vo.errormessage; if (text != null && text != "") { html += item_pre + text + item_post; } } } html += list_post; vs.innerHTML = html; vs.style.display = "block"; } if (vs.showmessagebox == "True") { var v_contents = ""; for (var v = 0; v < webForm.Page_Validators.length; v++) { var vo = webForm.Page_Validators [v]; if (!vo._isvalid) { var text = vo.errormessage; if (text != null && text != "") { v_contents += "-" + text + "\n"; } } } var alert_header = header; if (alert_header != "") alert_header += "\n"; summary_contents = alert_header + v_contents; alert (summary_contents); } } } } } webForm.ValidatorCommonOnSubmit = function () { var rv = webForm.validation_result; webForm.validation_result = true; return rv; } webForm.ValidatorGetValue = function (controlname) { var el = webForm.GetElement (controlname); if (el == null) return null; /* if the element has a 'value' attribute, return it */ if (typeof (el.value) != 'undefined' && el.value != null) { return el.value; } /* if it's a select, loop over the options looking for the * selected one. */ if (typeof (el.selectedIndex) != 'undefined') { return el.options[el.selectedIndex].value; } return webForm.ValidatorGetValueRecursive(el); } webForm.ValidatorGetValueRecursive = function (el) { if (typeof(el.value) == "string") { if (el.type != "radio" || el.checked == true) return el.value; } for (var i = 0; i 0); var beginGroupSize, subsequentGroupSize; var groupSizeNum = parseInt(validator.groupsize, 10); if (!isNaN(groupSizeNum) && groupSizeNum > 0) { beginGroupSize = "{1," + groupSizeNum + "}"; subsequentGroupSize = "{" + groupSizeNum + "}"; } else { beginGroupSize = subsequentGroupSize = "+"; } var exp = new RegExp("^\\s*([-\\+])?((\\d" + beginGroupSize + "(\\" + validator.groupchar + "\\d" + subsequentGroupSize + ")+)|\\d*)" + (hasDigits ? "\\" + validator.decimalchar + "?(\\d{0," + validator.digits + "})" : "") + "\\s*$"); var m = s.match(exp); if (m == null) return null; if (m[2].length == 0 && hasDigits && m[5].length == 0) return null; var cleanInput = (m[1] != null ? m[1] : "") + m[2].replace(new RegExp("(\\" + validator.groupchar + ")", "g"), "") + ((hasDigits && m[5].length > 0) ? "." + m[5] : ""); var num = parseFloat(cleanInput); return (isNaN(num) ? null : num); } webForm.GetFullYear = function (year, maxYear) { var twoDigitMaxYear = maxYear % 100; var centure = maxYear - twoDigitMaxYear; return ((year > twoDigitMaxYear) ? (centure - 100 + year) : (centure + year)); } /*******************/ /* validators */ webForm.CompareValidatorEvaluateIsValid = function (validator) { var Operator = validator.operator.toLowerCase(); var ControlToValidate = validator.controltovalidate; var DataType = validator.type; var ctrl_value = webForm.ValidatorGetValue (ControlToValidate); if (webForm.ValidatorTrim (ctrl_value) == "") { webForm.ValidatorSucceeded (validator); return true; } var left = webForm.Convert (ctrl_value, DataType, validator); if (left == null) { webForm.ValidatorFailed (validator); return false; } if (Operator == "datatypecheck") { webForm.ValidatorSucceeded (validator); return true; } var compare = ""; if (typeof(validator.controltocompare) == "string" && document.getElementById(validator.controltocompare)) compare = webForm.ValidatorGetValue(validator.controltocompare); else if (typeof(validator.valuetocompare) == "string") compare = validator.valuetocompare; var right = compare != null ? webForm.Convert (compare, DataType, validator) : null; if (right == null) { webForm.ValidatorSucceeded (validator); return true; } var result = false; if (Operator == "equal") { result = (left == right); } else if (Operator == "notequal") { result = (left != right); } else if (Operator == "lessthan") { result = (left < right); } else if (Operator == "lessthanequal") { result = (left <= right); } else if (Operator == "greaterthan") { result = (left > right); } else if (Operator == "greaterthanequal") { result = (left >= right); } if (result == false) { webForm.ValidatorFailed (validator); return false; } else { webForm.ValidatorSucceeded (validator); return true; } } webForm.RangeValidatorEvaluateIsValid = function (validator) { var ControlToValidate = validator.controltovalidate; var DataType = validator.type; var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate)); if (ctrl_value == "") { webForm.ValidatorSucceeded (validator); return true; } var MinimumValue = webForm.Convert (validator.minimumvalue, DataType, validator); var MaximumValue = webForm.Convert (validator.maximumvalue, DataType, validator); var val = webForm.Convert (ctrl_value, DataType, validator); if (val == null || val < MinimumValue || val > MaximumValue) { webForm.ValidatorFailed (validator); return false; } else { webForm.ValidatorSucceeded (validator); return true; } } webForm.RegularExpressionValidatorEvaluateIsValid = function (validator) { var ValidationExpression = validator.validationexpression; var ControlToValidate = validator.controltovalidate; var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate)); if (ctrl_value == "") { webForm.ValidatorSucceeded (validator); return true; } if (!webForm.HaveRegexp ()) return false; var r = new RegExp (ValidationExpression); match = r.exec (ctrl_value); if (match == null || match[0] != ctrl_value) { webForm.ValidatorFailed (validator); return false; } else { webForm.ValidatorSucceeded (validator); return true; } } webForm.RequiredFieldValidatorEvaluateIsValid = function (validator) { var InitialValue = validator.initialvalue; var ControlToValidate = validator.controltovalidate; var ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate)); if (ctrl_value == webForm.ValidatorTrim (InitialValue)) { webForm.ValidatorFailed (validator); return false; } else { webForm.ValidatorSucceeded (validator); return true; } } webForm.CustomValidatorEvaluateIsValid = function (validator) { var ControlToValidate = validator.controltovalidate; var evaluationfunc = validator.clientvalidationfunction; var ctrl_value; if (ControlToValidate) { ctrl_value = webForm.ValidatorTrim (webForm.ValidatorGetValue (ControlToValidate)); if ((ctrl_value.length == 0) && ((typeof(validator.validateemptytext) != "string") || (validator.validateemptytext != "true"))) { webForm.ValidatorSucceeded (validator); return true; } } else ctrl_value = ""; var result = true; if (evaluationfunc && evaluationfunc != "") { args = {Value:ctrl_value, IsValid:true}; eval (evaluationfunc + "(validator, args)"); result = args.IsValid; } if (result) { webForm.ValidatorSucceeded (validator); return true; } else { webForm.ValidatorFailed (validator); return false; } } /*********************/ /* utility functions */ webForm.Convert = function (s, ty, validator) { var cvt = this ["To" + ty]; if (typeof (cvt) == 'function') return cvt.call (this, s, validator); else return null; } webForm.ValidatorUpdateDisplay = function (v, valid) { var display = v.display; /* for validators that aren't displayed, do nothing */ if (display == "None") { return; } v.style.visibility = (valid ? "hidden" : "visible"); if (display == "Dynamic") { v.style.display = (valid ? "none" : "inline"); } } webForm.ValidatorFailed = function (v) { webForm.ValidatorUpdateDisplay (v, false); } webForm.ValidatorSucceeded = function (v) { webForm.ValidatorUpdateDisplay (v, true); } webForm.GetElement = function (id) { var x = document.getElementById ? document.getElementById (id) : ((document.all) ? document.all [id] : null); return x; } }