meraproject/lib/js/bws/form.min.js

1 line
11 KiB
JavaScript
Raw Normal View History

var Form,Input,InputError,FormRuleAction,FormRuleCommand,FormRuleOperator;!function(t){var i;t.fn.FORM=function(e){var n;return i[e]?i[e].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof e&&e?(void 0===(n=t(this).data("form"))&&(n=new Form(this)),void 0!==n[e]?n[e].apply(n,Array.prototype.slice.call(arguments,1)):t.error("Метод с именем "+e+" не существует для jQuery.FORM")):i.init.apply(this,arguments)},i={init:function(i={}){var e;return 1===t(this).length?new Form(this,i):(e=[],t(this).each(function(){return e.push(new Form(this,i))}),e)},setPrepareValidate:function(t){return Form.globalPrepareValidate=t},setGlobalGood:function(t){return Form.globalGood=t},setGlobalBad:function(t){return Form.globalBad=t},setGlobalJSON:function(t){return Form.globalJSON=t},setGlobalOptions:function(t){return Form.globalOptions=t}}}(jQuery),Form=function(){class Form{constructor(t,i){this.container=t,this.init_data=i,this.container=$(this.container),this.isInited()||(this.container.on("destroyed",this.destroy.bind(this)),this.init(this.init_data))}init(t={}){var i,e;return this.container.data("form_inited",!0),this.container.data("form",this),null==this.inputActionWithParent&&(this.inputActionWithParent=null!=(i=t.inputActionWithParent)?i:null!=(e=Form.globalOptions.inputActionWithParent)&&e),this.initInputs(null!=t?t.inputs:void 0),this.checkRules(),this.initActions()}isInited(){return!0===this.container.data("form_inited")}destroy(){var t,i,e,n,r;for(r=[],i=0,e=(n=this.getInputs()).length;i<e;i++)t=n[i],r.push(t.form=null);return r}initActions(){var t,i,e,n,r,s;for(s=[],n=0,r=(i=this.getInputs()).length;n<r;n++)null!==(t=i[n]).rules&&s.push(function(){var i,n,r,s;for(s=[],i=0,n=(r=t.rules).length;i<n;i++)switch((e=r[i])[1]){case FormRuleCommand.ON:switch(e[2]){case FormRuleOperator.CHANGE:switch(e[3]){case FormRuleAction.FUNCTION:s.push(this.initActionOnChange(t,e));break;default:s.push(void 0)}break;default:s.push(void 0)}break;default:s.push(void 0)}return s}.call(this));return s}initActionOnChange($i,i){var n,name;return n=this.getInputByName(i[0]),name="function"+(new Date).getTime(),eval("Form['"+name+"']="+i[4]),console.log("$I",$i),n.$wrap.on("input:change",function(){return Form[name]($i,n.value())}),n.$wrap.on("destroyed",function(){if(null!=Form[name])return delete Form[name]})}validate(t={}){var i,e,n,r,s,a,u;for(u={bad:{},good:{},success:!0},e=0,n=(a=this.getInputs()).length;e<n;e++)s=(i=a[e]).validate(),r={input:i,result:s},void 0!==t.prepare?"function"==typeof t.prepare&&t.prepare(i,s):Form.globalPrepareValidate(i,s),s.errors.length>0?(u.bad[i.getName()]=r,u.success=!1,void 0!==t.bad?"function"==typeof t.bad&&t.bad(i,s):Form.globalBad(i,s)):(u.good[i.getName()]=r,void 0!==t.good?"function"==typeof t.good&&t.good(i,s):Form.globalGood(i,s));return u.success?"function"==typeof t.success&&t.success(u):"function"==typeof t.fail&&t.fail(u),u}getInputs(t={}){var i;return i=[],$("[data-input]",this.container).each(function(){var e;return e=Input.init($(this)),null!=(null!=t?t[e.getName()]:void 0)&&e.initData(t[e.getName()]),i.push(e)}),i}json(){var t,i,e,n,r,s;if(null!=Form.globalJSON)s=Form.globalJSON(this.container);else for(s={},i=0,e=(r=this.getInputs()).length;i<e;i++)n=(t=r[i]).getName(),t.isCheckbox?void 0===s[n]?s[n]=t.value():Array.isArray(s[n])?s[n].push(t.value()):s[n]=[s[n],t.value()]:t.isRadio?t.checked()&&(s[n]=t.value()):s[n]=t.value();return s}initInputs(t={}){var i,e,n,r,s;for(s=[],e=0,n=(r=this.getInputs(t)).length;e<n;e++)(i=r[e]).$wrap.on("input:change",this.checkRules.bind(this)),i.$wrap.on("input:show",this.recheckRules.bind(this)),i.$wrap.on("input:hide",this.recheckRules.bind(this)),s.push(i.form=this);return s}getInputByName(t){var i,e,n,r;for(e=0,n=(r=this.getInputs()).length;e<n;e++)if((i=r[e]).getName()===t)return i;return null}checkRules(){var t,i,e,n;for(t=this.json(),this.needRecheckRules=!1,i=0,e=(n=this.getInputs()).length;i<e;i++)n[i].checkRules(t);if(this.needRecheckRules)return this.checkRules()}recheckRules(){return this.needRecheckRules=!0}sta