-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathautoform5.min.js
1 lines (1 loc) · 6.23 KB
/
autoform5.min.js
1
(function($){if($.support.input===undefined){(function(d){d.extend(d.support,function(){var c=document.createElement("input");return{inputtypes:function(){var a="search number range color tel url email date month week time datetime datetime-local".split(" "),b={};i=0;for(j=a.length;i<j;i++){c.setAttribute("type",a[i]);b[a[i]]=c.type!=="text"}return b}(),input:function(){var a="autocomplete autofocus list placeholder max min multiple pattern required step".split(" "),b={};i=0;for(j=a.length;i<j;i++){b[a[i]]=!!(a[i] in c)}return b}()}}())})(jQuery)}$.fn.extend({autoForm5:function(options){$.fn.autoForm5.defaults={validateForm:true,requiredFields:"",interimDataField:"instructions",classes:{form:"af5-activeform",fieldset:"af5-activefieldset",error:"af5-error",required:"af5-required",passive:"af5-passive",active:"af5-active",interim:"af5-interim",filled:"af5-filled"},pattern:{tel:/^((\+\d{1,3}? ?\d{1,3}? ?[\d\- \(\)]{7,15})|([\-\ \(\)\d]{6,20}))$/,email:/^(\w|\.|-)+?@(\w|-)+?\.\w{2,4}($|\.\w{2,4})$/,number:/^\d+$/,url:/(https?:\/\/)?(www\.)?([a-zA-Z0-9_%]*)\b\.[a-z]{2,4}(\.[a-z]{2})?((\/[a-zA-Z0-9_%]*)+)?(\.[a-z]*)?/,text:/./}};var options=$.extend(true,$.fn.autoForm5.defaults,options);return this.each(function(){var o=options;var AF5={};AF5.form=(this.nodeName=="FORM"?$(this):$(this).closest("form"));AF5.fieldsets=$("fieldset",AF5.form);AF5.inputs=$("input:not([type=submit])",AF5.form);AF5.submit=$("[type=submit]",AF5.form);AF5.fields={number:$("input[type=number]",AF5.form),tel:$("input[type=tel]",AF5.form),email:$("input[type=email]",AF5.form),search:$("input[type=search]",AF5.form),url:$("input[type=url]",AF5.form),placeholder:$(":input[placeholder]",AF5.form),required:$(':input[required=""],:input.required,'+o.requiredFields,AF5.form),autofocus:$(':input[autofocus=""]',AF5.form),interim:$(":input[data-"+o.interimDataField+"]",AF5.form)};AF5.validation={regex:{tel:o.pattern.tel,email:o.pattern.email,number:o.pattern.number,url:o.pattern.url,text:o.pattern.text},validate:function(value,type){if(type==null){type="text"}var reg=(this.regex[type]?this.regex[type]:this.regex.text);return reg.test(value)}};function interim(ele,action){if(action){return $(ele).attr("data-"+o.interimDataField)}else{return($(ele).attr("data-"+o.interimDataField)?true:false)}}function classified(){AF5.inputs.each(function(index){var self=$(this);self.addClass(o.classes.passive);self.bind("focus blur",function(e){var closestForm=self.closest("form"),closestFieldset=self.closest("fieldset");if(e.type=="focus"){closestFieldset.addClass(o.classes.fieldset);closestForm.addClass(o.classes.form);self.addClass(o.classes.active).removeClass(o.classes.passive)}else{if(e.type="blur"){closestFieldset.removeClass(o.classes.fieldset);closestForm.removeClass(o.classes.form);self.removeClass(o.classes.active).addClass(o.classes.passive);if(self.val()!=self.attr("placeholder")&&self.val()!=""&&self.val()!=interim(self,true)&&self.val()!=self.attr("data-error")){self.addClass(o.classes.filled);if(!$.support.input.email||!$.support.input.tel||!$.support.input.url||!$.support.input.number){if((AF5.validation.validate(self[0].value,self[0].getAttribute("type")))){self.removeClass(o.classes.error)}else{if(self.val()!=""){self.addClass(o.classes.error)}}}}else{self.removeClass(o.classes.filled)}}}});self.bind("keyup",function(e){if(self.is("."+o.classes.error)&&(AF5.validation.validate(self[0].value,self[0].getAttribute("type")))){self.removeClass(o.classes.error)}else{if(self.val()==""){self.removeClass(o.classes.error).removeClass(o.classes.filled)}}})});AF5.fields.required.each(function(i){var self=$(this);self.addClass(o.classes.required)});AF5.submit.bind("focus blur",function(e){var self=$(this),closestForm=self.closest("form"),closestFieldset=self.closest("fieldset");if(e.type=="focus"){closestFieldset.addClass(o.classes.fieldset);closestForm.addClass(o.classes.form);self.addClass(o.classes.active)}else{closestFieldset.removeClass(o.classes.fieldset);closestForm.removeClass(o.classes.form);self.removeClass(o.classes.active)}})}classified();function validate(fields){$.each(fields,function(i,ele){$(ele).addClass(o.classes.error).removeClass(o.classes.filled);if($(ele).attr("data-error")&&ele.value==""||ele.value==interim(ele,true)||ele.value==$(ele).attr("placeholder")){$(ele).val($(ele).attr("data-error"))}$(ele).bind("keyup blur change",function(e){if((AF5.validation.validate(ele.value,ele.getAttribute("type")))){$(ele).removeClass(o.classes.error).addClass(o.classes.filled)}else{$(ele).addClass(o.classes.error).removeClass(o.classes.filled)}})})}if($.support.input.required){$.each($(":input.required,"+o.requiredFields),function(i,ele){ele.setAttribute("required",true)})}if(!$.support.input.placeholder){AF5.fields.placeholder.each(function(i){var self=$(this);if(self.val()==""){self.val(self.attr("placeholder"))}self.bind("focus blur keydown click",function(e){if(e.type=="focus"&&self.val()==self.attr("placeholder")){if(interim(self)){self.val(interim(self,true)).addClass(o.classes.interim)}else{self.val("")}}else{if(e.type=="blur"){if(self.val()==""||self.val()==interim(self,true)||self.val()==self.attr("data-error")){self.val(self.attr("placeholder")).removeClass(o.classes.interim)}}else{if(e.type=="keydown"&&self.val()==interim(self,true)||self.val()==self.attr("data-error")){self.val("").removeClass(o.classes.interim)}}}})})}else{AF5.fields.interim.each(function(i){var self=$(this);self.addClass(o.classes.passive);self.bind("focus blur keydown",function(e){if(e.type=="focus"&&interim(self)&&self.val()==""){self.val(interim(self,true)).addClass(o.classes.interim)}else{if(e.type=="blur"&&self.val()==interim(self,true)||self.val()==self.attr("data-error")){self.val("").removeClass(o.classes.interim)}else{if(e.type=="keydown"&&self.val()==interim(self,true)||self.val()==self.attr("data-error")){self.val("").removeClass(o.classes.interim)}}}})})}if(!$.support.input.autofocus){AF5.fields.autofocus.first().focus()}AF5.form.submit(function(e){if(!$.support.input.required){var required=[];$.each(AF5.fields.required,function(i,ele){$(ele).removeClass(o.classes.error);if(ele.value==""||ele.value==$(ele).attr("placeholder")||ele.value==interim(ele,true)||(!AF5.validation.validate(ele.value,ele.getAttribute("type")))){required.push(ele)}});if(required.length){e.preventDefault();validate(required)}}})})}})})(jQuery);