diff options
author | xue <> | 2006-04-27 13:13:17 +0000 |
---|---|---|
committer | xue <> | 2006-04-27 13:13:17 +0000 |
commit | 1f63d5c05ba117e0158c02d5bc79fa1f38f8ce85 (patch) | |
tree | a583561d32abb2e7ee400d8532d34d1acae96157 /framework/Web/Javascripts | |
parent | 8ab196ce6c2d5de323bdd8ebcc11a73814c0cdca (diff) |
merge from 3.0 branch till 978.
Diffstat (limited to 'framework/Web/Javascripts')
-rw-r--r-- | framework/Web/Javascripts/TJavaScript.php | 42 | ||||
-rw-r--r-- | framework/Web/Javascripts/js/prado.js | 12 | ||||
-rw-r--r-- | framework/Web/Javascripts/js/validator.js | 110 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/form.js | 2 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/prado.js | 16 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/validation.js | 767 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/validation3.js | 154 | ||||
-rw-r--r-- | framework/Web/Javascripts/prado/validators.js | 222 |
8 files changed, 194 insertions, 1131 deletions
diff --git a/framework/Web/Javascripts/TJavaScript.php b/framework/Web/Javascripts/TJavaScript.php index a3848201..75fc2438 100644 --- a/framework/Web/Javascripts/TJavaScript.php +++ b/framework/Web/Javascripts/TJavaScript.php @@ -84,6 +84,26 @@ class TJavaScript else
return strtr($js,array("\t"=>'\t',"\n"=>'\n',"\r"=>'\r','"'=>'\"','\''=>'\\\'','\\'=>'\\\\'));
}
+
+ /**
+ * @return string considers the string as raw javascript function code
+ */
+ public static function quoteFunction($js)
+ {
+ if(self::isFunction($js))
+ return $js;
+ else
+ return 'javascript:'.$js;
+ }
+
+ /**
+ * @return boolean true if string is raw javascript function code, i.e., if
+ * the string begins with <tt>javascript:</tt>
+ */
+ public static function isFunction($js)
+ {
+ return preg_match('/^\s*javascript:/', $js);
+ }
/**
* Encodes a PHP variable into javascript representation.
@@ -96,16 +116,12 @@ class TJavaScript * //expects the following javascript code
* // {'onLoading':'doit','onComplete':'more'}
* </code>
- *
- * To pass raw javascript statements start strings with
- * <tt>javascript:</tt>. E.g.
- * <code>
- * $options['onLoading'] = "javascript:function(){ alert('hello'); }";
- * //outputs {'onLoading':function(){ alert('hello'); }}
- * </code>
*
- * For higher complexity data structures use {@link jsonEncode} and {@link
- * jsonDecode} to serialize and unserialize.
+ * For higher complexity data structures use {@link jsonEncode} and {@link jsonDecode}
+ * to serialize and unserialize.
+ *
+ * Note: strings begining with <tt>javascript:</tt> will be considered as
+ * raw javascript code and no encoding of that string will be enforced.
*
* @param mixed PHP variable to be encoded
* @param boolean whether the output is a map or a list.
@@ -122,9 +138,11 @@ class TJavaScript if(($first==='[' && $last===']') || ($first==='{' && $last==='}'))
return $value;
}
- else if(strpos($value, 'javascript:')===0)
- return substr($value,11);
- return "'".self::quoteString($value)."'";
+ // if string begins with javascript: return the raw string minus the prefix
+ if(self::isFunction($value))
+ return preg_replace('/^\s*javascript:/', '', $value);
+ else
+ return "'".self::quoteString($value)."'";
}
else if(is_bool($value))
return $value?'true':'false';
diff --git a/framework/Web/Javascripts/js/prado.js b/framework/Web/Javascripts/js/prado.js index c7145188..394d5eeb 100644 --- a/framework/Web/Javascripts/js/prado.js +++ b/framework/Web/Javascripts/js/prado.js @@ -1803,9 +1803,9 @@ var newdate=new Date(year,month-1,date, 0, 0, 0); return newdate; } }); -var Prado = -{ -Version: '3.0a', +var Prado = +{ +Version: '3.0.0', Browser : function() { var info = { Version : "1.0" }; @@ -1830,11 +1830,11 @@ info.opera7 = ( ( info.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( info info.operaOld = info.opera && !info.opera7; return info; }, -ImportCss : function(doc, css_file) +ImportCss : function(doc, css_file) { if (Prado.Browser().ie) var styleSheet = doc.createStyleSheet(css_file); -else +else { var elm = doc.createElement("link"); elm.rel = "stylesheet"; @@ -1850,7 +1850,7 @@ var form = $(options['FormID']); var canSubmit = true; if(options['CausesValidation'] && typeof(Prado.Validation) != "undefined") { -if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup'])) +if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup'], $(options['ID']))) return Event.stop(event); } if(options['PostBackUrl'] && options['PostBackUrl'].length > 0) diff --git a/framework/Web/Javascripts/js/validator.js b/framework/Web/Javascripts/js/validator.js index 8659d2e9..5e23df50 100644 --- a/framework/Web/Javascripts/js/validator.js +++ b/framework/Web/Javascripts/js/validator.js @@ -3,11 +3,11 @@ Prado.Validation =Class.create(); Object.extend(Prado.Validation, { managers : {}, -validate : function(formID, groupID) +validate : function(formID, groupID, invoker) { if(this.managers[formID]) { -return this.managers[formID].validate(groupID); +return this.managers[formID].validate(groupID, invoker); } else { @@ -49,14 +49,14 @@ initialize : function(options) this.options = options; Prado.Validation.managers[options.FormID] = this; }, -validate : function(group) +validate : function(group, invoker) { if(group) -return this._validateGroup(group); +return this._validateGroup(group, invoker); else -return this._validateNonGroup(); +return this._validateNonGroup(invoker); }, -_validateGroup: function(groupID) +_validateGroup: function(groupID, invoker) { var valid = true; if(this.groups.include(groupID)) @@ -64,7 +64,7 @@ if(this.groups.include(groupID)) this.validators.each(function(validator) { if(validator.group == groupID) -valid = valid & validator.validate(); +valid = valid & validator.validate(invoker); else validator.hide(); }); @@ -72,13 +72,13 @@ validator.hide(); this.updateSummary(groupID, true); return valid; }, -_validateNonGroup : function() +_validateNonGroup : function(invoker) { var valid = true; this.validators.each(function(validator) { if(!validator.group) -valid = valid & validator.validate(); +valid = valid & validator.validate(invoker); else validator.hide(); }); @@ -275,11 +275,9 @@ options : {}, _isObserving : {}, group : null, manager : null, +message : null, initialize : function(options) { -options.OnValidate = options.OnValidate || Prototype.emptyFunction; -options.OnSuccess = options.OnSuccess || Prototype.emptyFunction; -options.OnError = options.OnError || Prototype.emptyFunction; this.options = options; this.control = $(options.ControlToValidate); this.message = $(options.ID); @@ -321,16 +319,34 @@ this.isValid = true; this.updateControl(); this.visible = false; }, -validate : function() +validate : function(invoker) { +if(typeof(this.options.OnValidate) == "function") +this.options.OnValidate(this, invoker); if(this.enabled) this.isValid = this.evaluateIsValid(); -this.options.OnValidate(this); -this.updateControl(); if(this.isValid) -this.options.OnSuccess(this); +{ +if(typeof(this.options.OnSuccess) == "function") +{ +this.visible = true; +this.updateControlCssClass(this.control, this.isValid); +this.options.OnSuccess(this, invoker); +} +else +this.updateControl(); +} else -this.options.OnError(this); +{ +if(typeof(this.options.OnError) == "function") +{ +this.visible = true; +this.updateControlCssClass(this.control, this.isValid); +this.options.OnError(this, invoker); +} +else +this.updateControl(); +} this.observeChanges(this.control); return this.isValid; }, @@ -353,7 +369,7 @@ validator.manager.updateSummary(validator.group); this._isObserving[control.id+this.options.ID] = true; } }, -_trim : function(value) +trim : function(value) { return typeof(value) == "string" ? value.trim() : ""; }, @@ -393,20 +409,20 @@ getValidationValue : function(control) { case 'TDatePicker': if(control.type == "text") - return this._trim($F(control)); + return this.trim($F(control)); else { - this._observeDatePickerChanges(); + this.observeDatePickerChanges(); return Prado.WebUI.TDatePicker.getDropDownDate(control).getTime(); } default: - if(this._isListControlType()) - return this._getFirstSelectedListValue(); + if(this.isListControlType()) + return this.getFirstSelectedListValue(); else - return this._trim($F(control)); + return this.trim($F(control)); } }, -_observeDatePickerChanges : function() +observeDatePickerChanges : function() { if(Prado.Browser().ie) { @@ -416,11 +432,11 @@ this.observeChanges(DatePicker.getMonthListControl(this.control)); this.observeChanges(DatePicker.getYearListControl(this.control)); } }, -_getSelectedValuesAndChecks : function(elements, initialValue) +getSelectedValuesAndChecks : function(elements, initialValue) { var checked = 0; var values = []; -var isSelected = this._isCheckBoxType(elements[0]) ? 'checked' : 'selected'; +var isSelected = this.isCheckBoxType(elements[0]) ? 'checked' : 'selected'; elements.each(function(element) { if(element[isSelected] && element.value != initialValue) @@ -431,7 +447,7 @@ values.push(element.value); }); return {'checks' : checked, 'values' : values}; }, -_getListElements : function() +getListElements : function() { switch(this.options.ControlType) { @@ -440,7 +456,7 @@ var elements = []; for(var i = 0; i < this.options.TotalItems; i++) { var element = $(this.options.ControlToValidate+"_"+i); -if(this._isCheckBoxType(element)) +if(this.isCheckBoxType(element)) elements.push(element); } return elements; @@ -457,7 +473,7 @@ default: return []; } }, -_isCheckBoxType : function(element) +isCheckBoxType : function(element) { if(element && element.type) { @@ -466,18 +482,18 @@ return type == "checkbox" || type == "radio"; } return false; }, -_isListControlType : function() +isListControlType : function() { var list = ['TCheckBoxList', 'TRadioButtonList', 'TListBox']; return list.include(this.options.ControlType); }, -_getFirstSelectedListValue : function() +getFirstSelectedListValue : function() { var initial = ""; if(typeof(this.options.InitialValue) != "undefined") initial = this.options.InitialValue; -var elements = this._getListElements(); -var selection = this._getSelectedValuesAndChecks(elements, initial); +var elements = this.getListElements(); +var selection = this.getSelectedValuesAndChecks(elements, initial); return selection.values.length > 0 ? selection.values[0] : initial; } } @@ -493,7 +509,7 @@ return true; else { var a = this.getValidationValue(); -var b = this._trim(this.options.InitialValue); +var b = this.trim(this.options.InitialValue); return(a != b); } } @@ -595,16 +611,16 @@ Prado.WebUI.TListControlValidator = Class.extend(Prado.WebUI.TBaseValidator, { evaluateIsValid : function() { -var elements = this._getListElements(); +var elements = this.getListElements(); if(elements && elements.length <= 0) return true; this.observeListElements(elements); -var selection = this._getSelectedValuesAndChecks(elements); +var selection = this.getSelectedValuesAndChecks(elements); return this.isValidList(selection.checks, selection.values); }, observeListElements : function(elements) { -if(Prado.Browser().ie && this._isCheckBoxType(elements[0])) +if(Prado.Browser().ie && this.isCheckBoxType(elements[0])) { var validator = this; elements.each(function(element) @@ -640,13 +656,13 @@ required = this.options.Required.split(/,\s*/); return required; } }); -Prado.WebUI.TDataTypeValidator = Class.extend(Prado.WebUI.TBaseValidator, -{ -evaluateIsValid : function() -{ -var value = this.getValidationValue(); -if(value.length <= 0) -return true; -return this.convert(this.options.DataType, value) != null; -} -}); +Prado.WebUI.TDataTypeValidator = Class.extend(Prado.WebUI.TBaseValidator, +{ +evaluateIsValid : function() +{ +var value = this.getValidationValue(); +if(value.length <= 0) +return true; +return this.convert(this.options.DataType, value) != null; +} +}); diff --git a/framework/Web/Javascripts/prado/form.js b/framework/Web/Javascripts/prado/form.js index 2beb945b..aec9395d 100644 --- a/framework/Web/Javascripts/prado/form.js +++ b/framework/Web/Javascripts/prado/form.js @@ -107,7 +107,7 @@ Prado.PostBack = function(event,options) if(options['CausesValidation'] && typeof(Prado.Validation) != "undefined")
{
- if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup']))
+ if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup'], $(options['ID'])))
return Event.stop(event);
}
diff --git a/framework/Web/Javascripts/prado/prado.js b/framework/Web/Javascripts/prado/prado.js index e63c2718..ad51e2f7 100644 --- a/framework/Web/Javascripts/prado/prado.js +++ b/framework/Web/Javascripts/prado/prado.js @@ -1,8 +1,8 @@ -var Prado =
-{
- Version: '3.0a',
-
+var Prado =
+{
+ Version: '3.0.0',
+
/**
* Returns browser information. Example
* <code>
@@ -36,12 +36,12 @@ var Prado = info.operaOld = info.opera && !info.opera7;
return info;
},
-
- ImportCss : function(doc, css_file)
+
+ ImportCss : function(doc, css_file)
{
if (Prado.Browser().ie)
var styleSheet = doc.createStyleSheet(css_file);
- else
+ else
{
var elm = doc.createElement("link");
@@ -51,5 +51,5 @@ var Prado = if (headArr = doc.getElementsByTagName("head"))
headArr[0].appendChild(elm);
}
- }
+ }
};
diff --git a/framework/Web/Javascripts/prado/validation.js b/framework/Web/Javascripts/prado/validation.js deleted file mode 100644 index 454f53f0..00000000 --- a/framework/Web/Javascripts/prado/validation.js +++ /dev/null @@ -1,767 +0,0 @@ -
-/**
- * Prado client-side javascript validation class.
- */
-Prado.Validation = Class.create();
-
-/**
- * Utilities for validation. Static class.
- */
-Prado.Validation.Util = Class.create();
-
-/**
- * Convert a string into integer, returns null if not integer.
- * @param {string} the string to convert to integer
- * @type {integer|null} null if string does not represent an integer.
- */
-Prado.Validation.Util.toInteger = function(value)
-{
- var exp = /^\s*[-\+]?\d+\s*$/;
- if (value.match(exp) == null)
- return null;
- var num = parseInt(value, 10);
- return (isNaN(num) ? null : num);
-}
-
-/**
- * Convert a string into a double/float value. <b>Internationalization
- * is not supported</b>
- * @param {string} the string to convert to double/float
- * @param {string} the decimal character
- * @return {float|null} null if string does not represent a float value
- */
-Prado.Validation.Util.toDouble = function(value, decimalchar)
-{
- decimalchar = undef(decimalchar) ? "." : decimalchar;
- var exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + decimalchar + "(\\d+))?\\s*$");
- var m = value.match(exp);
- if (m == null)
- return null;
- var cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
- var num = parseFloat(cleanInput);
- return (isNaN(num) ? null : num);
-}
-
-/**
- * Convert strings that represent a currency value (e.g. a float with grouping
- * characters) to float. E.g. "10,000.50" will become "10000.50". The number
- * of dicimal digits, grouping and decimal characters can be specified.
- * <i>The currency input format is <b>very</b> strict, null will be returned if
- * the pattern does not match</i>.
- * @param {string} the currency value
- * @param {string} the grouping character, default is ","
- * @param {int} number of decimal digits
- * @param {string} the decimal character, default is "."
- * @type {float|null} the currency value as float.
- */
-Prado.Validation.Util.toCurrency = function(value, groupchar, digits, decimalchar)
-{
- groupchar = undef(groupchar) ? "," : groupchar;
- decimalchar = undef(decimalchar) ? "." : decimalchar;
- digits = undef(digits) ? 2 : digits;
-
- var exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + groupchar + ")*)(\\d+)"
- + ((digits > 0) ? "(\\" + decimalchar + "(\\d{1," + digits + "}))?" : "")
- + "\\s*$");
- var m = value.match(exp);
- if (m == null)
- return null;
- var intermed = m[2] + m[5] ;
- var cleanInput = m[1] + intermed.replace(
- new RegExp("(\\" + groupchar + ")", "g"), "")
- + ((digits > 0) ? "." + m[7] : "");
- var num = parseFloat(cleanInput);
- return (isNaN(num) ? null : num);
-}
-
-/**
- * Get the date from string using the prodivided date format string.
- * The format notations are
- * # day -- %d or %e
- * # month -- %m
- * # year -- %y or %Y
- * # hour -- %H, %I, %k, or %l
- * # minutes -- %M
- * # P.M. -- %p or %P
- * @param {string} the formatted date string
- * @param {string} the date format
- * @type {Date} the date represented in the string
- */
-Prado.Validation.Util.toDate = function(value, format)
-{
- var y = 0;
- var m = -1;
- var d = 0;
- var a = value.split(/\W+/);
- var b = format.match(/%./g);
- var i = 0, j = 0;
- var hr = 0;
- var min = 0;
- for (i = 0; i < a.length; ++i) {
- if (!a[i])
- continue;
- switch (b[i]) {
- case "%d":
- case "%e":
- d = parseInt(a[i], 10);
- break;
-
- case "%m":
- m = parseInt(a[i], 10) - 1;
- break;
-
- case "%Y":
- case "%y":
- y = parseInt(a[i], 10);
- (y < 100) && (y += (y > 29) ? 1900 : 2000);
- break;
-
- case "%H":
- case "%I":
- case "%k":
- case "%l":
- hr = parseInt(a[i], 10);
- break;
-
- case "%P":
- case "%p":
- if (/pm/i.test(a[i]) && hr < 12)
- hr += 12;
- break;
-
- case "%M":
- min = parseInt(a[i], 10);
- break;
- }
- }
- if (y != 0 && m != -1 && d != 0)
- {
- var date = new Date(y, m, d, hr, min, 0);
- return (isObject(date)
- && y == date.getFullYear()
- && m == date.getMonth()
- && d == date.getDate()) ? date.valueOf() : null;
- }
- return null;
-}
-
-/**
- * Trim the value, if the value is undefined, empty string is return.
- * @param {string} string to be trimmed.
- * @type {string} trimmed string.
- */
-Prado.Validation.trim = function(value)
-{
- if(isString(value)) return value.trim();
- return "";
-}
-
-/**
- * A delayed focus on a particular element
- * @param {element} element to apply focus()
- */
-Prado.Validation.Util.focus = function(element)
-{
- var obj = $(element);
- if(isObject(obj) && isdef(obj.focus))
- setTimeout(function(){ obj.focus(); }, 100);
- return false;
-}
-
-/**
- * List of validator instances.
- */
-Prado.Validation.validators = [];
-
-/**
- * List of forms.
- * @type {int}
- */
-Prado.Validation.forms = [];
-
-/**
- * List of summary controls.
- */
-Prado.Validation.summaries = [];
-
-/**
- * Validation groups.
- */
-Prado.Validation.groups = [];
-
-
-/**
- * Second type of grouping.
- */
-Prado.Validation.TargetGroups = {};
-
-
-/**
- * Current Target group.
- */
-Prado.Validation.CurrentTargetGroup = null;
-
-Prado.Validation.HasTargetGroup = false;
-
-/**
- * Targets that can cause validation.
- */
-Prado.Validation.ActiveTarget = null;
-
-
-/**
- * Determine if group validation is active.
- */
-Prado.Validation.IsGroupValidation = false;
-
-/**
- * Add a form for validation.
- * @param {string} form ID
- */
-Prado.Validation.AddForm = function(id)
-{
- Prado.Validation.forms.push($(id));
-}
-
-/**
- * Add a target that causes validation. Only elements that have been added
- * can cause validation.
- * @param {string} target id
- */
-Prado.Validation.AddTarget = function(id, group)
-{
- var target = $(id);
- Event.observe(target, "click", function()
- {
- Prado.Validation.ActiveTarget = target;
- Prado.Validation.CurrentTargetGroup = Prado.Validation.TargetGroups[id];
- });
- if(group)
- {
- Prado.Validation.TargetGroups[id] = group;
- Prado.Validation.HasTargetGroup = true;
- }
-}
-
-Prado.Validation.SetActiveGroup = function(target, group)
-{
- Prado.Validation.ActiveTarget = target;
- Prado.Validation.CurrentTargetGroup = group;
-}
-
-/**
- * Associate a list of validators to a particular control element.
- * This essentially allows a set of validators to be grouped to a particular button.
- * @param {list} group array show have, {group : "id", target : "target button"}
- * @param {array} validator ids
- */
-Prado.Validation.AddGroup = function(group, validators)
-{
- group.active = false; //default active status is false.
- group.target = $(group.target);
- group.validators = validators;
- Prado.Validation.groups.push(group);
-
- //update the active group when the button is clicked.
- Event.observe(group.target, "click", Prado.Validation.UpdateActiveGroup);
-}
-
-/**
- * Update the active group, if call manually it will deactivate all groups.
- * @param {string}
- * @type {int}
- */
-Prado.Validation.UpdateActiveGroup = function(ev)
-{
- var groups = Prado.Validation.groups;
- for (var i = 0; i < groups.length; i++)
- {
- groups[i].active = (isdef(ev) && groups[i].target == Event.element(ev));
- }
- Prado.Validation.IsGroupValidation = isdef(ev);
-}
-
-/**
- * Determine if validation is sucessful. Iterate through the list
- * of validator instances and call validate(). Only validators that
- * for a particular form are evaluated. Other validators will be disabled.
- * If performing group validation, only active validators are visible.
- * @param {element} the form for the controls to validate.
- * @type {boolean} true is all validators are valid, false otherwise.
- */
-Prado.Validation.IsValid = function(form)
-{
- var valid = true;
- var validators = Prado.Validation.validators;
-
- for(var i = 0; i < validators.length; i++)
- {
- //prevent validating multiple forms
- validators[i].enabled = !validators[i].control || undef(validators[i].control.form) || validators[i].control.form == form;
- //when group validation, only validators in the active group are visible.
- validators[i].visible = Prado.Validation.IsGroupValidation ? validators[i].inActiveGroup() : true;
-
- if(Prado.Validation.HasTargetGroup)
- validators[i].enabled = Prado.Validation.CurrentTargetGroup == validators[i].group
-
- valid &= validators[i].validate();
- }
-
- //show the summary including the alert box
- Prado.Validation.ShowSummary(form);
- //reset all the group active status to false
- Prado.Validation.UpdateActiveGroup();
-
- return valid;
-}
-
-/**
- * Base validator class. Supply a different validation function
- * to obtain a different validator. E.g. to use the RequiredFieldValidator
- * <code>new Prado.Validation(Prado.Validation.RequiredFieldValidator, options);</code>
- * or to use the CustomValidator,
- * <code>new Prado.Validation(Prado.Validation.CustomValidator, options);</code>
- */
-Prado.Validation.prototype =
-{
- /**
- * Initialize the validator.
- * @param {function} the function to call to evaluate if
- * the validator is valid
- * @param {string|element} the control ID or element
- * @param {array} the list of attributes for the validator
- */
- initialize : function(validator, attr)
- {
- this.evaluateIsValid = validator;
- this.attr = undef(attr) ? [] : attr;
- this.message = $(attr.id);
- this.control = $(attr.controltovalidate);
- this.enabled = isdef(attr.enabled) ? attr.enabled : true;
- this.visible = isdef(attr.visible) ? attr.visible : true;
- this.group = isdef(attr.validationgroup) ? attr.validationgroup : null;
- this.isValid = true;
- Prado.Validation.validators.push(this);
- if(this.evaluateIsValid)
- this.evaluateIsValid.bind(this);
- },
-
- /**
- * Evaluate the validator only when visible and enabled.
- * @type {boolean} true if valid, false otherwise.
- */
- validate : function()
- {
- if(this.visible && this.enabled && this.evaluateIsValid)
- this.isValid = this.evaluateIsValid();
- else
- this.isValid = true;
-
- this.observe(); //watch for changes to the control values
- this.update(); //update the validation messages
- return this.isValid;
- },
-
- /**
- * Hide or show the error messages for "Dynamic" displays.
- */
- update : function()
- {
- if(this.attr.display == "Dynamic")
- this.isValid ? Element.hide(this.message) : Element.show(this.message);
-
- if(this.message)
- this.message.style.visibility = this.isValid ? "hidden" : "visible";
-
- //update the control css class name
- var className = this.attr.controlcssclass;
- if(this.control && isString(className) && className.length>0)
- Element.condClassName(this.control, className, !this.isValid);
- Prado.Validation.ShowSummary();
-
- var focus = this.attr.focusonerror;
- var hasGroup = Prado.Validation.HasTargetGroup;
- var inGroup = this.group == Prado.Validation.CurrentTargetGroup;
-
- if(focus && (!hasGroup || (hasGroup && inGroup)))
- Prado.Element.focus(this.attr.focuselementid);
- },
-
- /**
- * Change the validity of the validator, calls update().
- * @param {boolean} change the isValid state of the validator.
- */
- setValid : function(valid)
- {
- this.isValid = valid;
- this.update();
- },
-
- /**
- * Observe changes to the control values, add "onchange" event to the control once.
- */
- observe : function()
- {
- if(undef(this.observing))
- {
- if(this.control && this.control.form)
- Event.observe(this.control, "change", this.validate.bind(this));
- this.observing = true;
- }
- },
-
- /**
- * Convert the value of the control to a specific data type.
- * @param {string} the data type, "Integer", "Double", "Currency" or "Date".
- * @param {string} the value to convert, null to get the value from the control.
- * @type {mixed|null} the converted data value.
- */
- convert : function(dataType, value)
- {
- if(undef(value))
- value = Form.Element.getValue(this.control);
- switch(dataType)
- {
- case "Integer":
- return Prado.Validation.Util.toInteger(value);
- case "Double" :
- case "Float" :
- return Prado.Validation.Util.toDouble(value, this.attr.decimalchar);
- case "Currency" :
- return Prado.Validation.Util.toCurrency(
- value, this.attr.groupchar, this.attr.digits, this.attr.decimalchar);
- case "Date":
- return Prado.Validation.Util.toDate(value, this.attr.dateformat);
- }
- return value.toString();
- },
-
- /**
- * Determine if the current validator is part of a active validation group.
- * @type {boolean} true if part of active validation group, false otherwise.
- */
- inActiveGroup : function()
- {
- var groups = Prado.Validation.groups;
- for (var i = 0; i < groups.length; i++)
- {
- if(groups[i].active && groups[i].validators.contains(this.attr.id))
- return true;
- }
- return false;
- }
-}
-
-/**
- * Validation summary class.
- */
-Prado.Validation.Summary = Class.create();
-Prado.Validation.Summary.prototype =
-{
- /**
- * Initialize a validation summary.
- * @param {array} summary options.
- */
- initialize : function(attr)
- {
- this.attr = attr;
- this.div = $(attr.id);
- this.visible = false;
- this.enabled = false;
- this.group = isdef(attr.validationgroup) ? attr.validationgroup : null;
- Prado.Validation.summaries.push(this);
- },
-
- /**
- * Show the validation summary.
- * @param {boolean} true to allow alert message
- */
- show : function(warn)
- {
- var refresh = warn || this.attr.refresh == "1";
- var messages = this.getMessages();
- if(messages.length <= 0 || !this.visible || !this.enabled)
- {
- if(refresh)
- {
- if(this.attr.display == "None" || this.attr.display == "Dynamic")
- Element.hide(this.div);
- else
- this.div.style.visibility="hidden";
- }
- return;
- }
-
- if(Prado.Validation.HasTargetGroup)
- {
- if(Prado.Validation.CurrentTargetGroup != this.group)
- {
- if(refresh)
- {
- if(this.attr.display == "None" || this.attr.display == "Dynamic")
- Element.hide(this.div);
- else
- this.div.style.visibility="hidden";
- }
- return;
- }
- }
-
- if(this.attr.showsummary != "False" && refresh)
- {
- //Element.show(this.div);
- this.div.style.display = "block";
- this.div.style.visibility = "visible";
- while(this.div.childNodes.length > 0)
- this.div.removeChild(this.div.lastChild);
- new Insertion.Bottom(this.div, this.formatSummary(messages));
- }
-
- if(warn)
- window.scrollTo(this.div.offsetLeft-20, this.div.offsetTop-20);
-
- var summary = this;
- if(warn && this.attr.showmessagebox == "True" && refresh)
- setTimeout(function(){alert(summary.formatMessageBox(messages));},20);
- },
-
- /**
- * Get a list of error messages from the validators.
- * @type {array} list of messages
- */
- getMessages : function()
- {
- var validators = Prado.Validation.validators;
- var messages = [];
- for(var i = 0; i < validators.length; i++)
- {
- if(validators[i].isValid == false
- && isString(validators[i].attr.errormessage)
- && validators[i].attr.errormessage.length > 0)
- {
-
- messages.push(validators[i].attr.errormessage);
- }
- }
- return messages;
- },
-
- /**
- * Return the format parameters for the summary.
- * @param {string} format type, "List", "SingleParagraph" or "BulletList"
- * @type {array} formatting parameters
- */
- formats : function(type)
- {
- switch(type)
- {
- case "List":
- return { header : "<br />", first : "", pre : "", post : "<br />", last : ""};
- case "SingleParagraph":
- return { header : " ", first : "", pre : "", post : " ", last : "<br />"};
- case "BulletList":
- default:
- return { header : "", first : "<ul>", pre : "<li>", post : "</li>", last : "</ul>"};
- }
- },
-
- /**
- * Format the message summary.
- * @param {array} list of error messages.
- * @type {string} formatted message
- */
- formatSummary : function(messages)
- {
- var format = this.formats(this.attr.displaymode);
- var output = isdef(this.attr.headertext) ? this.attr.headertext + format.header : "";
- output += format.first;
- for(var i = 0; i < messages.length; i++)
- output += (messages[i].length>0) ? format.pre + messages[i] + format.post : "";
- output += format.last;
- return output;
- },
- /**
- * Format the message alert box.
- * @param {array} a list of error messages.
- * @type {string} format message for alert.
- */
- formatMessageBox : function(messages)
- {
- var output = isdef(this.attr.headertext) ? this.attr.headertext + "\n" : "";
- for(var i = 0; i < messages.length; i++)
- {
- switch(this.attr.displaymode)
- {
- case "List":
- output += messages[i] + "\n";
- break;
- case "BulletList":
- default:
- output += " - " + messages[i] + "\n";
- break;
- case "SingleParagraph":
- output += messages[i] + " ";
- break;
- }
- }
- return output;
- },
-
- /**
- * Determine if this summary belongs to an active group.
- * @type {boolean} true if belongs to an active group.
- */
- inActiveGroup : function()
- {
- var groups = Prado.Validation.groups;
- for (var i = 0; i < groups.length; i++)
- {
- if(groups[i].active && groups[i].id == this.attr.group)
- return true;
- }
- return false;
- }
-}
-
-/**
- * Show the validation error message summary.
- * @param {element} the form that activated the summary call.
- */
-Prado.Validation.ShowSummary = function(form)
-{
- var summary = Prado.Validation.summaries;
- for(var i = 0; i < summary.length; i++)
- {
- if(isdef(form))
- {
- if(Prado.Validation.IsGroupValidation)
- {
- summary[i].visible = summary[i].inActiveGroup();
- }
- else
- {
- summary[i].visible = undef(summary[i].attr.group);
- }
-
- summary[i].enabled = $(summary[i].attr.form) == form;
- }
- summary[i].show(form);
- }
-}
-
-
-
-/**
- * When a form is try to submit, check the validators, submit
- * the form only when all validators are valid.
- * @param {event} form submit event.
- */
-Prado.Validation.OnSubmit = function(ev)
-{
- //HTML text editor, tigger save first.
- //alert(tinyMCE);
- if(typeof tinyMCE != "undefined")
- tinyMCE.triggerSave();
-
- //no active target?
- if(!Prado.Validation.ActiveTarget) return true;
- var valid = Prado.Validation.IsValid(Event.element(ev) || ev);
-
- //not valid? do not submit the form
- if(Event.element(ev) && !valid)
- Event.stop(ev);
-
- //reset the target
- Prado.Validation.ActiveTarget = null;
- //Prado.Validation.CurrentTargetGroup = null;
-
- return valid;
-}
-
-/**
- * During window onload event, attach onsubmit event for each of the
- * forms in Prado.Validation.forms.
- */
-Prado.Validation.OnLoad = function()
-{
- Event.observe(Prado.Validation.forms,"submit", Prado.Validation.OnSubmit);
-}
-
-
-/**
- * Validate Validator Groups.
- * @param string ValidatorGroup
- * @return boolean true if valid, false otherwise
- */
-Prado.Validation.ValidateValidatorGroup = function(groupId)
-{
- var groups = Prado.Validation.groups;
- var group = null;
- for(var i = 0; i < groups.length; i++)
- {
- if(groups[i].id == groupId)
- {
- group = groups[i];
- Prado.Validation.groups[i].active = true;
- Prado.Validation.CurrentTargetGroup = null;
- Prado.Validation.IsGroupValidation = true;
- }
- else
- {
- Prado.Validation.groups[i].active = false;
- }
- }
- if(group)
- {
- return Prado.Validation.IsValid(group.target.form);
- }
- return true;
-};
-
-/**
- * Validate ValidationGroup
- * @param string ValidationGroup
- * @return boolean true if valid, false otherwise.
- */
-Prado.Validation.ValidateValidationGroup= function(groupId)
-{
- var groups = Prado.Validation.TargetGroups;
- for(var id in groups)
- {
- if(groups[id] == groupId)
- {
- var target = $(id);
- Prado.Validation.ActiveTarget = target;
- Prado.Validation.CurrentTargetGroup = groupId;
- Prado.Validation.IsGroupValidation = false;
- return Prado.Validation.IsValid(target.form);
- }
- }
-
- return true;
-};
-
-/**
- * Validate the page
- * @return boolean true if valid, false otherwise.
- */
-Prado.Validation.ValidateNonGroup= function(formId)
-{
- if(Prado.Validation)
- {
- var form = $(formId);
- form = form || document.forms[0];
- Prado.Validation.ActiveTarget = form;
- Prado.Validation.CurrentTargetGroup = null;
- Prado.Validation.IsGroupValidation = false;
- return Prado.Validation.IsValid(form);
- }
- return true;
-};
-
-
-
-/**
- * Register Prado.Validation.Onload() for window.onload event.
- */
-Event.OnLoad(Prado.Validation.OnLoad);
\ No newline at end of file diff --git a/framework/Web/Javascripts/prado/validation3.js b/framework/Web/Javascripts/prado/validation3.js index 40472e7e..3ed31744 100644 --- a/framework/Web/Javascripts/prado/validation3.js +++ b/framework/Web/Javascripts/prado/validation3.js @@ -75,12 +75,13 @@ Object.extend(Prado.Validation, * then only validators belonging to that group will be validated.
* @param string ID of the form to validate
* @param string ID of the group to validate.
+ * @param HTMLElement element that calls for validation
*/
- validate : function(formID, groupID)
+ validate : function(formID, groupID, invoker)
{
if(this.managers[formID])
{
- return this.managers[formID].validate(groupID);
+ return this.managers[formID].validate(groupID, invoker);
}
else
{
@@ -162,22 +163,24 @@ Prado.ValidationManager.prototype = /**
* Validate the validators managed by this validation manager.
* @param string only validate validators belonging to a group (optional)
+ * @param HTMLElement element that calls for validation
* @return boolean true if all validators are valid, false otherwise.
*/
- validate : function(group)
+ validate : function(group, invoker)
{
if(group)
- return this._validateGroup(group);
+ return this._validateGroup(group, invoker);
else
- return this._validateNonGroup();
+ return this._validateNonGroup(invoker);
},
/**
* Validate a particular group of validators.
* @param string ID of the form
+ * @param HTMLElement element that calls for validation
* @return boolean false if group is not valid, true otherwise.
*/
- _validateGroup: function(groupID)
+ _validateGroup: function(groupID, invoker)
{
var valid = true;
if(this.groups.include(groupID))
@@ -185,7 +188,7 @@ Prado.ValidationManager.prototype = this.validators.each(function(validator)
{
if(validator.group == groupID)
- valid = valid & validator.validate();
+ valid = valid & validator.validate(invoker);
else
validator.hide();
});
@@ -197,14 +200,15 @@ Prado.ValidationManager.prototype = /**
* Validate validators that doesn't belong to any group.
* @return boolean false if not valid, true otherwise.
+ * @param HTMLElement element that calls for validation
*/
- _validateNonGroup : function()
+ _validateNonGroup : function(invoker)
{
var valid = true;
this.validators.each(function(validator)
{
if(!validator.group)
- valid = valid & validator.validate();
+ valid = valid & validator.validate(invoker);
else
validator.hide();
});
@@ -523,6 +527,7 @@ Prado.WebUI.TBaseValidator.prototype = _isObserving : {},
group : null,
manager : null,
+ message : null,
/**
* <code>
@@ -543,10 +548,10 @@ Prado.WebUI.TBaseValidator.prototype = */
initialize : function(options)
{
- options.OnValidate = options.OnValidate || Prototype.emptyFunction;
+ /* options.OnValidate = options.OnValidate || Prototype.emptyFunction;
options.OnSuccess = options.OnSuccess || Prototype.emptyFunction;
options.OnError = options.OnError || Prototype.emptyFunction;
-
+ */
this.options = options;
this.control = $(options.ControlToValidate);
this.message = $(options.ID);
@@ -617,21 +622,39 @@ Prado.WebUI.TBaseValidator.prototype = /**
* Calls evaluateIsValid() function to set the value of isValid property.
* Triggers onValidate event and onSuccess or onError event.
+ * @param HTMLElement element that calls for validation
* @return boolean true if valid.
*/
- validate : function()
+ validate : function(invoker)
{
+ if(typeof(this.options.OnValidate) == "function")
+ this.options.OnValidate(this, invoker);
+
if(this.enabled)
this.isValid = this.evaluateIsValid();
-
- this.options.OnValidate(this);
-
- this.updateControl();
-
+
if(this.isValid)
- this.options.OnSuccess(this);
+ {
+ if(typeof(this.options.OnSuccess) == "function")
+ {
+ this.visible = true;
+ this.updateControlCssClass(this.control, this.isValid);
+ this.options.OnSuccess(this, invoker);
+ }
+ else
+ this.updateControl();
+ }
else
- this.options.OnError(this);
+ {
+ if(typeof(this.options.OnError) == "function")
+ {
+ this.visible = true;
+ this.updateControlCssClass(this.control, this.isValid);
+ this.options.OnError(this, invoker);
+ }
+ else
+ this.updateControl();
+ }
this.observeChanges(this.control);
@@ -641,7 +664,7 @@ Prado.WebUI.TBaseValidator.prototype = /**
* Observe changes to the control input, re-validate upon change. If
* the validator is not visible, no updates are propagated.
- * @param HTMLElement control to observe changes
+ * @param HTMLElement element that calls for validation
*/
observeChanges : function(control)
{
@@ -667,9 +690,9 @@ Prado.WebUI.TBaseValidator.prototype = },
/**
- * @return string _trims the string value, empty string if value is not string.
+ * @return string trims the string value, empty string if value is not string.
*/
- _trim : function(value)
+ trim : function(value)
{
return typeof(value) == "string" ? value.trim() : "";
},
@@ -720,26 +743,25 @@ Prado.WebUI.TBaseValidator.prototype = {
case 'TDatePicker':
if(control.type == "text")
- return this._trim($F(control));
+ return this.trim($F(control));
else
{
- this._observeDatePickerChanges();
+ this.observeDatePickerChanges();
return Prado.WebUI.TDatePicker.getDropDownDate(control).getTime();
}
default:
- if(this._isListControlType())
- return this._getFirstSelectedListValue();
+ if(this.isListControlType())
+ return this.getFirstSelectedListValue();
else
- return this._trim($F(control));
+ return this.trim($F(control));
}
},
/**
* Observe changes in the drop down list date picker, IE only.
- * @private
*/
- _observeDatePickerChanges : function()
+ observeDatePickerChanges : function()
{
if(Prado.Browser().ie)
{
@@ -754,13 +776,12 @@ Prado.WebUI.TBaseValidator.prototype = * Gets numeber selections and their values.
* @return object returns selected values in <tt>values</tt> property
* and number of selections in <tt>checks</tt> property.
- * @private
*/
- _getSelectedValuesAndChecks : function(elements, initialValue)
+ getSelectedValuesAndChecks : function(elements, initialValue)
{
var checked = 0;
var values = [];
- var isSelected = this._isCheckBoxType(elements[0]) ? 'checked' : 'selected';
+ var isSelected = this.isCheckBoxType(elements[0]) ? 'checked' : 'selected';
elements.each(function(element)
{
if(element[isSelected] && element.value != initialValue)
@@ -776,9 +797,8 @@ Prado.WebUI.TBaseValidator.prototype = * Gets an array of the list control item input elements, for TCheckBoxList
* checkbox inputs are returned, for TListBox HTML option elements are returned.
* @return array list control option elements.
- * @private
*/
- _getListElements : function()
+ getListElements : function()
{
switch(this.options.ControlType)
{
@@ -787,7 +807,7 @@ Prado.WebUI.TBaseValidator.prototype = for(var i = 0; i < this.options.TotalItems; i++)
{
var element = $(this.options.ControlToValidate+"_"+i);
- if(this._isCheckBoxType(element))
+ if(this.isCheckBoxType(element))
elements.push(element);
}
return elements;
@@ -807,9 +827,8 @@ Prado.WebUI.TBaseValidator.prototype = /**
* @return boolean true if element is of checkbox or radio type.
- * @private
*/
- _isCheckBoxType : function(element)
+ isCheckBoxType : function(element)
{
if(element && element.type)
{
@@ -821,9 +840,8 @@ Prado.WebUI.TBaseValidator.prototype = /**
* @return boolean true if control to validate is of some of the TListControl type.
- * @private
*/
- _isListControlType : function()
+ isListControlType : function()
{
var list = ['TCheckBoxList', 'TRadioButtonList', 'TListBox'];
return list.include(this.options.ControlType);
@@ -831,15 +849,14 @@ Prado.WebUI.TBaseValidator.prototype = /**
* @return string gets the first selected list value, initial value if none found.
- * @private
*/
- _getFirstSelectedListValue : function()
+ getFirstSelectedListValue : function()
{
var initial = "";
if(typeof(this.options.InitialValue) != "undefined")
initial = this.options.InitialValue;
- var elements = this._getListElements();
- var selection = this._getSelectedValuesAndChecks(elements, initial);
+ var elements = this.getListElements();
+ var selection = this.getSelectedValuesAndChecks(elements, initial);
return selection.values.length > 0 ? selection.values[0] : initial;
}
}
@@ -868,7 +885,7 @@ Prado.WebUI.TRequiredFieldValidator = Class.extend(Prado.WebUI.TBaseValidator, else
{
var a = this.getValidationValue();
- var b = this._trim(this.options.InitialValue);
+ var b = this.trim(this.options.InitialValue);
return(a != b);
}
}
@@ -1105,13 +1122,13 @@ Prado.WebUI.TListControlValidator = Class.extend(Prado.WebUI.TBaseValidator, */
evaluateIsValid : function()
{
- var elements = this._getListElements();
+ var elements = this.getListElements();
if(elements && elements.length <= 0)
return true;
this.observeListElements(elements);
- var selection = this._getSelectedValuesAndChecks(elements);
+ var selection = this.getSelectedValuesAndChecks(elements);
return this.isValidList(selection.checks, selection.values);
},
@@ -1120,7 +1137,7 @@ Prado.WebUI.TListControlValidator = Class.extend(Prado.WebUI.TBaseValidator, */
observeListElements : function(elements)
{
- if(Prado.Browser().ie && this._isCheckBoxType(elements[0]))
+ if(Prado.Browser().ie && this.isCheckBoxType(elements[0]))
{
var validator = this;
elements.each(function(element)
@@ -1171,25 +1188,26 @@ Prado.WebUI.TListControlValidator = Class.extend(Prado.WebUI.TBaseValidator, }
});
-/**
- * TDataTypeValidator verifies if the input data is of the type specified
- * by <tt>DataType</tt> option.
- * The following data types are supported:
- * - <b>Integer</b> A 32-bit signed integer data type.
- * - <b>Float</b> A double-precision floating point number data type.
- * - <b>Date</b> A date data type.
- * - <b>String</b> A string data type.
- * For <b>Date</b> type, the option <tt>DateFormat</tt>
- * will be used to determine how to parse the date string.
- */
-Prado.WebUI.TDataTypeValidator = Class.extend(Prado.WebUI.TBaseValidator,
-{
- evaluateIsValid : function()
- {
- var value = this.getValidationValue();
- if(value.length <= 0)
- return true;
- return this.convert(this.options.DataType, value) != null;
- }
-});
+
+/**
+ * TDataTypeValidator verifies if the input data is of the type specified
+ * by <tt>DataType</tt> option.
+ * The following data types are supported:
+ * - <b>Integer</b> A 32-bit signed integer data type.
+ * - <b>Float</b> A double-precision floating point number data type.
+ * - <b>Date</b> A date data type.
+ * - <b>String</b> A string data type.
+ * For <b>Date</b> type, the option <tt>DateFormat</tt>
+ * will be used to determine how to parse the date string.
+ */
+Prado.WebUI.TDataTypeValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+ evaluateIsValid : function()
+ {
+ var value = this.getValidationValue();
+ if(value.length <= 0)
+ return true;
+ return this.convert(this.options.DataType, value) != null;
+ }
+});
diff --git a/framework/Web/Javascripts/prado/validators.js b/framework/Web/Javascripts/prado/validators.js deleted file mode 100644 index 5aa732b4..00000000 --- a/framework/Web/Javascripts/prado/validators.js +++ /dev/null @@ -1,222 +0,0 @@ -/**
- * Validates that a given field has some input,
- * @param ${parameter}
- * @return ${return}
- */
-Prado.Validation.TRequiredFieldValidator=function(){
- var inputType = this.control.getAttribute("type");
- if(inputType == 'file'){
- return true;
- }
- else{
- var a= Prado.Validation.trim($F(this.control));
- var b= Prado.Validation.trim(this.attr.initialvalue);
- return(a != b);
- }
-}
-
-
-Prado.Validation.TRegularExpressionValidator = function()
-{
- var value = Prado.Validation.trim($F(this.control));
- if (value == "") return true;
- var rx = new RegExp(this.attr.validationexpression);
- var matches = rx.exec(value);
- return (matches != null && value == matches[0]);
-}
-
-Prado.Validation.TEmailAddressValidator = Prado.Validation.TRegularExpressionValidator;
-
-Prado.Validation.TCustomValidator = function()
-{
- var value = isNull(this.control) ? null : $F(this.control);
- var func = this.attr.clientvalidationfunction;
- eval("var validate = "+func);
- return validate && isFunction(validate) ? validate(this, value) : true;
-}
-
-Prado.Validation.TRangeValidator = function()
-{
- var value = Prado.Validation.trim($F(this.control));
- if (value == "") return true;
-
- var minval = this.attr.minimumvalue;
- var maxval = this.attr.maximumvalue;
-
- if (undef(minval) && undef(maxval))
- return true;
-
- if (minval == "") minval = 0;
- if (maxval == "") maxval = 0;
-
- var dataType = this.attr.type;
-
- if(undef(dataType))
- return (parseFloat(value) >= parseFloat(minval)) && (parseFloat(value) <= parseFloat(maxval));
-
- //now do datatype range check.
- var min = this.convert(dataType, minval);
- var max = this.convert(dataType, maxval);
- value = this.convert(dataType, value);
- return value >= min && value <= max;
-}
-
-Prado.Validation.TCompareValidator = function()
-{
- var value = Prado.Validation.trim($F(this.control));
- if (value.length == 0) return true;
-
- var compareTo;
-
- var comparee = $(this.attr.controlhookup);;
-
- if(comparee)
- compareTo = Prado.Validation.trim($F(comparee));
- else
- {
- compareTo = isString(this.attr.valuetocompare) ? this.attr.valuetocompare : "";
- }
-
- var compare = Prado.Validation.TCompareValidator.compare;
-
- var isValid = compare.bind(this)(value, compareTo);
-
- //update the comparee control css class name and add onchange event once.
- if(comparee)
- {
- var className = this.attr.controlcssclass;
- if(isString(className) && className.length>0)
- Element.condClassName(comparee, className, !isValid);
- if(undef(this.observingComparee))
- {
- Event.observe(comparee, "change", this.validate.bind(this));
- this.observingComparee = true;
- }
- }
- return isValid;
-}
-
-/**
- * Compare the two values, also performs data type check.
- * @param {string} value to compare with
- * @param {string} value to compare
- * @type {boolean} true if comparison or type check is valid, false otherwise.
- */
-Prado.Validation.TCompareValidator.compare = function(operand1, operand2)
-{
- var op1, op2;
- if ((op1 = this.convert(this.attr.type, operand1)) == null)
- return false;
- if (this.attr.operator == "DataTypeCheck")
- return true;
- if ((op2 = this.convert(this.attr.type, operand2)) == null)
- return true;
- switch (this.attr.operator)
- {
- case "NotEqual":
- return (op1 != op2);
- case "GreaterThan":
- return (op1 > op2);
- case "GreaterThanEqual":
- return (op1 >= op2);
- case "LessThan":
- return (op1 < op2);
- case "LessThanEqual":
- return (op1 <= op2);
- default:
- return (op1 == op2);
- }
-}
-
-Prado.Validation.TRequiredListValidator = function()
-{
- var min = undef(this.attr.min) ? Number.NEGATIVE_INFINITY : parseInt(this.attr.min);
- var max = undef(this.attr.max) ? Number.POSITIVE_INFINITY : parseInt(this.attr.max);
-
- var elements = document.getElementsByName(this.attr.selector);
-
- if(elements.length <= 0)
- return true;
-
- var required = new Array();
- if(isString(this.attr.required) && this.attr.required.length > 0)
- required = this.attr.required.split(/,\s* /);
-
- var isValid = true;
-
- var validator = Prado.Validation.TRequiredListValidator;
-
- switch(elements[0].type)
- {
- case 'radio':
- case 'checkbox':
- isValid = validator.IsValidRadioList(elements, min, max, required);
- break;
- case 'select-multiple':
- isValid = validator.IsValidSelectMultipleList(elements, min, max, required);
- break;
- }
-
- var className = this.attr.elementcssclass;
- if(isString(className) && className.length>0)
- map(elements, function(element){ condClass(element, className, !isValid); });
- if(undef(this.observingRequiredList))
- {
- Event.observe(elements, "change", this.validate.bind(this));
- this.observingRequiredList = true;
- }
- return isValid;
-}
-
-//radio group selection
-Prado.Validation.TRequiredListValidator.IsValidRadioList = function(elements, min, max, required)
-{
- var checked = 0;
- var values = new Array();
- for(var i = 0; i < elements.length; i++)
- {
- if(elements[i].checked)
- {
- checked++;
- values.push(elements[i].value);
- }
- }
- return Prado.Validation.TRequiredListValidator.IsValidList(checked, values, min, max, required);
-}
-
-//multiple selection check
-Prado.Validation.TRequiredListValidator.IsValidSelectMultipleList = function(elements, min, max, required)
-{
- var checked = 0;
- var values = new Array();
- for(var i = 0; i < elements.length; i++)
- {
- var selection = elements[i];
- for(var j = 0; j < selection.options.length; j++)
- {
- if(selection.options[j].selected)
- {
- checked++;
- values.push(selection.options[j].value);
- }
- }
- }
- return Prado.Validation.TRequiredListValidator.IsValidList(checked, values, min, max, required);
-}
-
-//check if the list was valid
-Prado.Validation.TRequiredListValidator.IsValidList = function(checkes, values, min, max, required)
-{
- var exists = true;
-
- if(required.length > 0)
- {
- //required and the values must at least be have same lengths
- if(values.length < required.length)
- return false;
- for(var k = 0; k < required.length; k++)
- exists = exists && values.contains(required[k]);
- }
-
- return exists && checkes >= min && checkes <= max;
-}
|