summaryrefslogtreecommitdiffstats
path: root/js/vendor/angular-ui/modules/directives/validate/validate.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/vendor/angular-ui/modules/directives/validate/validate.js')
-rw-r--r--js/vendor/angular-ui/modules/directives/validate/validate.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/js/vendor/angular-ui/modules/directives/validate/validate.js b/js/vendor/angular-ui/modules/directives/validate/validate.js
new file mode 100644
index 000000000..2d255a60e
--- /dev/null
+++ b/js/vendor/angular-ui/modules/directives/validate/validate.js
@@ -0,0 +1,66 @@
+/**
+ * General-purpose validator for ngModel.
+ * angular.js comes with several built-in validation mechanism for input fields (ngRequired, ngPattern etc.) but using
+ * an arbitrary validation function requires creation of a custom formatters and / or parsers.
+ * The ui-validate directive makes it easy to use any function(s) defined in scope as a validator function(s).
+ * A validator function will trigger validation on both model and input changes.
+ *
+ * @example <input ui-validate=" 'myValidatorFunction($value)' ">
+ * @example <input ui-validate="{ foo : '$value > anotherModel', bar : 'validateFoo($value)' }">
+ * @example <input ui-validate="{ foo : '$value > anotherModel' }" ui-validate-watch=" 'anotherModel' ">
+ * @example <input ui-validate="{ foo : '$value > anotherModel', bar : 'validateFoo($value)' }" ui-validate-watch=" { foo : 'anotherModel' } ">
+ *
+ * @param ui-validate {string|object literal} If strings is passed it should be a scope's function to be used as a validator.
+ * If an object literal is passed a key denotes a validation error key while a value should be a validator function.
+ * In both cases validator function should take a value to validate as its argument and should return true/false indicating a validation result.
+ */
+angular.module('ui.directives').directive('uiValidate', function () {
+
+ return {
+ restrict: 'A',
+ require: 'ngModel',
+ link: function (scope, elm, attrs, ctrl) {
+ var validateFn, watch, validators = {},
+ validateExpr = scope.$eval(attrs.uiValidate);
+
+ if (!validateExpr) return;
+
+ if (angular.isString(validateExpr)) {
+ validateExpr = { validator: validateExpr };
+ }
+
+ angular.forEach(validateExpr, function (expression, key) {
+ validateFn = function (valueToValidate) {
+ if (scope.$eval(expression, { '$value' : valueToValidate })) {
+ ctrl.$setValidity(key, true);
+ return valueToValidate;
+ } else {
+ ctrl.$setValidity(key, false);
+ return undefined;
+ }
+ };
+ validators[key] = validateFn;
+ ctrl.$formatters.push(validateFn);
+ ctrl.$parsers.push(validateFn);
+ });
+
+ // Support for ui-validate-watch
+ if (attrs.uiValidateWatch) {
+ watch = scope.$eval(attrs.uiValidateWatch);
+ if (angular.isString(watch)) {
+ scope.$watch(watch, function(){
+ angular.forEach(validators, function(validatorFn, key){
+ validatorFn(ctrl.$modelValue);
+ });
+ });
+ } else {
+ angular.forEach(watch, function(expression, key){
+ scope.$watch(expression, function(){
+ validators[key](ctrl.$modelValue);
+ });
+ });
+ }
+ }
+ }
+ };
+});