form-validator.min.js 5.9 KB

12345678
  1. /*
  2. * Validator v0.8.1 for Bootstrap 3, by @1000hz
  3. * Copyright 2015 Cina Saffary
  4. * Licensed under http://opensource.org/licenses/MIT
  5. *
  6. * https://github.com/1000hz/bootstrap-validator
  7. */
  8. +function(f){function g(a){return this.each(function(){var b=f(this),d=f.extend({},i.DEFAULTS,b.data(),"object"==typeof a&&a),k=b.data("bs.validator");(k||"destroy"!=a)&&(k||b.data("bs.validator",k=new i(this,d)),"string"==typeof a&&k[a]())})}var h=':input:not([type="submit"], button):enabled:visible',i=function(a,d){this.$element=f(a),this.options=d,d.errors=f.extend({},i.DEFAULTS.errors,d.errors);for(var k in d.custom){if(!d.errors[k]){throw new Error("Missing default error message for custom validator: "+k)}}f.extend(i.VALIDATORS,d.custom),this.$element.attr("novalidate",!0),this.toggleSubmit(),this.$element.on("input.bs.validator change.bs.validator focusout.bs.validator",f.proxy(this.validateInput,this)),this.$element.on("submit.bs.validator",f.proxy(this.onSubmit,this)),this.$element.find("[data-match]").each(function(){var e=f(this),l=e.data("match");f(l).on("input.bs.validator",function(){e.val()&&e.trigger("input.bs.validator")})})};i.DEFAULTS={delay:500,html:!1,disable:!0,custom:{},errors:{match:"Does not match",minlength:"Not long enough"},feedback:{success:"glyphicon-ok",error:"glyphicon-warning-sign"}},i.VALIDATORS={"native":function(c){var d=c[0];return d.checkValidity?d.checkValidity():!0},match:function(a){var d=a.data("match");return !a.val()||a.val()===f(d).val()},minlength:function(c){var d=c.data("minlength");return !c.val()||c.val().length>=d}},i.prototype.validateInput=function(a){var k=f(a.target),l=k.data("bs.validator.errors");if(k.is('[type="radio"]')&&(k=this.$element.find('input[name="'+k.attr("name")+'"]')),this.$element.trigger(a=f.Event("validate.bs.validator",{relatedTarget:k[0]})),!a.isDefaultPrevented()){var m=this;this.runValidators(k).done(function(b){k.data("bs.validator.errors",b),b.length?m.showErrors(k):m.clearErrors(k),l&&b.toString()===l.toString()||(a=b.length?f.Event("invalid.bs.validator",{relatedTarget:k[0],detail:b}):f.Event("valid.bs.validator",{relatedTarget:k[0],detail:l}),m.$element.trigger(a)),m.toggleSubmit(),m.$element.trigger(f.Event("validated.bs.validator",{relatedTarget:k[0]}))})}},i.prototype.runValidators=function(a){function d(b){return a.data(b+"-error")||a.data("error")||"native"==b&&a[0].validationMessage||m.errors[b]}var k=[],l=f.Deferred(),m=this.options;return a.data("bs.validator.deferred")&&a.data("bs.validator.deferred").reject(),a.data("bs.validator.deferred",l),f.each(i.VALIDATORS,f.proxy(function(b,c){if((a.data(b)||"native"==b)&&!c.call(this,a)){var e=d(b);!~k.indexOf(e)&&k.push(e)}},this)),!k.length&&a.val()&&a.data("remote")?this.defer(a,function(){var b={};b[a.attr("name")]=a.val(),f.get(a.data("remote"),b).fail(function(c,e,n){k.push(d("remote")||n)}).always(function(){l.resolve(k)})}):l.resolve(k),l.promise()},i.prototype.validate=function(){var b=this.options.delay;return this.options.delay=0,this.$element.find(h).trigger("input.bs.validator"),this.options.delay=b,this},i.prototype.showErrors=function(a){var d=this.options.html?"html":"text";this.defer(a,function(){var b=a.closest(".form-group"),c=b.find(".help-block.with-errors"),k=b.find(".form-control-feedback"),l=a.data("bs.validator.errors");l.length&&(l=f("<ul/>").addClass("list-unstyled").append(f.map(l,function(e){return f("<li/>")[d](e)})),void 0===c.data("bs.validator.originalContent")&&c.data("bs.validator.originalContent",c.html()),c.empty().append(l),b.addClass("has-error"),k.length&&k.removeClass(this.options.feedback.success)&&k.addClass(this.options.feedback.error)&&b.removeClass("has-success"))})},i.prototype.clearErrors=function(e){var k=e.closest(".form-group"),l=k.find(".help-block.with-errors"),m=k.find(".form-control-feedback");l.html(l.data("bs.validator.originalContent")),k.removeClass("has-error"),m.length&&m.removeClass(this.options.feedback.error)&&m.addClass(this.options.feedback.success)&&k.addClass("has-success")},i.prototype.hasErrors=function(){function a(){return !!(f(this).data("bs.validator.errors")||[]).length}return !!this.$element.find(h).filter(a).length},i.prototype.isIncomplete=function(){function a(){return"checkbox"===this.type?!this.checked:"radio"===this.type?!f('[name="'+this.name+'"]:checked').length:""===f.trim(this.value)}return !!this.$element.find(h).filter("[required]").filter(a).length},i.prototype.onSubmit=function(b){this.validate(),(this.isIncomplete()||this.hasErrors())&&b.preventDefault()},i.prototype.toggleSubmit=function(){if(this.options.disable){var a=f('button[type="submit"], input[type="submit"]').filter('[form="'+this.$element.attr("id")+'"]').add(this.$element.find('input[type="submit"], button[type="submit"]'));a.toggleClass("disabled",this.isIncomplete()||this.hasErrors()).css({"pointer-events":"all",cursor:"pointer"})}},i.prototype.defer=function(a,d){return d=f.proxy(d,this),this.options.delay?(window.clearTimeout(a.data("bs.validator.timeout")),void a.data("bs.validator.timeout",window.setTimeout(d,this.options.delay))):d()},i.prototype.destroy=function(){return this.$element.removeAttr("novalidate").removeData("bs.validator").off(".bs.validator"),this.$element.find(h).off(".bs.validator").removeData(["bs.validator.errors","bs.validator.deferred"]).each(function(){var a=f(this),d=a.data("bs.validator.timeout");window.clearTimeout(d)&&a.removeData("bs.validator.timeout")}),this.$element.find(".help-block.with-errors").each(function(){var a=f(this),d=a.data("bs.validator.originalContent");a.removeData("bs.validator.originalContent").html(d)}),this.$element.find('input[type="submit"], button[type="submit"]').removeClass("disabled"),this.$element.find(".has-error").removeClass("has-error"),this};var j=f.fn.validator;f.fn.validator=g,f.fn.validator.Constructor=i,f.fn.validator.noConflict=function(){return f.fn.validator=j,this},f(window).on("load",function(){f('form[data-bs-toggle="validator"]').each(function(){var a=f(this);g.call(a,a.data())})})}(jQuery);