bootstrapValidator.min.js 7.2 KB

1234567891011
  1. /**
  2. * BootstrapValidator v0.2.0-dev (http://github.com/nghuuphuoc/bootstrapvalidator)
  3. *
  4. * A jQuery plugin to validate form fields. Use with Bootstrap 3
  5. *
  6. * @author Nguyen Huu Phuoc <phuoc@huuphuoc.me>
  7. * @copyright (c) 2013 Nguyen Huu Phuoc
  8. * @license MIT
  9. */
  10. !function(a){var b=function(c,d){this.$form=a(c),this.options=a.extend({},b.DEFAULT_OPTIONS,d),this.invalidFields={},this.xhrRequests={},this.numPendingRequests=null,this.formSubmited=!1,this._init()};b.DEFAULT_OPTIONS={elementClass:"bootstrap-validator-form",message:"This value is not valid",submitButtons:'button[type="submit"]',submitHandler:null,fields:null},b.prototype={constructor:b,_init:function(){if(null!=this.options.fields){var a=this;this.$form.attr("novalidate","novalidate").addClass(this.options.elementClass).on("submit",function(b){if(a.formSubmited=!0,a.options.fields){for(var c in a.options.fields)if(a.numPendingRequests>0||null==a.numPendingRequests){var d=a.getFieldElement(c);d.data("bootstrapValidator.isValid")!==!0&&a.validateField(c)}if(a.isValid()){if(a.options.submitHandler&&"function"==typeof a.options.submitHandler)return a.options.submitHandler.call(a,a,a.$form),!1}else a.$form.find(a.options.submitButtons).attr("disabled","disabled"),b.preventDefault()}});for(var b in this.options.fields)this._initField(b)}},_initField:function(b){if(null!=this.options.fields[b]&&null!=this.options.fields[b].validators){var c=this.getFieldElement(b);if(null!=c){var d=this,e=c.parents(".form-group"),f=e.find(".help-block");if(0==f.length){var g=a("<small/>").addClass("help-block").appendTo(e);c.data("bootstrapValidator.error",g);var h,i,j;if(h=e.find("label").get(0)){i=a(h).attr("class").split(" ");for(var k=0;k<i.length;k++)if("col-lg-"==i[k].substr(0,7)){j=i[k].substr(7);break}}else{i=e.children().eq(0).attr("class").split(" ");for(var k=0;k<i.length;k++)if("col-lg-offset-"==i[k].substr(0,14)){j=i[k].substr(14);break}}j&&g.addClass("col-lg-offset-"+j).addClass("col-lg-"+parseInt(12-j))}else c.data("bootstrapValidator.error",f.eq(0));var l=c.attr("type"),m="checkbox"==l||"radio"==l||"SELECT"==c.get(0).tagName?"change":"keyup";c.on(m,function(){d.formSubmited=!1,d.validateField(b)})}}},getFieldElement:function(b){var c=this.$form.find('[name="'+b+'"]');return 0==c.length?null:a(c[0])},validateField:function(b){var c=this.getFieldElement(b);if(null!=c){var d=this,e=d.options.fields[b].validators;for(var f in e)if(a.fn.bootstrapValidator.validators[f]){var g=a.fn.bootstrapValidator.validators[f].validate(d,c,e[f]);if(g===!1){d.showError(c,f);break}g===!0&&d.removeError(c)}}},showError:function(a,b){var c=a.attr("name"),d=this.options.fields[c].validators[b],e=d.message||this.options.message,f=a.parents(".form-group");this.invalidFields[c]=!0,f.removeClass("has-success").addClass("has-error"),a.data("bootstrapValidator.error").html(e).show(),this.$form.find(this.options.submitButtons).attr("disabled","disabled")},removeError:function(a){delete this.invalidFields[a.attr("name")],a.parents(".form-group").removeClass("has-error").addClass("has-success"),a.data("bootstrapValidator.error").hide(),this.$form.find(this.options.submitButtons).removeAttr("disabled")},startRequest:function(a,b,c){var d=a.attr("name");a.data("bootstrapValidator.isValid",!1),this.$form.find(this.options.submitButtons).attr("disabled","disabled"),null==this.numPendingRequests&&(this.numPendingRequests=0),this.numPendingRequests++,this.xhrRequests[d]||(this.xhrRequests[d]={}),this.xhrRequests[d][b]&&(this.numPendingRequests--,this.xhrRequests[d][b].abort()),this.xhrRequests[d][b]=c},completeRequest:function(a,b,c){c===!1?this.showError(a,b):c===!0&&(this.removeError(a),a.data("bootstrapValidator.isValid",!0));var d=a.attr("name");delete this.xhrRequests[d][b],this.numPendingRequests--,this.numPendingRequests<=0&&(this.numPendingRequests=0,this.formSubmited&&(this.options.submitHandler&&"function"==typeof this.options.submitHandler?this.options.submitHandler.call(this,this,this.$form):this.$form.submit()))},isValid:function(){if(this.numPendingRequests>0)return!1;for(var a in this.invalidFields)if(this.invalidFields[a])return!1;return!0}},a.fn.bootstrapValidator=function(c){return this.each(function(){var d=a(this),e=d.data("bootstrapValidator");e||d.data("bootstrapValidator",e=new b(this,c))})},a.fn.bootstrapValidator.validators={},a.fn.bootstrapValidator.Constructor=b}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.between={validate:function(a,b,c){var d=parseFloat(b.val());return c.inclusive===!0?d>c.min&&d<c.max:d>=c.min&&d<=c.max}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.digits={validate:function(a,b){return/^\d+$/.test(b.val())}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.emailAddress={validate:function(a,b){var c=b.val(),d=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;return d.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.greaterThan={validate:function(a,b,c){var d=parseFloat(b.val());return c.inclusive===!0?d>c.value:d>=c.value}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.hexColor={validate:function(a,b){var c=b.val();return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(c)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.identical={validate:function(a,b,c){var d=b.val(),e=a.getFieldElement(c.field);return e&&d==e.val()?(a.removeError(e),!0):!1}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.lessThan={validate:function(a,b,c){var d=parseFloat(b.val());return c.inclusive===!0?d<c.value:d<=c.value}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.notEmpty={validate:function(b,c){var d=c.attr("type");return"checkbox"==d||"radio"==d?c.is(":checked"):""!=a.trim(c.val())}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.regexp={validate:function(a,b,c){var d=b.val();return d.match(c.regexp)}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.remote={validate:function(b,c,d){var e=c.val(),f=c.attr("name"),g=d.data;null==g&&(g={},g[f]=e);var h=a.ajax({type:"POST",url:d.url,dataType:"json",data:g}).success(function(a){var d=a.valid===!0||"true"===a.valid;b.completeRequest(c,"remote",d)});return b.startRequest(c,"remote",h),"pending"}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.stringLength={validate:function(b,c,d){var e=a.trim(c.val()),f=e.length;return d.min&&f<d.min||d.max&&f>d.max?!1:!0}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.uri={validate:function(a,b){var c=new RegExp("^(?:(?:https?|ftp)://)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))(?::\\d{2,5})?(?:/[^\\s]*)?$","i");return c.test(b.val())}}}(window.jQuery),function(a){a.fn.bootstrapValidator.validators.usZipCode={validate:function(a,b){var c=b.val();return/^\d{5}([\-]\d{4})?$/.test(c)}}}(window.jQuery);