Skip to content

Instantly share code, notes, and snippets.

@elclanrs
Created July 29, 2012 10:17
Show Gist options
  • Save elclanrs/3197271 to your computer and use it in GitHub Desktop.
Save elclanrs/3197271 to your computer and use it in GitHub Desktop.
jquery.idealforms.min.js
/*--------------------------------------------------------------------------
jq-idealforms 2.0
* Author: Cedric Ruiz
* License: GPL or MIT
* Demo: http://elclanrs.github.com/jq-idealforms/
*
--------------------------------------------------------------------------*/(function(e){"use strict";e.idealforms={};var t={getMaxWidth:function(t){var n=0;return t.each(function(){e(this).outerWidth()>n&&(n=e(this).outerWidth())}),n},getLessVar:function(t,n){var r=e('<p class="'+t+'"></p>').hide().appendTo("body").css(n);return e("."+t).remove(),/^\d+/.test(r)?parseInt(r,10):r},getKeys:function(e){var t=[];for(var n in e)t.push(n);return t},isFunction:function(e){return typeof e=="function"},isRegex:function(e){return e instanceof RegExp},getByNameOrId:function(t){if(e('[name="'+t+'"]').length)return e('[name="'+t+'"]');if(e('[name="'+t+'"]').length)return e("#"+t);e.error('The field "'+t+"\" doesn't exist.")},getIdealType:function(e){var t=e.attr("type")||e[0].tagName.toLowerCase();return/(text|password|email|number|search|url|tel)/.test(t)&&"text"||/file/.test(t)&&"file"||/select/.test(t)&&"select"||/(radio|checkbox)/.test(t)&&"radiocheck"||/(button|submit|reset)/.test(t)&&"button"||/h\d/.test(t)&&"description"||/hr/.test(t)&&"separator"||/hidden/.test(t)&&"hidden"},makeInput:function(e,t,n,r){var i,s=[],o,u;/(text|password|email|number|search|url|tel|file|hidden)/.test(t)&&(i='<input type="'+t+'" '+'id="'+e+'" '+'name="'+e+'" '+(r&&'placeholder="'+r+'"')+"/>");if(/select/.test(t)){s=[];for(o=0,u=n.length;o<u;o++)s.push('<option value="'+n[o]+'">'+n[o]+"</option>");i='<select id="'+e+'" name="'+e+'">'+s.join("")+"</select>"}if(/(radio|checkbox)/.test(t)){s=[];for(o=0,u=n.length;o<u;o++)s.push('<label><input type="'+t+'" name="'+e+'" value="'+n[o]+'" />'+n[o]+"</label>");i=s.join("")}return i}};e.fn.idealTabs=function(t){var n=e.extend({tabContainer:""},t),r=this,i=e(n.tabContainer),s=e('<ul class="ideal-tabs-wrap"/>'),o=function(){var t=[];return r.each(function(){var n=e(this),r=n.attr("name"),i='<li class="ideal-tabs-tab"><span>'+r+"</span>"+'<i class="ideal-tabs-tab-counter ideal-tabs-tab-counter-zero">0</i>'+"</li>";t.push(i)}),e(t.join(""))}(),u={getCurIdx:function(){return o.filter(".ideal-tabs-tab-active").index()},getTabIdxByName:function(t){var n=new RegExp(t,"i"),r=o.filter(function(){return n.test(e(this).text())}),i=r.index();return i}},a={switchTab:function(t){var n=e.extend({name:"",idx:null},t),i=n.idx!==null?n.idx:u.getTabIdxByName(n.name);o.removeClass("ideal-tabs-tab-active"),o.eq(i).addClass("ideal-tabs-tab-active"),r.hide().eq(i).show()},nextTab:function(){var e=u.getCurIdx()+1;e>o.length-1?a.firstTab():a.switchTab({idx:e})},prevTab:function(){var e=u.getCurIdx()-1;a.switchTab({idx:e})},firstTab:function(){a.switchTab({idx:0})},lastTab:function(){a.switchTab({idx:o.length-1})},updateCounter:function(e,t){var n=u.getTabIdxByName(e),r=o.eq(n).find(".ideal-tabs-tab-counter");r.removeClass("ideal-tabs-tab-counter-zero"),t||r.addClass("ideal-tabs-tab-counter-zero"),r.attr("title","Invalid fields").html(t)}};for(var f in a)r[f]=a[f];return o.first().addClass("ideal-tabs-tab-active").end().click(function(){var t=e(this).text();r.switchTab({name:t})}),s.append(o).appendTo(i),r.addClass("ideal-tabs-content").each(function(){var t=e(this),n=e(this).attr("name");t.data("ideal-tabs-content-name",n).removeAttr("name")}).hide().first().show(),r},e.fn.idealSelect=function(){return this.each(function(){var n=e(this),r=n.find("option"),i=function(){var t=e('<ul class="ideal-select '+n.attr("name")+'"/>'),i=e('<li><span class="ideal-select-title">'+r.filter(":selected").text()+"</span></li>"),s=function(){var t=[];return r.each(function(){var n=e(this);t.push('<li class="ideal-select-item">'+n.text()+"</li>")}),t}();return i.append('<ul class="ideal-select-sub">'+s.join("")+"</ul>"),t.append(i),{select:t,title:i.find(".ideal-select-title"),sub:i.find(".ideal-select-sub"),items:i.find(".ideal-select-item")}}(),s={getSelectedIdx:function(){return i.items.filter(".ideal-select-item-selected").index()},init:function(){n.css({position:"absolute",left:"-9999px"}),i.sub.hide(),i.select.insertAfter(n),i.select.css("min-width",t.getMaxWidth(i.items)),i.items.eq(r.filter(":selected").index()).addClass("ideal-select-item-selected")}(),noWindowScroll:function(e){(e.which===40||e.which===38||e.which===13)&&e.preventDefault()},focusHack:function(){setTimeout(function(){n.trigger("focus")},1)},focus:function(){i.select.addClass("ideal-select-focus"),e(document).on("keydown.noscroll",s.noWindowScroll)},blur:function(){i.select.removeClass("ideal-select-open ideal-select-focus"),e(document).off(".noscroll")},scrollIntoView:function(e){var t=i.items.filter(".ideal-select-item-selected"),n=i.items.outerHeight(),r=i.sub.outerHeight(),s=function(){var i=t.position().top+n;return e==="down"?i<=r:i>0}();s||(n=e==="down"?n:-n,i.sub.scrollTop(i.sub.scrollTop()+n))},scrollToItem:function(){var e=s.getSelectedIdx(),t=i.items.outerHeight(),n=i.items.length,r=t*n,o=t*(n-e);i.sub.scrollTop(r-o)},showMenu:function(){i.sub.fadeIn("fast"),i.select.addClass("ideal-select-open"),s.select(s.getSelectedIdx()),s.scrollToItem()},hideMenu:function(){i.sub.hide(),i.select.removeClass("ideal-select-open")},select:function(e){i.items.removeClass("ideal-select-item-selected"),i.items.eq(e).addClass("ideal-select-item-selected")},change:function(e){var t=i.items.eq(e).text();s.select(e),i.title.text(t),r.eq(e).prop("selected",!0),n.trigger("change")},keydown:function(t){var n=s.getSelectedIdx(),o=i.select.is(".ideal-select-menu"),u=i.select.is(".ideal-select-open"),a={9:function(){o&&(s.blur(),s.hideMenu())},13:function(){o&&(u?s.hideMenu():s.showMenu()),s.change(n)},27:function(){o&&s.hideMenu()},40:function(){n<r.length-1&&(u?s.select(n+1):s.change(n+1)),s.scrollIntoView("down")},38:function(){n>0&&(u?s.select(n-1):s.change(n-1)),s.scrollIntoView("up")},"default":function(){var n=String.fromCharCode(t),r=i.items.filter(function(){var t=new RegExp("^"+n,"i");return t.test(e(this).text())}),o=r.length,a=i.select.data("counter")+1||0,f=i.select.data("key")||t,l=r.eq(a).index();if(!o)return!1;f===t?a<o?i.select.data("counter",a):(i.select.data("counter",0),l=r.eq(0).index()):(i.select.data("counter",0),l=r.eq(0).index()),u?s.select(l):s.change(l),i.select.data("key",t),s.scrollToItem(),s.focusHack()}};a[t]?a[t]():a["default"]()}},o={focus:s.focus,"blur.menu":function(){s.blur(),s.hideMenu()},"blur.list":function(){s.blur()},keydown:function(e){s.keydown(e.which)},"clickItem.menu":function(){s.change(e(this).index()),s.hideMenu()},"clickItem.list":function(){s.change(e(this).index())},"clickTitle.menu":function(){s.focus(),s.showMenu(),n.trigger("focus")},"hideOutside.menu":function(){n.off("blur.menu"),e(document).on("mousedown.ideal",function(t){e(t.target).closest(i.select).length?s.focusHack():(e(document).off("mousedown.ideal"),n.on("blur.menu",o["blur.menu"]))})},"mousedown.list":function(){s.focusHack()}},u=function(){i.select.removeClass("ideal-select-menu ideal-select-list"),n.off(".menu .list"),i.items.off(".menu .list"),i.select.off(".menu .list"),i.title.off(".menu .list")};i.select.on("menu",function(){u(),i.select.addClass("ideal-select-menu"),s.hideMenu(),n.on({"blur.menu":o["blur.menu"],"focus.menu":o.focus,"keydown.menu":o.keydown}),i.select.on("mousedown.menu",o["hideOutside.menu"]),i.items.on("click.menu",o["clickItem.menu"]),i.title.on("click.menu",o["clickTitle.menu"])}),i.select.on("list",function(){u(),i.select.addClass("ideal-select-list"),s.showMenu(),n.on({"blur.list":o["blur.list"],"focus.list":o.focus,"keydown.list":o.keydown}),i.select.on("mousedown.list",o["mousedown.list"]),i.items.on("mousedown.list",o["clickItem.list"])}),n.keydown(function(e){e.which!==9&&e.preventDefault()}),i.select.on("reset",function(){s.change(0)}),i.select.trigger("menu")})},e.fn.idealRadioCheck=function(){return this.each(function(){var t=e(this),n=e("<span/>");t.is(":checkbox")?n.addClass("ideal-check"):n.addClass("ideal-radio"),t.is(":checked")&&n.addClass("checked"),n.insertAfter(t),e(this).parent("label").addClass("ideal-radiocheck-label").attr("onclick",""),t.css({position:"absolute",left:"-9999px"}).on({change:function(){var t=e(this);t.trigger("focus"),t.is(":radio")?(t.parent().siblings("label").children(".ideal-radio").removeClass("checked"),t.is(":checked")&&t.next(".ideal-radio").addClass("checked")):t.is(":checked")?n.addClass("checked"):n.removeClass("checked")},focus:function(){n.parent().addClass("focus")},blur:function(){n.parent().removeClass("focus")},click:function(){e(this).trigger("focus")}})})},e.fn.idealFile=function(){var t=typeof e("input")[0].multiple!="undefined";return this.each(function(){var n=e(this),r=e('<div class="ideal-file-wrap">'),i=e('<input type="text" class="ideal-file-filename" />'),s=e('<button type="button" class="ideal-file-upload">Open</button>');n.css({position:"absolute",left:"-9999px"}),s.attr("tabIndex",-1).click(function(){n.trigger("click")}),n.attr("tabIndex",-1).on({change:function(){var e=[],r,s;if(t){r=n[0].files;for(var o=0,u=r.length;o<u;o++)e.push(r[o].name);s=e.join(", ")}else s=n.val().split("\\").pop();i.val(s),i.attr("title",s)},focus:function(){i.trigger("focus")}}),i.on({keyup:function(){n.trigger("change")},focus:function(){n.trigger("change")},blur:function(){n.trigger("blur")},keydown:function(e){e.which===13&&n.trigger("click"),(e.which===8||e.which===46)&&n.val("")}}),r.append(s,i).insertAfter(n)})},e.idealforms.errors={required:"This field is required.",number:"Must be a number.",digits:"Must be only digits.",name:"Must be at least 3 characters long, and must only contain letters.",username:"Must be at between 4 and 32 characters long and start with a letter. You may use letters, numbers, underscores, and one dot (.)",pass:"Must be at least 6 characters long, and contain at least one number, one uppercase and one lowercase letter.",strongpass:"Must be at least 8 characters long and contain at least one uppercase and one lowercase letter and one number or special character.",email:"Must be a valid e-mail address. <em>(e.g. user@gmail.com)</em>",phone:"Must be a valid US phone number. <em>(e.g. 555-123-4567)</em>",zip:"Must be a valid US zip code. <em>(e.g. 33245 or 33245-0003)</em>",url:"Must be a valid URL. <em>(e.g. www.google.com)</em>",minChar:"Must be at least <strong>{0}</strong> characters long.",minOption:"Check at least <strong>{0}</strong> options.",maxChar:"No more than <strong>{0}</strong> characters long.",maxOption:"No more than <strong>{0}</strong> options allowed.",range:"Must be a number between {0} and {1}.",date:"Must be a valid date. <em>(e.g. {0})</em>",dob:"Must be a valid date of birth.",exclude:'"{0}" is not available.',excludeOption:"{0}",equalto:'Must be the same value as <strong>"{0}"</strong>',extension:'File(s) must have a valid extension. <em>(e.g. "{0}")</em>'},e.idealforms.filters={};var n=function(){var t={required:{error:e.idealforms.errors.required},number:{regex:/\d+/,error:e.idealforms.errors.number},digits:{regex:/^\d+$/,error:e.idealforms.errors.digits},name:{regex:/^[A-Za-z]{3,}$/,error:e.idealforms.errors.name},username:{regex:/^[a-z](?=[\w.]{3,31}$)\w*\.?\w*$/i,error:e.idealforms.errors.username},pass:{regex:/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}/,error:e.idealforms.errors.pass},strongpass:{regex:/(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/,error:e.idealforms.errors.strongpass},email:{regex:/[^@]+@[^@]/,error:e.idealforms.errors.email},phone:{regex:/^[2-9]\d{2}-\d{3}-\d{4}$/,error:e.idealforms.errors.phone},zip:{regex:/^\d{5}$|^\d{5}-\d{4}$/,error:e.idealforms.errors.zip},url:{regex:/^(?:(ftp|http|https):\/\/)?(?:[\w\-]+\.)+[a-z]{3,6}$/i,error:e.idealforms.errors.url},min:{regex:function(t,n){var r=t.input,i=t.userOptions.data.min,s=r.is('[type="checkbox"], [type="radio"]');return s?(this.error=e.idealforms.errors.minOption.replace("{0}",i),r.filter(":checked").length>=i):(this.error=e.idealforms.errors.minChar.replace("{0}",i),n.length>=i)}},max:{regex:function(t,n){var r=t.input,i=t.userOptions.data.max,s=r.is('[type="checkbox"], [type="radio"]');return s?(this.error=e.idealforms.errors.maxOption.replace("{0}",i),r.filter(":checked").length<=i):(this.error=e.idealforms.errors.maxChar.replace("{0}",i),n.length<=i)}},range:{regex:function(t,n){var r=t.userOptions.data.range,i=+n;return this.error=e.idealforms.errors.range.replace("{0}",r[0]).replace("{1}",r[1]),i>=r[0]&&i<=r[1]}},date:{regex:function(t,n){var r=t.userOptions.data&&t.userOptions.data.date?t.userOptions.data.date:"mm/dd/yyyy",i=/[^mdy]/.exec(r)[0],s=r.split(i),o=n.split(i),u=function(e,t){var n,r,i;for(var s=0,o=t.length;s<o;s++)/m/.test(t[s])&&(n=e[s]),/d/.test(t[s])&&(r=e[s]),/y/.test(t[s])&&(i=e[s]);return n>0&&n<13&&i&&i.length===4&&r>0&&r<=(new Date(i,n,0)).getDate()};return this.error=e.idealforms.errors.date.replace("{0}",r),u(o,s)}},dob:{regex:function(n,r){var i=n.userOptions.data&&n.userOptions.data.dob?n.userOptions.data.dob:"mm/dd/yyyy",s={input:n.input,userOptions:{data:{date:i}}},o=t.date.regex(s,r),u=/\d{4}/.exec(r),a=(new Date).getFullYear(),f=a-100;return this.error=e.idealforms.errors.dob,o&&u>=f&&u<=a}},exclude:{regex:function(t,n){var r=t.input,i=t.userOptions.data.exclude,s=r.is('[type="checkbox"], [type="radio"], select');return s?this.error=e.idealforms.errors.excludeOption.replace("{0}",n):this.error=e.idealforms.errors.exclude.replace("{0}",n),!~e.inArray(n,i)}},equalto:{regex:function(t,n){var r=e(t.userOptions.data.equalto),i=t.input,s=r.attr("name")||r.attr("id"),o=r.parents(".ideal-field").filter(function(){return e(this).data("isValid")===!0}).length;return o?(this.error=e.idealforms.errors.equalto.replace("{0}",s),i.val()===r.val()):!1}},extension:{regex:function(t,n){var r=t.input[0].files||[{name:n}],i=t.userOptions.data.extension,s=new RegExp("\\."+i.join("|")+"$","i"),o=!1;for(var u=0,a=r.length;u<a;u++)o=s.test(r[u].name)?!0:!1;return this.error=e.idealforms.errors.extension.replace("{0}",i.join('", "')),o}}};return t},r={noerror:function(e){e.parent().siblings(".ideal-error").hide()},noicons:function(e){e.siblings(".ideal-icon-valid, .ideal-icon-invalid").hide()},novalidicon:function(e){e.siblings(".ideal-icon-valid").hide()},noinvalidicon:function(e){e.siblings(".ideal-icon-invalid").hide()},noclass:function(e){e.parents(".ideal-field").removeClass("valid invalid")},novalidclass:function(e){e.parents(".ideal-field").removeClass("valid")},noinvalidclass:function(e){e.parents(".ideal-field").removeClass("invalid")}};e.fn.idealforms=function(i){e.extend(e.idealforms.filters,n());var s=this,o=e.extend({inputs:{},customFilters:{},customFlags:{},globalFlags:"",onSuccess:function(e){alert("Thank you...")},onFail:function(){alert(s.getInvalid().length+" invalid fields.")},responsiveAt:"auto",disableCustom:""},i),u=function(){var e=!1,t=s.find("section");return t.length&&(s.prepend('<div class="ideal-wrap ideal-tabs ideal-full-width"/>'),e=t.idealTabs({tabContainer:".ideal-tabs"})),e}(),a=function(){return{inputs:s.find("input, select, textarea, :button"),labels:s.find("div > label:first-child"),text:s.find('input:not([type="checkbox"], [type="radio"]), textarea'),select:s.find("select"),radiocheck:s.find('input[type="radio"], input[type="checkbox"]'),buttons:s.find(":button"),file:s.find('input[type="file"]'),headings:s.find("h1, h2, h3, h4, h5, h6, p"),separators:s.find("hr"),hidden:s.find("input:hidden")}},f=function(){return s.find('[name="'+t.getKeys(o.inputs).join('"], [name="')+'"]')},l={fieldWidth:t.getLessVar("ideal-field-width","width")},c={getTab:function(t){return u.filter(function(){var n=new RegExp(t,"i");return n.test(e(this).data("ideal-tabs-content-name"))})},getCurrentTab:function(t){var n=t.parents(".ideal-tabs-content"),r=n.data("ideal-tabs-content-name"),i=e(n.find(".ideal-field").parents(".ideal-wrap").get().reverse());return{content:n,name:r,fields:i}},updateTabsCounter:function(t){t?u.updateCounter(t,s.getInvalid(t).length):u.each(function(){var t=e(this).data("ideal-tabs-content-name"),n=s.getInvalid(t).length;u.updateCounter(t,n)})},doMarkup:function(n){var r=t.getIdealType(n),i=function(){var t=e('<span class="ideal-error" />'),r=e('<i class="ideal-icon ideal-icon-valid" />'),i=e("<i/>",{"class":"ideal-icon ideal-icon-invalid",click:function(){var t=e(this);t.siblings("label").length?t.siblings("label:first").find("input").focus():t.siblings("input, select, textarea").focus()}});n.parents(".ideal-field").append(r.add(i).hide()).after(t.hide())},s={"default":e.noop,defaultInput:function(){n.wrapAll('<span class="ideal-field"/>'),i()},button:function(){/button/.test(o.disableCustom)||n.addClass("ideal-button")},file:function(){s.defaultInput(),/file/.test(o.disableCustom)||n.idealFile()},select:function(){s.defaultInput(),/select/.test(o.disableCustom)||n.idealSelect()},text:function(){s.defaultInput()},radiocheck:function(){var e=n.parents(".ideal-field").length,t=n.parent().siblings("label:not(:first)").andSelf();/radiocheck/.test(o.disableCustom)||n.idealRadioCheck();if(!!e)return!1;t.wrapAll('<span class="ideal-field ideal-radiocheck"/>'),i()},description:function(){var e=n.parents(".ideal-field").length,t=n.siblings().andSelf();n.closest("div").addClass("ideal-full-width"),e||t.wrapAll('<span class="ideal-heading"/>')},separator:function(){n.closest("div").addClass("ideal-full-width"),n.wrapAll('<div class="ideal-separator"/>')},hidden:function(){n.closest("div").addClass("ideal-hidden")}};n.closest("div").addClass("ideal-wrap"),s[r]?s[r]():s["default"]()},adjust:function(){var n=a(),r=f();n.inputs.attr("autocomplete","off"),s.find("."+t.getKeys(e.idealforms.filters).join(", .")).each(function(){o.inputs[this.name]={filters:this.className}}),n.labels.removeAttr("style").addClass("ideal-label").width(t.getMaxWidth(n.labels)),u?u.each(function(){e(this).find(".ideal-heading:first").addClass("first-child")}):s.find(".ideal-heading:first").addClass("first-child"),jQuery.ui&&s.find("input.datepicker").each(function(){var t=o.inputs[this.name],n=t.data&&t.data.date,r=n?n.replace("yyyy","yy"):"mm/dd/yy";e(this).datepicker({dateFormat:r,beforeShow:function(t){e(t).addClass("open")},onChangeMonthYear:function(){var t=e(this).outerWidth();setTimeout(function(){e(this).datepicker("widget").width(t)},1)},onClose:function(){e(this).removeClass("open")}})}).on("focus keyup",function(){var t=e(this),n=t.outerWidth();t.datepicker("widget").width(n)}).parent().siblings(".ideal-error").addClass("hidden"),"placeholder"in e("<input/>")[0]||n.text.each(function(){e(this).val(e(this).attr("placeholder"))}).on({focus:function(){this.value===e(this).attr("placeholder")&&e(this).val("")},blur:function(){e(this).val()||e(this).val(e(this).attr("placeholder"))}})},init:function(){var t=a();s.css("visibility","visible").addClass("ideal-form"),s.attr("novalidate","novalidate"),jQuery.ui&&(e.datepicker._checkOffset=function(e,t,n){return t}),t.inputs.add(t.headings).add(t.separators).each(function(){c.doMarkup(e(this))}),c.adjust()},validate:function(n,r){var i=!0,s="",o=n.input,u=n.userOptions,a=u.filters;if(a){!r&&/required/.test(a)&&(s=u.errors&&u.errors.required?u.errors.required:e.idealforms.errors.required,i=!1);if(r){a=a.split(/\s/);for(var f=0,l=a.length;f<l;f++){var c=a[f],h=e.idealforms.filters[c]||{};if(h&&(t.isFunction(h.regex)&&!h.regex(n,r)||t.isRegex(h.regex)&&!h.regex.test(r))){i=!1,s=u.errors&&u.errors[c]||h.error;break}}}}return{isValid:i,error:s}},analyze:function(e,t){var n=e.is('[type="checkbox"], [type="radio"]'),i=function(){var t=f();return n?t.filter('[name="'+e.attr("name")+'"]'):t.filter(e)}(),a=c.getCurrentTab(i).name,l=o.inputs[e.attr("name")],h=function(){var t=e.val();if(t===e.attr("placeholder"))return;return n?l&&" ":t}(),p=e.parents(".ideal-field"),d=p.siblings(".ideal-error"),v=function(){return n?e.parent().siblings(".ideal-icon-invalid"):e.siblings(".ideal-icon-invalid")}(),m=function(){return n?e.parent().siblings(".ideal-icon-valid"):e.siblings(".ideal-icon-valid")}(),g=c.validate({input:i,userOptions:l},h),y=function(){var e=l.flags?l.flags:"";return o.globalFlags&&(e+=o.globalFlags),e.split(/\s/)}(),b=function(){for(var e=0,n=y.length,s;e<n;e++){s=y[e];if(!r[s])break;r[s](i,t)}};p.removeClass("valid invalid").data("isValid",!0),d.add(v).add(m).hide(),h&&g.isValid&&(d.add(v).hide(),p.addClass("valid").data("isValid",!0),m.show()),g.isValid||(v.show(),p.addClass("invalid").data("isValid",!1),s.find(".ideal-error").hide(),t!=="blur"&&d.html(g.error).show()),u&&c.updateTabsCounter(a),b()},attachEvents:function(){f().on("keyup change focus blur",function(t){c.analyze(e(this),t.type)})},responsive:function(){var t=a(),n=l.fieldWidth+t.labels.outerWidth(),r=t.labels.filter(function(){return e(this).html()==="&nbsp;"}),i=s.find(".ideal-select"),u=s.find("input.hasDatepicker");o.responsiveAt==="auto"?s.width()<n?s.addClass("stack"):s.removeClass("stack"):e(window).width()<o.responsiveAt?s.addClass("stack"):s.removeClass("stack"),s.is(".stack")?(r.hide(),i.trigger("list")):(r.show(),i.trigger("menu")),u.length&&u.datepicker("hide")}},h={addFields:function(n){var r=[],i=function(n){var i=n.name,u={filters:n.filters||"",data:n.data||{},errors:n.errors||{},flags:n.flags||""},a=n.label||"",f=n.type,l=n.list||[],h=n.placeholder||"",p=e("<div><label>"+a+":</label>"+t.makeInput(i,f,l,h)+"</div>"),d=p.find("input, select, textarea, :button");u.filters&&(o.inputs[i]=u),c.doMarkup(d),n.addAfter?p.insertAfter(e(t.getByNameOrId(n.addAfter)).parents(".ideal-wrap")):n.addBefore?p.insertBefore(e(t.getByNameOrId(n.addBefore)).parents(".ideal-wrap")):n.appendToTab?p.insertAfter(c.getTab(n.appendToTab).find(".ideal-wrap:last-child")):p.insertAfter(s.find(".ideal-wrap").last()),r.push(i)};for(var u=0,a=n.length;u<a;u++)i(n[u]);return s.reload(),s.fresh(r),c.responsive(),s},removeFields:function(n){var r=[];for(var i=0,o=n.length;i<o;i++)r.push(t.getByNameOrId(n[i]).get(0));return console.log(r),e(r).parents(".ideal-wrap").remove(),u&&c.updateTabsCounter(),s.reload(),s},getInvalid:function(t){return t&&u?c.getTab(t).find(".ideal-field").filter(function(){return e(this).data("isValid")===!1}):s.find(".ideal-field").filter(function(){return e(this).data("isValid")===!1})},isValid:function(){return!s.getInvalid().length},isValidField:function(e){var n=t.getByNameOrId(e);return n.parents(".ideal-field").data("isValid")===!0},focusFirst:function(){return u?u.filter(":visible").find(".ideal-field:first").find("input:first, select, textarea").focus():s.find(".ideal-field:first").find("input:first, select, textarea").focus(),s},focusFirstInvalid:function(){var e=s.getInvalid().first(),t=e.parents(".ideal-tabs-content").data("ideal-tabs-content-name");return u&&u.switchTab({name:t}),e.find("input:first, select, textarea").focus(),s},switchTab:function(e,t){return u.switchTab({name:e,idx:t}),s},nextTab:function(){return u.nextTab(),s},prevTab:function(){return u.prevTab(),s},firstTab:function(){return u.firstTab(),s},lastTab:function(){return u.lastTab(),s},fresh:function(e){var t=f();return e&&(t=t.filter('[name="'+e.join('"], [name="')+'"]')),t.blur().parents(".ideal-field").removeClass("valid invalid"),u&&u.firstTab(),s},reload:function(){c.adjust(),c.attachEvents()},reset:function(e){var n=a(),r,i;return e?(r=t.getByNameOrId(e),i=t.getIdealType(r),(i==="text"||i==="file")&&r.val(""),i==="radiocheck"&&r.removeAttr("checked"),i==="select"&&(r.find("option").first().prop("selected",!0),r.next(".ideal-select").trigger("reset")),r.change().blur()):(n.text.val(""),n.radiocheck.removeAttr("checked"),n.select.find("option").first().prop("selected",!0),s.find(".ideal-select").trigger("reset"),n.inputs.change().blur(),s.focusFirst()),s},submitData:function(){return s.submit(),s}};for(var p in h)s[p]=h[p];return s.on({keydown:function(e){e.which===13&&e.target.nodeName!=="TEXTAREA"&&e.preventDefault()},submit:function(e){s.isValid()?o.onSuccess(e):(e.preventDefault(),o.onFail(),s.focusFirstInvalid())}}),e.extend(!0,e.idealforms.filters,o.customFilters),e.extend(!0,r,o.customFlags),u&&u.show(),c.init(),c.attachEvents(),s.fresh(),o.responsiveAt&&(e(window).resize(c.responsive),c.responsive()),u&&s.firstTab(),this}})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment