Sha256: 443662e013e994159017277a5d122986f8596e73e5616cb21ffed85a7244f7e6

Contents?: true

Size: 1.98 KB

Versions: 13

Compression:

Stored size: 1.98 KB

Contents

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

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

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

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

        if (options.skipBlank && target.isBlank(validatableValue)) {
          return;
        }

        validatorResponse = options.validator(validatableValue);

        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

13 entries across 13 versions & 1 rubygems

Version Path
kea-rails-2.0.0.pre.alpha14 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha13 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha12 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha11 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha10 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha9 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha8 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha7 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha6 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha5 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha4 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha3 app/assets/javascripts/kea/extenders/external_validator.js
kea-rails-2.0.0.pre.alpha2 app/assets/javascripts/kea/extenders/external_validator.js