UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

323 lines (284 loc) 10.9 kB
/* ************************************************************************ qooxdoo - the new era of web development http://qooxdoo.org Copyright: 2004-2008 1&1 Internet AG, Germany, http://www.1und1.de License: MIT: https://opensource.org/licenses/MIT See the LICENSE file in the project's top-level directory for details. Authors: * Martin Wittemann (martinwittemann) * Adrian Olaru (adrianolaru) ************************************************************************ */ /** * This static class contains a set of default validators. * These validators are listed twice * <ul> * <li>number</li> * <li>email</li> * <li>string</li> * <li>url</li> * <li>color</li> * </ul> * All these validators don't need an input so the listed function just return a * method fitting for the use in the property system. * The methods with the check prefix are the returned methods and can be used in * other contexts without the property system. * * There are three more validators * <ul> * <li>range</li> * <li>inArray</li> * <li>regExp</li> * </ul> * These methods do need some addition parameters to specify the validator. So * there is no check function which you can use in other contexts because the * check function for the validation is created based on the given parameter. * * *Example usage for a property* * * <code>validate: qx.util.Validate.number()</code> * <br> * <code>validate: qx.util.Validate.range(0, 100)</code> * * Because the methods without the check prefix return a validation method, * the function must be called at the property definition. So don't forget the * ending brackets for those methods without parameters! * For the correct usage, take an additional look at the documentation of the * {@link qx.core.Property} class. */ qx.Class.define("qx.util.Validate", { statics : { /** * Returns the function that checks for a number. * * @param errorMessage {String?null} Custom error message. * @return {Function} The {@link #checkNumber} Function. */ number : function(errorMessage) { return function(value) { qx.util.Validate.checkNumber(value, null, errorMessage); }; }, /** * The function checks the incoming value to see if it is a number. * If not, an ValidationError will be thrown. * If you want to use the number check in a property definition, * use the {@link #number} method. * * @param value {var} The value to check. * @param formItem {qx.ui.form.IForm} The form item to check if used in a * {@link qx.ui.form.Form}. * @param errorMessage {String?undefined} Custom error message. * @throws {qx.core.ValidationError} If the value parameter is not a * finite number */ checkNumber : function(value, formItem, errorMessage) { errorMessage = errorMessage || qx.locale.Manager.tr("%1 is not a number.", value); if ((typeof value !== "number" && (!(value instanceof Number))) || (!(isFinite(value)))) { throw new qx.core.ValidationError("Validation Error", errorMessage); } }, /** * Returns the function that checks for an email address. * * @param errorMessage {String?null} Custom error message. * @return {Function} The {@link #checkEmail} Function. */ email : function(errorMessage) { return function(value) { qx.util.Validate.checkEmail(value, null, errorMessage); }; }, /** * The function checks the incoming value to see if it is an email address. * If not, an ValidationError will be thrown. * If you want to use the email check in a property definition, * use the {@link #email} method. * * @param value {var} The value to check. * @param formItem {qx.ui.form.IForm} The form item to check if used in a * {@link qx.ui.form.Form}. * @param errorMessage {String?null} Custom error message. * @throws {qx.core.ValidationError} If the value parameter is not * a valid email address. */ checkEmail : function(value, formItem, errorMessage) { errorMessage = errorMessage || qx.locale.Manager.tr("'%1' is not an email address.", (value || "")); var reg = /^([A-Za-z0-9_\-.+])+@([A-Za-z0-9_\-.])+\.([A-Za-z]{2,})$/; if (reg.test(value) === false) { throw new qx.core.ValidationError("Validation Error",errorMessage); } }, /** * Returns the function that checks for a string. * * @param errorMessage {String?null} Custom error message. * @return {Function} The {@link #checkString} Function. */ string : function(errorMessage) { return function(value) { qx.util.Validate.checkString(value, null, errorMessage); }; }, /** * The function checks the incoming value to see if it is a string. * If not, an ValidationError will be thrown. * If you want to use the string check in a property definition, * use the {@link #string} method. * * @param value {var} The value to check. * @param formItem {qx.ui.form.IForm} The form item to check if used in a * {@link qx.ui.form.Form}. * @param errorMessage {String?null} Custom error message. * @throws {qx.core.ValidationError} If the value parameter is not a string. */ checkString : function(value, formItem, errorMessage) { errorMessage = errorMessage || qx.locale.Manager.tr("%1 is not a string.", value); if (typeof value !== "string" && (!(value instanceof String))) { throw new qx.core.ValidationError("Validation Error", errorMessage); } }, /** * Returns the function that checks for an url. * * @param errorMessage {String?null} Custom error message. * @return {Function} The {@link #checkUrl} Function. */ url : function(errorMessage) { return function(value) { qx.util.Validate.checkUrl(value, null, errorMessage); }; }, /** * The function checks the incoming value to see if it is an url. * If not, an ValidationError will be thrown. * If you want to use the url check in a property definition, * use the {@link #url} method. * * @param value {var} The value to check. * @param formItem {qx.ui.form.IForm} The form item to check if used in a * {@link qx.ui.form.Form}. * @param errorMessage {String?null} Custom error message. * @throws {qx.core.ValidationError} If the value parameter is not an url. */ checkUrl : function(value, formItem, errorMessage) { errorMessage = errorMessage || qx.locale.Manager.tr("%1 is not an url.", value); var reg = /([A-Za-z0-9])+:\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; if (!reg.test(value)) { throw new qx.core.ValidationError("Validation Error", errorMessage); } }, /** * Returns the function that checks for a color. * * @param errorMessage {String?null} Custom error message. * @return {Function} The {@link #checkColor} Function. */ color : function(errorMessage) { return function(value) { qx.util.Validate.checkColor(value, null, errorMessage); }; }, /** * The function checks the incoming value to see if it is a color. * If not, an ValidationError will be thrown. The check itself will be * delegated to the {@link qx.util.ColorUtil#stringToRgb} method. * If you want to use the color check in a property definition, * use the {@link #color} method. * * @param value {var} The value to check. * @param formItem {qx.ui.form.IForm} The form item to check if used in a * {@link qx.ui.form.Form}. * @param errorMessage {String?null} Custom error message. * @throws {qx.core.ValidationError} If the value parameter is not a color. */ checkColor : function(value, formItem, errorMessage) { try { qx.util.ColorUtil.stringToRgb(value); } catch (e) { var message = errorMessage || qx.locale.Manager.tr("%1 is not a color! %2", value, e); throw new qx.core.ValidationError("Validation Error", message); } }, /** * Returns a function that checks if the number is in the given range. * The range includes the border values. * A range from 1 to 2 accepts the values 1 equally as everything up to 2 * including the 2. * If the value given to the returned function is out of the range, a * ValidationError will be thrown. * * @param from {Number} The lower border of the range. * @param to {Number} The upper border of the range. * @param errorMessage {String?null} Custom error message. * @return {Function} A function taking one parameter (value). */ range : function(from, to, errorMessage) { return function(value) { var message = errorMessage || qx.locale.Manager.tr("%1 is not in the range from [%2, %3].", value, from, to); if (value < from || value > to) { throw new qx.core.ValidationError("Validation Error", message); } }; }, /** * Returns a function that checks if the given value is in the array. * If the value given to the returned function is not in the array, a * ValidationError will be thrown. * * @param array {Array} The array holding the possibilities. * @param errorMessage {String?null} Custom error message. * @return {Function} A function taking one parameter (value). */ inArray : function(array, errorMessage) { return function(value) { var message = errorMessage || qx.locale.Manager.tr("%1 is not in %2", value, array); if (array.indexOf(value) === -1) { throw new qx.core.ValidationError("Validation Error", message); } }; }, /** * Returns a function that checks if the given value fits the RegExp. * For testing, the function uses the RegExp.test function. * If the value given to the returned function does not fit the RegExp, a * ValidationError will be thrown. * incoming * @param reg {RegExp} The RegExp for the check. * @param errorMessage {String?null} Custom error message. * @return {Function} A function taking one parameter (value). */ regExp : function(reg, errorMessage) { return function(value) { var message = errorMessage || qx.locale.Manager.tr("%1 does not fit %2.", value, reg); if (!reg.test(value)) { throw new qx.core.ValidationError("Validation Error", message); } }; } } });