Sha256: 166c5998af9a0a0ed0d025646fc0a77ab1a38e9aec0501c2c46ce89fa6e5373c

Contents?: true

Size: 1.83 KB

Versions: 11

Compression:

Stored size: 1.83 KB

Contents

(function(ko, $) {
  "use strict";

  ko.extenders.externalValidator = function(target, options) {
      ko.utils.validatorBase(target);

      var defaults = {
        message: "",
        validator: function(v) {},
        dependencies: []
      };

      options = $.extend({}, defaults, options);
   
      target.validate = function validate(newValue) {
        var validatableValue  = typeof newValue === 'undefined' ? target() : newValue,
            validatorResponse = options.validator(validatableValue),
            validatorResponseHandler;

        validatorResponseHandler = function validatorResponseHandler(response) {
          var result, message;

          if (typeof response === 'boolean') {
            result  = response;
            message = options.message;

          } else {
            result  = response.result;
            message = response.message;
          }
          
          if (result) {
            target.markValid();
          } else {
            target.markInvalid(message);
          }
        };

        if (typeof validatorResponse === 'object' && typeof validatorResponse.done === 'function') {
          target.validationInProgress(true);
          validatorResponse.done(function(response) { validatorResponseHandler(response); target.validationInProgress(false); });
          return;

        } else {
          validatorResponseHandler(validatorResponse);
          return !target.hasError();
        }
      };
   
      //validate whenever the value changes
      target.subscribe(target.validate);
      
      ko.utils.arrayForEach(options.dependencies, function(dependency) {
        dependency.subscribe(function(newValue) {
          if (!target.isUnvalidated()) {
            target.validate();
          }
        });
      });
   
      //return the original observable
      return target;
  };

})(ko, $);

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
kea-rails-1.0.9 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.8 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha1 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.7 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.6 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.5 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.4 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.3 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.2 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.1 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-1.0.0 app/assets/javascripts/kea/extenders/external_validator.js